本章开始是我真正感兴趣的所在了:本 体建模和本体编码。渐入佳境。
(一)
- 数据表达(也是一种知识表达)可以基于多种模型,每 种模型可以有多种方法来表达,每种方法也可能有多种编码模式(Schema,如XML模式,数据库模式等)。模式告诉我们所有数据需要传递和表达的信息 (包括结构和语义)。就RDF来说,也有多种等效的方法,但虽然等效,处理方式可能大相径庭,不同的处理方法可能带来不同的“计算”能力(对于语义Web 来说,也是一种推理能力),以及对应于不同的数学运算方式。
- 例如RDF三元组表达,其本质上是图像(节点-连线图),但RDFS更适合 于用集合来表达。点线图的计算和集合的运算是非常不同的,这两种方法可以看成是模型表达的不同。相对说来,集合运算在数学上是非常成熟的。
- RDFS 可以看成是领域模型表达成RDF的形式化语言,就是说领域模型中的各类实体关系,都用RDF三元组来表达,写成RDF模式的序列化形式。当然数据实例,也 都是RDF三元组。这一方面降低了RDFS的应用难度(RDF标准在设计时吸取了XMLS的经验),同时却常常使初学者感到迷惑。好在这个迷惑的过程不会 很长。
- 所谓推理,在这里实际上只是比“检索”前进了一步,即不仅能检索出已经明确表达的知识,而且能够根据规则,判断出没有“显式”表 达出来的知识。应 用到RDF模式,就是不仅能对Asserted Triples进行查询,也能够对Inferenced Triples进行查询。这本来就是RDFS设计的初衷,当然没有问题。当然,如果RDFS本身的表达有问题,有矛盾,通过工具应该是能够检验出来 的,XML模式也可以进行Validation的检查,RDFS当然也行。
- 传统的描述数据的“模式”都不是存在于模式中,或者以模式的 编码方式存 在。例如关系数据库的“模式”,通常是附注文本,或单独的文件,面向对象的对象模型的“模式”也不是以对象的方式进行描述,早期XML文本描述的DTD定 义,也不是合法的XML文件。目前很多数据格式的定义模式一般都采用与数据格式相同的方式,例如通用Lisp的元对象以及Java对象模型的API自定义 表达都是采用自身相同的语言定义模式,XML Stylesheet,以及XML模式,也采用XML方式进行定义。
- RDFS引入更多的 “资源”来定义资源和资源之间的关系,定义的这些资源其实只是一个“约定”,本来任何人都可以这样定义,只是W3C作为一个约定,写入了“标准”中去了而 已。
例如rdf:type只能定义实例的类型,例如《红楼梦》是一本小说:
[1] ex:红楼梦 rdf:type ex:小说
其中ex表示定义“红楼梦”和“小说”的命名域。
如果要定义“小说”(类名)是一种“文学作品”(类名), 就没有相应的rdf资源元素,W3C扩展了一个rdfs:subClassOf,以及rdfs:superClassOf,可以这样定义:
[2] ex:小说 rdfs:subClassOf ex:文学作品
或者:
[3] ex:文学作品 rdfs:superClassOf ex:小说 - 当然,要使计算机理解 rdfs:subClassOf和rdfs:superClassOf之间的关系,还需要进一步用到本体定义语言OWL扩展的一个元 素:owl:inverseOf。实际上OWL也是一套对RDF进行扩展的词表,丰富了RDF的语义表达能力。
继续上面的例子。由[1]和 [2],就可以推出:
[4] ex:红楼梦 rdf:type ex:文学作品
其中 rdf:type,rdfs:subClassOf两个资源之间的语义关系是RDF标准中定义(预设)好的(包括与rdf:superClassOf,以 及这两个资源元素与owl:inverseOf之间的关系),因此机器才能自动做出上述推论。
这样的推理,类似于编程语言中IF/THEN表达的 语句。
这其实才是RDF推理。
(二)
除了rdfs:subClassOf之外,RDFS还扩展了许多元素,rdfs:subPropertyOf是其中最重要的一个。
类有子类,也有 属性。属性有子属性。
[5]
ex:著 rdfs:subPropretyOf ex:创作
由:
[6] ex:曹雪芹 ex:著 ex:红楼梦
可以得到:
[7] ex:曹雪芹 ex:创作 ex:红楼梦
建模举例:
某图书馆的工作 人员中有职业的图书馆员,外聘的信息技术人员、外包公司的技术人员以及自由职业者,如果要建立他们与图书馆之间的各类用工关系,该如何做?
首先析 出需要描述的关系:合同关系contractsTo,自由职业freeLancesTo,外包公司indirectlyContractsTo,直接聘用 isEmplyedBy,以及笼统的用工关系worksFor。
所有职员与公司之间的这些关系,其实都是“属性”关系,应该用 rdfs.subPrepertyOf建立起联系。
上述五种属性之间的关系,用工关系包括合同用工和直接聘用,合同用工又包括自由职业者合同和外 包公司合同(用词在这里不一定符合中国法律,但语义就是这个意思)。可以作如下表达:
[8]
ex:isEmplyedBy rdfs:subPropertyOf ex:worksFor
ex:contractsTo rdfs:subPropertyOf ex:worksFor
ex:freeLancesTo rdfs:subPropertyOf ex:contractsTo
ex:indirectlyContractsTo rdfs:subPropertyOf ex:contractsTo
这样,如果:
Keven isEmplyedBy TheLibrary
机器可以得到以下推理:
Keven worksFor TheLibrary
如果:
Marcia freeLancesTo TheLibrary
Raizen indirectlyContractsTo TheLibrary
机 器就可以自动做出下面的推理:
Marcia contractsTo TheLibrary
Raizen contractsTo TheLibrary
属性之间的这种关系定义,在面向对象的编程中是没有对应规定的,这一点需要注意。
(三)
RDFS另外有两个重要扩展:rdfs:domain 和rdfs:range,它们也跟“属性(Property)”元素有关:rdfs:domain关乎属性的主语的取值,rdfs:range关乎属性的 宾语(对象)的取值,都是一种约束(限定),或者说提供了对三元组当属性词(谓语)确定之后,用来描述主语和宾语的限定的扩展元素。
举例说明如下:
[9]
如果属性P的值域(domain)为D,x的P属性是y,那么x的类 型一定是D。可以写为:
IF
P rdfs:domain D
and
x P y
THEN
x rdf:type D
[10]
如果属性P的范围(range)为R,x的P属性是y,那么y的类型一定是R。可以写为:
IF
P rdfs:range R
and
x P y
THEN
y rdf:type R
有 了这两个元素,就能够对于取值范围进行约束,从而可以采用规范词表之类的方法进行取值的规范控制。但是RDFS不能描述某一个实例不属于某个类(这在 OWL中得到了扩展),当定义了P的domain和range之后,如果有“x’ P y’”,不论x’或y’取何值,系统都必然地把它们归入预定的domain和range,加入预设的domain和range(例如规范词表或分类法)中 没有x’或y’的实例,就会发生矛盾,需要另外解决。
进一步,结合rdfs:subClassOf,可以有一些更有意思的推理:
如 果某个属性P有值域D,而值域D是D’的子类,则D’也是P的值域。表示如下:
[11]
IF
P rdfs:domain D
and
D rdfs:subClassOf D’
THEN
P rdfs:domain D’
具体举例:网页(D)是网络资源(D’)的子 类,具有URL的HTML页面(P)是网页(属于值域D),那么也一定是网络资源(属于值域D’)。
这里与面向对象的分析和设计似乎相反,类的属 性不是被子类继承,反而被超类获得。这是Web的特性决定的:属性自身就是资源,不专属于特定的类。
属性交集的例子:
[12]
如 果:
属性P ⊆ R ⋂ S
x P y (x的P属性值为y)
则:
x R y (x的R属性值为y);
x S y (x的S属性值为y)。
(四)
例子:
甲图书馆用 Lib1:borrows表示外借图书,乙图书馆用Lib2:checkedOut来表示,一个Web应用要将他们的外借数据合并,可以采用以下方法等同 这两个属性:
Lib1:borrows rdfs:subPropertyOf Lib2:checkedOut
Lib2:checkedOut rdfs:subPropertyOf Lib1:borrows
然后,让这两个属性共同作为一个属性的子属性:
Lib1:borrows rdfs:subPropertyOf ex:hasPossession
Lib2:checkedOut rdfs:subPropertyOf ex:hasPossession
这样,使用ex:hasPossession就可以获取所有两个图书馆 外借图书的数据了。
这种方法可以用来整合多个不同的元数据方案。例如,用DC元数据元素作为“核心集”时,MARC等不同元数据方案中的 诸如ex:author,ex:editor之类的元素,都可以 subPreportyOf dc:creator,就可以支持DC标准作为统一查询的元数据标准了。
不用作推理的RDFS元素还有如下一 些:rdfs:label(给定一个显示 名),rdfs:seeAlso(交叉参考),rdfs:isDefinedBy(定义主体),rdfs:comment(注释)等等。
总结一下:
RDFS是用来描述RDF的模式语言,主要提供了定义类(class)、类与类之间的关系(subClass)、属性 (property)、属性之间关系(subProperty)的方法,并规定了简单的、基于集合理论的类继承规则,以及属性继承规则。可以看出RDFS 对RDF的上述扩展,也是完全基于RDF的(全都是三元组),这也保证了RDFS可以像RDF一样,具有同样的开放性,任何人都可以用来定义任何RDF模 式。
虽然RDFS引入了值域和范围,用来限定资源类的属性取值,增加了RDFS的复杂性,但RDFS仍然是非常简单的,没有多少内容。也因 为此,它的适用面和能力是非常强大的。当然如果要表达更为丰富的语义和推理关系,还需要从规则表达(如OWL和SKOS)和词表(如SKOS、FOAF、 DC等等)两方面进行扩展。任何元数据方案以及本体模式,都是组成语义网标准规范体系中的成员,都是对语义网的贡献。
Tags: OWL, RDFS, 实用语义网, 笔记, 语义Web, 语义技术