如何使用 SPARQL 区分事物和无生命的对象
Posted
技术标签:
【中文标题】如何使用 SPARQL 区分事物和无生命的对象【英文标题】:How to differentiate between a Thing and an inanimate object with SPARQL 【发布时间】:2014-04-13 18:59:12 【问题描述】:使用 SPARQL,我可以很容易地获得有关某些资源的所有相关信息,但我很难弄清楚如何真正区分事物和 事物 -- 其中Thing
是所有类的超类,是无生命的物体,如杯子、勺子、铅笔等。
例如,以下是 DBPedia 中的一些无生命对象:
分叉:http://dbpedia.org/page/Fork 罐子:http://dbpedia.org/page/Jar 信封:http://dbpedia.org/page/Envelope 棒球手套:http://dbpedia.org/page/Baseball_glove 螺丝刀:http://dbpedia.org/page/Screwdriver事情是这样的——我知道很多本体没有特定的类型可以轻松地让您能够查询对象,但是,也许有一种方法可以判断某物是否是 事物 因为它没有子类,或者它的类型的属性路径可以用来以某种迂回的方式进行区分。
但是,总的来说,我想知道是否可以使用 SPARQL 查询区分 Things
和 things?如果有,怎么做?
【问题讨论】:
正如@jkbkot 所解释的,SPARQL 中的这些集合资源之间没有内在的区别,这在所有本体中都是有效的。如果您专门询问 DBpedia 数据,那么这个问题与 SPARQL 无关,尤其是与 DBpedia 更相关。请考虑在您的问题及其标签中反映这一点。 我在问题中添加了更多内容。我在 DBPedia 中给出了对象的示例,因为这使人们可以轻松查看这些项目的可用第三级信息......这很有帮助,恕我直言。 【参考方案1】:这取决于您使用的本体。如果没有其他信息,一般无法确定。您的本体很可能甚至没有尝试做出这样的区分。
关于DBpedia,值得一看DbPedia Classifications,目前他们提供三个:
***分类:使用 SKOS 词汇和 DCMI 术语表示 YAGO Classification:来源于***分类系统,使用Word Net Word Net Synset Links:通过手动关联***信息框模板和 Word Net 同义词生成,应该比***类别更精确您也可以尝试使用这些分类来区分有生命和无生命的物体。
但是,要使用类别,您可能必须遍历 skos:broader
层次结构,在这种情况下您应该小心,因为它包含循环,请参阅 http://wikiloopr.com/
最好从 Joshua 在他的回答中提出的建议开始,如果还不够,可以用分类来补充。
【讨论】:
【参考方案2】:您可以在线浏览DBpedia ontology classes。在owl:Thing
下,有许多***类。虽然它不是一个完美的匹配,因为它包含一些集体实体,它看起来像 Agent 类及其补充可能相当好地对应于动画和非动画对象。您可能还需要考虑 Animal 类,或 Species 类下的其他一些东西。还有一些非 DBpedia 类,例如 foaf:Person,您可能也应该考虑。无论如何,这里的主要方法是在该层次结构中选择您认为代表有生命和无生命的事物的类,然后使用它来决定实例。
例如,您可以使用这样的查询来查找动画事物(如果我们将动画事物定义为代理和动物):
select ?x where
?x a owl:Thing
filter exists
?x a ?type .
filter( ?type in ( dbpedia-owl:Agent, dbpedia-owl:Animal ) )
limit 100
SPARQL results
【讨论】:
对不起,当你说“代理类和它的恭维”时,你指的是哪个类? @Kristian 不是恭维;它的complement。 :) “代理”和“非代理”。?i a dbpedia-owl:Agent
和 ?i [] [] . filter not exists ?i a dbpedia-owl:Agent
.
本体类的补码的定义是什么?
@Nordlöw 就像在集合论中一样。 owl primer 可能是一个有用的起点。以上是关于如何使用 SPARQL 区分事物和无生命的对象的主要内容,如果未能解决你的问题,请参考以下文章