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