为什么rdf中必须有rdf:dataType子类rdf:Class?

为什么rdf中必须有rdf:dataType子类rdf:Class?,rdf,semantic-web,ontology,rdfs,Rdf,Semantic Web,Ontology,Rdfs,从 rdfs:Datatype是数据类型的类。所有实例 rdfs:Datatype对应于中描述的数据类型的RDF模型 RDF概念规范[RDF11-Concepts]。rdfs:数据类型是二者兼而有之 rdfs:Class的实例和子类。每个实例 数据类型是rdfs:Literal的一个子类 为什么必须rdfs:Datatype子类rdf:Class?为什么它不能只是rdfs:Class的一个实例呢?我不理解子类化类的含义。原因是数据类型本身在抽象模型中被视为一个类,其实例是该数据类型值的实际出现

rdfs:Datatype是数据类型的类。所有实例 rdfs:Datatype对应于中描述的数据类型的RDF模型 RDF概念规范[RDF11-Concepts]。rdfs:数据类型是二者兼而有之 rdfs:Class的实例和子类。每个实例 数据类型是rdfs:Literal的一个子类


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

原因是数据类型本身在抽象模型中被视为一个类,其实例是该数据类型值的实际出现

例如,数据类型
xsd:integer
可以被认为是“所有整数的类”,因此,由于类
rdfs:datatype
是“所有数据类型类的类”,它是
rdfs:class
的子类(所有类的类)。

子类和实例 虽然可能存在细微的差异,但通常可以将类视为集合和子集的子类。当我们说“每个X也是Y”时,我们通常会识别子集关系,在这种情况下X&subsetq;当我们可以说“X是Y”时,我们通常将事物理解为集合,在这种情况下,X是元素,Y是集合

对于X的值,比如xsd:integer,我们肯定希望能够说“X是一个rdfs:Datatype”,所以我们确实希望rdfs:Datatype是一个类,这意味着我们希望

(1) rdfs:Datatype-rdf:type-rdfs:Class

问题是我们是否想要

(2) rdfs:Datatype rdfs:rdfs的子类:Class

因为rdfs:subassof的域是rdfs:Class,(2)实际上意味着(1)。也就是说,任何东西的子类都是一个类,所以如果我们断言(2),那么(1)逻辑上就是这样。我们绝对想要(1)。问题是我们是断言(2)并免费获取(1)和(2),还是只断言(1)并跳过(2)

从概念上讲,(2)是有意义的。所有数据类型都是类型。如果某个D是数据类型,那么像“x是D”这样的句子就有意义了。这意味着数据类型集是所有类的子集。这证明接受(2)是正当的

具体的可能性 (2) (并隐含第(1)款) 将其视为实例、类和元类的层次结构可能会有所帮助。rdfs:subassof是同一层元素之间的链接,而rdf:type是一层元素和更高层元素之间的链接。如果rdfs:Datatype是rdfs:Class的子类,那么我们将所有“东西”保持在同一级别:

(1) 单独(无(2)) 如果我们将rdfs:Datatype作为rdfs:Class的实例,那么特定的数据类型(例如xsd:integer)现在与我们的个人(如John Doe)位于同一层,而这些数据类型的实例(例如30)位于较低层:

现在,这是否是一个大问题还有待讨论。类和元类的概念在RDF这样的开放式表示中并不严格。毕竟,rdfs:Class是rdfs:Class的一个实例

评论中的选项 您在中提到了第三个备选方案(添加了重点):


但是假设rdf:Datatype只是一个类的实例,而不是 子类。这会有什么区别?!你提到的一切 仍然有效xsd:integer仍然可以子类rdf:Datatype,并且 xsd:integer的实例将具有类xsd:integer。似乎没有 引入rdf子类的原因:类。我不 了解它为~语义添加了什么

您不希望xsd:integer成为rdfs:Datatype的子类,因为这会说“如果X是一个整数,那么X就是一个数据类型”,而这并不是我们所期望的。三十是一个整数,但它不是一个数据类型;我们通常不会说某些东西“属于30型”。在你的链条上

rdsf:Class←X-rdfs:Datatype←Y-xsd:integer


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

但假设rdf:Datatype只是类的实例,而不是子类。这会有什么区别?!你提到的一切仍然有效。整数仍然可以是rdf:Datatype的子类,而xsd:integer的实例将具有xsd:integer类。似乎根本没有理由引入rdf:Class的子类。我不明白它给~semantics.@FrancisM.Bacon添加了什么,因为rdfs:subassof的域是rdfs:Class,只要你断言“Datatype subassof Class”,你也会隐式断言“Datatype rdf:type Class”,所以在这两种情况下,你都会得到“Datatype rdf:type Class”。谢谢你的详细回复。我不明白你反对我的选择。事实上,我认为我的选择就是你在第二个选择中提出的。第二种选择是有缺陷的,或者至少是不明确的:如果xsd:integer是rdf:dataType而不是rdf:Class,那么说ex:three是xsd:integer是没有意义的,因为xsd:integer不是类。要解决这个问题,您必须使rdf:dataType成为rdf:class的子类,我们回到了原点。我的方式rdf:Datatype和rdf:integer是类,rdf:integer子类rdf:Datatype子类rdf:literal.@FrancisM.Bacon在什么东西是类和什么东西是属于rdf中类的“元素”之间没有严格的区别。这就是为什么,例如,rdfs:Class可以是rdfs:Class的实例。据我所知,您在评论中提出的建议是使rdfs:Datatype成为rdfs:Class的实例,而不是rdfs:Class的子类,然后使xsd:integer成为rdfs:Datatype的子类。使xsd:integer成为su