我正在创建一个基于RDFS/OWL的类层次结构,并使用a
(rdf:type
)关系在所有类中创建实例。我想检索一个特定类的实例,不包括它的子类的实例。但是,当我编写SPARQL查询时,它也会给我每个子类的所有实例。
book
是一个类,它有两个子类:hard_bounded_book
和soft_binded_books
换句话说(在某些情况下):
@prefix ex: <http://book_triples.org/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
ex:hard_bounded_book1
a ex:hard_bounded_book .
ex:soft_binded_books1a
a ex:soft_binded_books .
ex:soft_binded_books rdfs:subClassOf ex:Book .
ex:hard_bounded_book rdfs:subClassOf ex:Book .
ex:Book a rdf:Class .
ex:Book1 a ex:Book .
当我查询
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ex: <http://book_triples.org/>
SELECT ?book
WHERE
{ ?book rdf:type ex:Book }
感谢任何帮助。多谢了。
无论在存储中是否打开或关闭推理,您都可以编写一个查询,该查询只返回特定类的实例,方法是筛选出同时也是ex:book
的子类实例的所有实例,如下所示:
SELECT ?book
WHERE {
?book rdf:type ex:Book
FILTER NOT EXISTS {
?book rdf:type ?c .
?c rdfs:subClassOf+ ex:Book .
FILTER (?c != ex:Book)
}
它检查返回的每个book,使该book成为ex:book
子类实例的三元组不存在。第二个过滤器(检查?c
不等于ex:book
)是必要的,因为在RDFS中,每个类都是其自身的子类。
当然,这个查询的运行成本要比您的简单原始查询高,所以如果您的triplestore有一个选项(暂时)关闭推理,那可能是一个更好的解决方案。
顺便提一下:subclassof
模式后面的+
符号是一个“1或多个levels deep”运算符,在这里是可选的。如果希望严格排除所有可能的子类实例,则需要包含它,即使推理器已经完成了所有的推理。考虑到在你的场景中很可能有一个推理器来推断出完全的演绎闭包,你可以把它省略掉。
更新以更详细地解释我关于+
符号的观点:假设我们有类a、B和C:B是a的子类,C是B的子类。
想象一个单独的x,它被声明为C的实例。
+
符号的子类过滤器将工作以从结果中删除x。到目前为止还不错。然而,假设我们还插入了x是A的实例这一显式事实。
如果启用了推理,那么在没有+
运算符的情况下,我们仍然可以使用查询。但是,在不进行推断的情况下,对A的所有实例的查询现在将返回x,即使x也是A的(间接)子类(即C)的实例。这是边缘情况,+
运算符对此很有帮助。
X1.2新增 sp_sql_posts_bycatid($cid,$tag,$where) 功能: 根据分类文章分类ID 获取该分类下所有文章(包含子分类中文章),调用方式同sp_sql_posts 参数: $cid:分类id $tag:查询标签,以字符串方式传入,例:"order:post_date desc,listorder desc;"field:调用post指定字段,如(id,post
问题内容: 我想获取某个类的对象的所有实例。 例如: 应该是或(顺序无关紧要)。 一个加号是,如果该函数将返回具有所请求类的超类的实例,尽管这不是必需的。 我能想到的一种方法是使用包含实例数组的静态类成员变量。在类的构造函数和析构函数中,我将在数组中添加或删除。如果我必须在许多类上这样做,这将很麻烦且容易出错。 问题答案: 如果您从TrackableObject类派生所有对象,则可以将此类设置为处
问题内容: 在Java中,是否有任何可能的方法来获取某个类的所有实例? 问题答案: 实例化类(Singleton模式)时,可以使用Factory静态初始化程序,然后将工厂构造函数中的每个生成的实例添加到List中。 像这样的东西:
X1.2新增 sp_sql_posts_paged_bycatid($cid,$tag,$pagesize,$pagetpl) 功能: 根据分类文章分类ID 获取该分类下所有文章(包含子分类中文章),已经分页,调用方式同sp_sql_posts_paged 参数: $cid:分类id $tag:查询标签,以字符串方式传入,例:"field:post_title,post_content;limi
我试图得到trait(接口)的所有实例子类。这个特性有多个实现,由第三方用户提供。 这是否可能得到所有实例子类没有显式绑定,因为我没有控制,实现由第三方用户提供。? 我已经看到了同样的问题,你需要明确地绑定。 代码示例: 这不起作用。任何帮助都将不胜感激!
我有一个名为Attributes的类,它有如下所列的一些实例变量: