为什么RDF中的rdf:dataType子类rdf:Class?

Fra*_*con 3 rdf semantic-web ontology rdfs

RDF Schema 1.1开始

2.4 rdfs:数据类型

rdfs:Datatype是数据类型的类。rdfs:Datatype的所有实例都对应于RDF概念规范[RDF11-CONCEPTS]中描述的数据类型的RDF模型。rdfs:Datatype既是rdfs:Class的实例又是rdfs:Class的子类。rdfs:Datatype的每个实例都是rdfs:Literal的子类。

为什么rdfs:Datatype必须是rdf:Class?为什么它不能只是rdfs:Class的实例?我不理解子类化的含义。

Jos*_*lor 5

子类和实例

尽管可能会有细微的差异,但通常可以将类视为集合,并将子集的子类视为。当我们说“每个X也是一个Y”时,我们通常会识别子集关系,在这种情况下,X⊆Y。当我们说“ X是一个Y”时,我们通常将事物实现为集合,在这种情况下,X是元素,并且Y是一个集合。

对于X的值(例如xsd:integer),我们绝对希望能够说“ X是rdfs:Datatype”,因此我们确实希望rdfs:Datatype是一个类,这意味着我们想要

(1)rdfs:数据类型rdf:type rdfs:Class

问题是我们是否要

(2)rdfs:数据类型rdfs:subClassOf rdfs:Class

由于rdfs:subClassOf的域是rdfs:Class,因此(2)实际上意味着(1)。也就是说,所有事物的子类都是类,因此,如果我们断言(2),则在逻辑上遵循(1)。我们一定要(1)。问题是我们是否断言(2)并免费获得(1)和(2),还是仅断言(1)并跳过(2)。

从概念上讲,(2)是有意义的。一切都是数据类型就是某种类型。如果某些D是数据类型,则类似“ x是D”的句子是有意义的。这意味着数据类型集是所有类的子集。这证明接受(2)。

具体可能性

(2)(并且隐式(1))

将其视为实例,类和元类的层次结构可能会有所帮助。rdfs:subClassOf是同一层元素之间的链接,而rdf:type是一层和更高层之间的链接。如果rdfs:Datatype是rdfs:Class的子类,则我们将所有“事物”保持在同一级别:

在此处输入图片说明

(1)个(不包括(2))

如果我们将rdfs:Datatype 设为rdfs:Class 的实例,则特定的数据类型(例如xsd:integer)现在与我们的个人(例如John Doe)位于同一层,并且这些数据类型的实例(例如Thirty,处于较低级别:

在此处输入图片说明

现在,这是否大事还有待争论。在像RDF这样的开放式表示形式中,类和元类的概念并不是很严格。毕竟,rdfs:Class是rdfs:Class的实例

评论中的一个选项

您在对Jeen的答案的评论中提到了第三种选择(强调):

但是,假设rdf:Datatype只是一个类的实例,而不是子类。这会有什么不同?您提到的所有内容仍然有效。xsd:integer仍然可以继承rdf:Datatype的子类,而xsd:integer的实例将具有xsd:integer类。似乎根本没有理由引入rdf:Class的子类。我不明白它对〜语义有何影响。

您不希望xsd:integer成为rdfs:Datatype的子类,因为那样会说“如果X是一个整数,那么X是一个数据类型”,而这实际上并不是我们所期望的。Thirty是一个整数,但不是数据类型。我们通常不会说“类型为三十”。在你的连锁店

rdsf:类别←X — rdfs:数据类型←Y — xsd:整数

您可以将X作为rdfs:subClassOf(情况(2))或rdf:type(情况(1))作为参数,但Y确实需要为rdf:type,而不是rdfs:subClassOf,因为整数和数据类型不同各种各样的东西。