来自RDF Schema 1.1


2.4 rdfs:Datatype

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


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

最佳答案

子类和实例

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

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


(1)rdfs:数据类型rdf:类型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的实例!

评论中的一个选项

您在your comment上的Jeen's answer中提到了第三种替代方法(已添加强调):


但是假设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,因为整数和数据类型不同各种各样的东西。

08-25 14:15