我想知道为什么我们必须加载本体,同时在查询时提供其命名空间?为什么加载本体是不够的?
为了更好地理解我的问题,这里有一个示例代码:
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
答案 0 :(得分:3)
要在语义网上指定元素,您需要其URI:唯一资源标识符,它由名称空间和 localname 组成。例如,考虑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具有特定命名空间的资源时,它会增加方便性。