当我们看到像这样的语句时
<owl:Ontology rdf:about="xml:base"/>
在本体的开头(头),这到底意味着什么?
如果我们试着用通俗的英语读,这应该意味着xml:base
和Ontology
。但我的理解并没有超出这个范围。我特别想念xml:base
部分。在本体论的情况下,xml:base
扮演什么角色?
(参考:A语义网状物底漆,第二版,Grigoris Antoniou和Frank van Harmelen,第135页)
<owl:Ontology>
表示您正在启动在owl
命名空间中定义的Ontology
。
rdf:about
,来自rdf
命名空间的about
属性,应该给出一个URI,该URI将给出该XML所说内容的定义。但是,在这种情况下,该值为xml:base
。这意味着该XML模式的主题由位于检索该XML的URI处的资源表示。
如果本体包含另一个<xml:base>
元素,那么它将覆盖URI;我们不查看刚刚在哪里检索到这个包含本体的XML文件,而是查看<xml:base>
元素中定义的URI。
埃塔:正如伊格纳齐奥在下面的评论中指出的,rdf:about="xml:base"
并不是真的那样工作。即使我已经正确地解释了Owl的人实际上想要的东西,代码实际上说的是about
属性是字符串xml:base
,这实际上没有任何意义。
在学术研究背景下,我正在阅读同一本书(《语义网络入门》,第二版,Grigoris Antoniou和Frank van Harmelen),我认为最初出现在同一本书里的描述对于回答这个问题是必要的,同时还有一些额外的解释,包括编码案例和Apache Jena的文档参考,一个开源的本体应用程序构建器,可以被更广泛的用户所关联,这些用户不必是语义网或本体工程方面的计算机科学专家。
- 在ch3.2.4语句的三个视图p66中,
rdf:about
属性为引用现有资源
- 正如ApacheJena中所记载的那样,
owl:Ontology
类的这个个体的URI按照惯例本体文档本身的URL或web地址。
因此,
- 在
rdf:about
中声明的xml:base
肯定是分配给类型为owl:ontology
的资源的URI - 以下本体中的URI以相同的方式工作:
<owl:Ontology rdf:about="xml:base"/> <owl:Ontology rdf:about="http://examples/base#"/>
但是还有另一种情况:
<owl:Ontology rdf:about=""/>
空的本体URI以完全不同的方式工作,这可能会导致其他不寻常的URI形式,如xml:base
,在某种程度上令人困惑,正如本文所质疑的那样。Apache Jena的文件显示
构造
rdf:about=""
不指示没有URI的资源;它实际上是引用包含本体的文档的基URI的一种简写方式。
一些发布的RDFS/OWL推理器产品可以帮助我们更详细地检查本体URI。在这里,我们可以通过一个实验存储库来解释上面关于本体URI的两个案例是如何在ApacheJena中工作的:
// https://github.com/chigix/jena_stories/blob/b9af78e7c128a3e31f41bbfbafd06199099eb7f7/src/test/java/com/chigix/jena_stories/ontology/MetaHeaderTest.java#L52
Ontology baseOntology = model.getOntology("xml:base");
assertThat(baseOntology, notNullValue(Ontology.class));
assertThat(baseOntology.getURI(), equalTo("xml:base"));
从上面的单元测试片段中,可以通过给定的URIxml:base
来查询分配有xml:base
的本体。这意味着这里的xml:base
只是一个简单的字符串,表示底层本体资源的URI。
此外:
// https://github.com/chigix/jena_stories/blob/b9af78e7c128a3e31f41bbfbafd06199099eb7f7/src/test/java/com/chigix/jena_stories/ontology/MetaHeaderTest.java#L56
model.read(RDFDataMgr.open("african-wildlife.owl"), "http://ontology.chigix.com/some#", "RDF/XML");
assertThat(model.getOntology("xml:base"), notNullValue(Ontology.class));
assertThat(model.getOntology("xml:base").getURI(), equalTo("xml:base"));
assertThat(model.getOntology("http://ontology.chigix.com/some"), nullValue());
因此,即使一个本体包含在一个URL与底层本体资源上分配的URI不同的文档中,我们仍然使用本体的URI,这里称为xml:base
,来查询目标本体。
但是,如果文档中的本体URI为空,该怎么办:
// https://github.com/chigix/jena_stories/blob/b9af78e7c128a3e31f41bbfbafd06199099eb7f7/src/test/java/com/chigix/jena_stories/ontology/MetaHeaderTest.java#L69
model.read(RDFDataMgr.open("printer-ontology.owl"), "http://ontology.chigix.com/some#", "RDF/XML");
assertThat(model.getOntology("xml:base"), nullValue());
assertThat(model.getOntology("http://ontology.chigix.com/some"), notNullValue(Ontology.class));
我们可以看到:
- 可以使用与文档URL相同的给定URI来查询本体
- 被查询的CCD_ 28会不由自主地引用文档中的本体资源
结论是,本体中的xml:base
实际上只是一个普通的URI字符串,不能发挥任何特殊的神奇功能。<owl:Ontology rdf:about="xml:base"/>
在本体文档中的声明是为了内务管理目的对类元断言进行分组,包括
注释、版本控制和包含其他本体
,如ch4.2.2 Header中的示例所示,p116:
<owl:Ontology rdf:about="">
<rdfs:comment> This is an ontology </rdfs:comment>
<owl:priorVersion rdf:resource="http://..." />
<owl:imports rdf:resource="http://..." />
<rdfs:label>Ultraman Tiga</rdfs:label>
</owl:Ontology>
上述示例中使用的owl文档最初来自本书ch4.3示例,第129-138页中的示例,它们也可以从实验库中访问:
african-wildlife.owl
:https://github.com/chigix/jena_stories/blob/master/src/test/resources/african-wildlife.owlprinter-ontology.owl
:https://github.com/chigix/jena_stories/blob/master/src/test/resources/printer-ontology.owl