来自RDF模式1.1
2.4 rdfs:数据类型 rdfs:Datatype是数据类型的类。rdfs:Datatype的所有实例都对应于RDF概念规范RDF 11-概念中描述的数据类型的RDF模型。rdfs:Datatype是rdfs:Class的实例和子类。rdfs:Datatype的每个实例都是rdfs: Each的子类。
为什么rdfs:Datatype子类rdf:Class?为什么它不能只是rdfs:类的一个实例呢?我不明白子类的意思。
发布于 2014-07-18 12:44:36
子类和实例
虽然可能存在细微的差异,但通常可以将类看作集合,将类看作子集的子类。当我们说“每个X也是Y”时,我们通常会识别子集关系,在这种情况下,当我们可以说"X是Y",X是一个元素,Y是一个集合时,我们通常将事物作为集合来实现。
我们绝对希望能够说"X是一个rdfs:Datatype“来表示X的值,比如xsd:整数,所以我们确实希望rdfs:Datatype是一个类,这意味着我们希望
(1) rdfs:Datatype :type rdfs:Class。
问题是我们是否想
(2) rdfs:Datatype rdfs:subClassOf :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)处于同一层,而这些数据类型的实例,例如30,则位于较低的层上:

现在,这到底是一件大事还是不重要,还有待商榷。类和元类的概念在像RDF这样的开放表示中并不严格。毕竟,rdfs:Class是rdfs:Class的一个实例!
注释中的一个选项
您在你的评论 on 吉恩的回答中提到了第三种选择(重点是添加的):
但是假设rdf:Datatype只是类的一个实例,而不是一个子类。会有什么不同?!你提到的一切仍然有效。xsd:仍然可以子类rdf:Datatype,xsd:的实例将具有xsd:类。似乎根本没有理由引入rdf:Class的子类。我不明白它给语义增加了什么。
您不希望xsd:integer成为rdfs:Datatype的子类,因为这意味着“如果X是一个整数,那么X就是一个数据类型”,这并不是我们所期望的。30是一个整数,但它不是数据类型;我们通常不会说某样东西“类型为30”。在你的锁链里
rdsf:类←X- rdfs:Datatype←Y-xsd:整数
您可以为X是rdfs:subClassOf (case (2))或rdf:type (case (1))提供一个参数,但是Y实际上需要是rdf:type,而不是rdfs:subClassOf,因为整数和数据类型是不同类型的东西。
发布于 2014-07-18 08:51:30
原因是数据类型本身被认为是抽象模型中的一个类,其实例是该数据类型的值的实际出现。
例如,数据类型xsd:integer可以被认为是“所有整数的类”,因此,由于类rdfs:Datatype是“所有数据类型类的类”,所以它是rdfs:Class (所有类的类)的子类。
https://stackoverflow.com/questions/24817607
复制相似问题