在 DBpedia 中查找 class 共有的属性
Finding properties that are common to a class in DBpedia
我有一个关于如何在 DBpedia 中为共享 class 的实例查找不同属性的问题。我认为更多的是关于如何在 SPARQL 中执行此操作。我在这里尝试了这个查询:
SELECT DISTINCT ?p WHERE {
?s a <http://dbpedia.org/ontology/Film> .
?s ?p ?o.
}
但是,我意识到这个查询为您提供了所有实例使用的所有不同属性,本质上,class 实例的不同属性可能保持不变,即 [=13] =] 例如,在像 DBpedia 这样的现实生活中基于维基百科的提取集,你没有那个。所以对上面查询的计数会给我 1767 distinct properties
。但是,如何在 SPARQL 中找到 class 实例共有的所有属性呢?就像在 class 的实例中出现的一组属性一样,对于整个集合是通用的。这应该比 1767 小一些吧?同样,对于 LUBM,上面的查询执行了它,并且似乎所有实例都共享同一组不同的属性。我想对于 DBpedia 来说情况并非如此。我也知道这可以在 Java 中完成,例如。我可以遍历 class 的所有实例的所有属性,并保存所有出现的属性。我认为这太贵了,想知道在 SPARQL 中是否可行。
PS:有人问了一个相关问题 ,但正如我在这里写的,我不确定这是否真的捕获了所有 classes 的共同属性.
解引用电影 URI 将告诉您有关 DBpedia 中的电影 class 的所有信息:
HTML 资源:
http://mappings.dbpedia.org/server/ontology/classes/Film
RDF 资源:
http://dbpedia.org/data3/Film.ttl
电影域和范围属性的 SPARQL 查询:
SELECT ?predicate
WHERE {
?predicate rdfs:domain|rdfs:range <http://dbpedia.org/ontology/Film>
}
如果您正在寻找每部影片都具有这些属性值的属性,那么您可以使用如下查询来表达:
select distinct ?p {
#-- Find all the distinct properties
#-- of some reference Film. It shouldn't
#-- matter which Film we get.
{ select distinct ?p {
{ select ?ex { ?ex a dbo:Film } limit 1 }
?ex ?p ?o
}
}
#-- Now exclude any of those properties
#-- if there is a Film that doesn't have
#-- a value for them.
filter not exists {
?f a dbo:Film .
filter not exists { ?f ?p ?o }
}
}
此查询查找一部影片,然后获取其所有不同的属性。由于我们正在寻找 all 电影具有的属性,因此我们选择哪部电影作为单一电影并不重要。然后我们过滤掉某些电影 没有 的属性中的任何一个 属性。剩下的就是每部电影都有的属性。
不幸的是,DBpedia 数据中 every Film 似乎唯一的 属性 是 rdf:type。
我有一个关于如何在 DBpedia 中为共享 class 的实例查找不同属性的问题。我认为更多的是关于如何在 SPARQL 中执行此操作。我在这里尝试了这个查询:
SELECT DISTINCT ?p WHERE {
?s a <http://dbpedia.org/ontology/Film> .
?s ?p ?o.
}
但是,我意识到这个查询为您提供了所有实例使用的所有不同属性,本质上,class 实例的不同属性可能保持不变,即 [=13] =] 例如,在像 DBpedia 这样的现实生活中基于维基百科的提取集,你没有那个。所以对上面查询的计数会给我 1767 distinct properties
。但是,如何在 SPARQL 中找到 class 实例共有的所有属性呢?就像在 class 的实例中出现的一组属性一样,对于整个集合是通用的。这应该比 1767 小一些吧?同样,对于 LUBM,上面的查询执行了它,并且似乎所有实例都共享同一组不同的属性。我想对于 DBpedia 来说情况并非如此。我也知道这可以在 Java 中完成,例如。我可以遍历 class 的所有实例的所有属性,并保存所有出现的属性。我认为这太贵了,想知道在 SPARQL 中是否可行。
PS:有人问了一个相关问题
解引用电影 URI 将告诉您有关 DBpedia 中的电影 class 的所有信息:
HTML 资源:
http://mappings.dbpedia.org/server/ontology/classes/Film
RDF 资源:
http://dbpedia.org/data3/Film.ttl
电影域和范围属性的 SPARQL 查询:
SELECT ?predicate
WHERE {
?predicate rdfs:domain|rdfs:range <http://dbpedia.org/ontology/Film>
}
如果您正在寻找每部影片都具有这些属性值的属性,那么您可以使用如下查询来表达:
select distinct ?p {
#-- Find all the distinct properties
#-- of some reference Film. It shouldn't
#-- matter which Film we get.
{ select distinct ?p {
{ select ?ex { ?ex a dbo:Film } limit 1 }
?ex ?p ?o
}
}
#-- Now exclude any of those properties
#-- if there is a Film that doesn't have
#-- a value for them.
filter not exists {
?f a dbo:Film .
filter not exists { ?f ?p ?o }
}
}
此查询查找一部影片,然后获取其所有不同的属性。由于我们正在寻找 all 电影具有的属性,因此我们选择哪部电影作为单一电影并不重要。然后我们过滤掉某些电影 没有 的属性中的任何一个 属性。剩下的就是每部电影都有的属性。
不幸的是,DBpedia 数据中 every Film 似乎唯一的 属性 是 rdf:type。