为什么在查询本体时我们必须加载本体,还提供其命名空间?

时间:2017-05-31 10:37:17

标签: namespaces sparql owl ontology rdflib

我想知道为什么我们必须加载本体,同时在查询时提供其命名空间?为什么加载本体是不够的?

为了更好地理解我的问题,这里有一个示例代码:

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

1 个答案:

答案 0 :(得分:3)

要在语义网上指定元素,您需要其URI:唯一资源标识符,它由名称空间 localname 组成。例如,考虑Person RDF类;你如何区分某个其他本体的Person DBpedia类http://dbpedia.org/ontology/Person和Person?您需要名称空间http://dbpedia.org/ontology/和本地名称Person。哪个都唯一地标识了这个类。

现在回到您的具体问题,当您查询本体时,您可能使用多个命名空间,某些命名空间可能不是您的本体之一。您需要其他命名空间来查询自己的本体,例如: rdfrdfsowl。例如,您很少编写没有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具有特定命名空间的资源时,它会增加方便性。