我们来查询OWL2 Ontology的代码。
$ http --follow get http://www.w3.org/2002/07/owl# | grep -B30 'rdf-schema>'
⇒
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<http://www.w3.org/2002/07/owl> a owl:Ontology ;
dc:title "The OWL 2 Schema vocabulary (OWL 2)" ;
rdfs:comment """
This ontology partially describes the built-in classes and
properties that together form the basis of the RDF/XML syntax of OWL 2.
The content of this ontology is based on Tables 6.1 and 6.2
in Section 6.4 of the OWL 2 RDF-Based Semantics specification,
available at http://www.w3.org/TR/owl2-rdf-based-semantics/.
Please note that those tables do not include the different annotations
(labels, comments and rdfs:isDefinedBy links) used in this file.
Also note that the descriptions provided in this ontology do not
provide a complete and correct formal description of either the syntax
or the semantics of the introduced terms (please see the OWL 2
recommendations for the complete and normative specifications).
Furthermore, the information provided by this ontology may be
misleading if not used with care. This ontology SHOULD NOT be imported
into OWL ontologies. Importing this file into an OWL 2 DL ontology
will cause it to become an OWL 2 Full ontology and may have other,
unexpected, consequences.
""" ;
rdfs:isDefinedBy
<http://www.w3.org/TR/owl2-mapping-to-rdf/>,
<http://www.w3.org/TR/owl2-rdf-based-semantics/>,
<http://www.w3.org/TR/owl2-syntax/> ;
rdfs:seeAlso <http://www.w3.org/TR/owl2-rdf-based-semantics/#table-axiomatic-classes>,
<http://www.w3.org/TR/owl2-rdf-based-semantics/#table-axiomatic-properties> ;
owl:imports <http://www.w3.org/2000/01/rdf-schema> ;
在这里,您可以看到OWL本体导入了RDF Schema本体。 RDF 模式的规范 URL 是这个,如前缀中指定的:
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
但是导入是这样的:
owl:imports <http://www.w3.org/2000/01/rdf-schema> ;
这个小差异应该不会对导入本身产生影响,因为 # 在获取 Web 资源时不会产生影响。然而,它还有其他重要的后果。
$ http --follow get http://www.w3.org/2002/07/owl# | grep -A5 'owl:imports a'
⇒
owl:imports a owl:OntologyProperty ;
rdfs:label "imports" ;
rdfs:comment "The property that is used for importing other ontologies into a given ontology." ;
rdfs:domain owl:Ontology ;
rdfs:isDefinedBy <http://www.w3.org/2002/07/owl#> ;
rdfs:range owl:Ontology .
rdfs:range
很重要。这意味着 owl:imports
属性的每个值都将被视为 owl:Ontology
。这意味着我们推断出以下三重:
<http://www.w3.org/2000/01/rdf-schema> a owl:Ontology
这会产生不良后果。特别是,
http://www.w3.org/2000/01/rdf-schema#
也(合法地)被视为本体论,如下所示:$ http --follow http://www.w3.org/2000/01/rdf-schema# | grep Ontology
⇒
<http://www.w3.org/2000/01/rdf-schema#> a owl:Ontology ;
因此,当我们列出图中包含 RDFS 和 OWL 的所有本体时,我们会得到重复项。
此外,如果用户想要查看
http://www.w3.org/2000/01/rdf-schema
“某种本体论”,他们将看不到其中的任何术语。
我认为这是 OWL 代码中的一个错误。
a owl:Ontology
三元组?您的评估是正确的。有几点需要更明确:
可以使用any URI格式来识别本体,甚至是空白节点(尽管仅使用相关命名空间的前缀通常更有用,从而导致像
owl: owl:imports rdfs:
这样的语句更加紧凑)。 OWL 可以自由选择任何 URI 来标识本体,但是使用相同格式标识 RDFS 当然是错误的。
OWL 本体不是“OWL 本体”,因为使用 OWL 进行推理是不正确的 - OWL 定义的术语被视为关键字,并且不会像其他术语那样被解释,因此您通常不会遇到在进行 OWL 推理时会遇到这个问题。但请注意,在这种情况下仅使用 RDFS 而不是 OWL 是完全可以的,并且 RDFS 蕴含确实应该产生
<http://www.w3.org/2000/01/rdf-schema> a owl:Ontology
,因此您在实践中可能会遇到这个问题。即使没有任何形式的蕴涵,像Linked Open Vocabularies这样的工具也可以使用这些三元组,因此这个问题与机器处理相关。
将这“两个”本体描述为重复是不准确的——单个实体可以根据需要自由使用尽可能多的 URI 来识别它——例如,普通人可能会认为所有这些都表示相同的“事物”:
http://www.w3.org/2000/01/rdf-schema#
https://www.w3.org/2000/01/rdf-schema#
http://www.w3.org:80/2000/01/rdf-schema#
http://www.w3.org:0080/2000/01/rdf-schema#
http://w3.org/2000/01/rdf-schema#
http://WWW.W3.ORG/2000/01/rdf-schema#
不要将这两个 URI 视为表示两个单独的资源,也许考虑
<http://www.w3.org/2000/01/rdf-schema#> owl:sameAs <http://www.w3.org/2000/01/rdf-schema>
更合理。 RDF 数据中不存在这样的三元组,但由于开放世界原则,这很好。
在实践中,定位描述词汇术语的本体从来都不是那么简单——
rdfs:isDefinedBy
指向提供术语定义的任何资源,因此像owl:imports rdfs:isDefinedBy <http://www.w3.org/2002/07/owl#>
这样的三元组为您提供了本体文档,但不是必然是本体本身,因此可用的工具必须配备找到它的方法,即使是通过 HTTP 重定向,其中没有链接两个资源的显式 RDF 语句。因此 http://www.w3.org/2000/01/rdf-schema
“应该”使用一些实现定义的方法来纠正 http://www.w3.org/2000/01/rdf-schema#
无论如何。