本节书摘来自华章出版社《语义网基础教程(原书第3版)》一 书中的第2章,第2.5节,作者:(希)grigoris antoniou(荷)paul groth(荷)frank van harmelen(荷)rinke hoekstra ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
rdf模式提供建模原语来表达2.5节中的信息。一个必须做的决定是使用什么样的形式语言。使用rdf本身并不让人吃惊:rdf模式的建模原语使用资源和属性定义。通过观察图2-6可以验证这个决定。我们将这个图表达为一个类/属性的层次以及实例,但是它本身当然也仅仅是一个带标签的图,可以用rdf编码。记住rdf允许表达有关任何资源的声明,并且任何拥有uri的事物都可以作为资源。因此,如果想让类“apartment”是“residential unit”的一个子类,我们可能会
1)为apartment、residential unit和subclassof定义所需的资源;
2)定义subclassof为一个属性;
3)编写三元租(apartment subclassof residential unit)。
所有这些步骤都包含在rdf的表达能力中。因此,一个rdfs文档仅仅是一个rdf文档,而我们可以使用某种rdf标准语法来编写。
现在,我们定义rdf模式的建模原语。
核心类包括:
rdfs:resource,所有资源的类。
rdfs:class,所有类的类。
rdfs:literal,所有文字(字符串)的类。
rdf:property,所有属性的类。
rdf:statement,所有具体化声明的类。
用来定义联系的核心属性包括:
rdf:type,将一个资源关联到它的类(参见2.4.1节)。该资源被声明为该类的一个实例。
rdfs:subclassof,将一个类关联到它的超类。一个类的所有实例都是它的超类的实例。注意,一个类可能是多个类的子类。例如,类femaleprofessor可能同时是female和professor的子类。
rdfs:subpropertyof,将一个属性关联到它超属性中的一个。
这里有一个例子,表达了所有的公寓都是居住单元:

注意,rdfs:subclassof和rdfs:subpropertyof被定义为传递的。并且很有趣的是,rdfs:class是rdfs:resource的一个子类(所有的类都是资源),同时rdfs:resource是rdfs:class的一个实例(rdfs:resource是所有资源的类,因此它是一个类!)出于同样的原因,每个类都是rdfs:class的实例。
用来限制属性的核心属性包括:
rdfs:domain,指定一个属性p的定义域,声明任何拥有某个给定属性的资源是定义域类的一个实例。
rdfs:range,指定一个属性p的值域,声明一个属性的取值是值域类的实例。
这里有一个例子声明当任何资源有一个地址时,它(通过推理)是一个单元并且取值是一个文字:
下面是一些对具体化有用的属性:
rdf:subject,将一个具体化声明关联到它的主语。
rdf:predicate,将一个具体化声明关联到它的谓语。
rdf:object,将一个具体化属性关联到它的宾语。
rdf还允许用一个标准的方式表达容器。可以表达包、序列或选择。
rdf:bag,包的类。
rdf:seq,序列的类。
rdf:alt,选择的类。
rdfs:container,所有容器类的超类,包括前面提到的3种。
一个资源可以在万维网上的许多地方被定义和描述。下列属性允许我们定义链接到这些地址:
rdfs:seealso,将一个资源关联到另一个解释它的资源。
rdfs:isdefinedby,它是rdfs:seealso的一个子属性,将一个资源关联到它的定义之处,一般是一个rdf模式。
为人类读者提供更多的信息常常很有用。这可以通过以下属性来实现:
rdfs:comment,注释,一般是长的文本,可以与一个资源关联。
rdfs:label,将一个人类友好的标签(名字)与一个资源关联。其中的一个目的是用作rdf文档的图形化表示中节点的名称。
我们展示一个住房供给的例子,并提供该领域的概念模型,即一个本体。
这里,我们介绍一个简单的汽车本体。图2-7展示了它的类层次。