我想知道为什么我们必须加载一个本体,并且在查询它时提供它的名称空间?为什么加载本体是不够的?
为了更好地理解我的问题,下面是一个示例代码:
g = rdflib.Graph()
g.parse('ppp.owl', format='turtle')
ppp = rdflib.Namespace('http://purl.org/xxx/ont/ppp/')
g.bind('ppp', ppp)在第2行中,我们打开了本体(ppp.owl),但在第3行中,我们也提供了它的命名空间。命名空间是否显示程序如何处理本体?
干杯,RF
发布于 2017-05-31 13:56:00
要在语义web上指定元素,需要它的URI:惟一资源标识符,它由名称空间和本地名称组成。例如,假设Person是一个RDF类;在其他本体中,如何区分Person DBpedia类http://dbpedia.org/ontology/Person和Person?您需要名称空间http://dbpedia.org/ontology/和本地名称Person。它们都唯一地标识了类。
现在回到您的特定问题,当您查询本体时,您可能使用多个名称空间,有些名称空间可能不是您的本体之一。您需要其他名称空间来查询您自己的本体,例如rdf、rdfs和owl。例如,您很少能够编写没有rdf:type属性的任意查询,该属性包含在rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>命名空间下,而不是本体命名空间下。因此,您需要指定名称空间。
那么,既然您应该知道为什么要使用命名空间,那么我们可以继续。为什么每次需要时都重复名称空间的整个字符串?它只不过是一个前缀字符串,附加到要在查询中使用的本地名称,以避免详尽地写入完整uri。请参阅<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>和type之间的区别。
编辑
正如@AKSW所言,作为结论,不需要声明名称空间就可以使用本体,但是当经常使用URI具有特定命名空间的资源时,它会增加使用的方便。
https://stackoverflow.com/questions/44282450
复制相似问题