《语义网基础教程》学习笔记(二)
1、本体:
一个本体是一个概念体系(conceptualization)的显式的形式化规范。
一般来说。一个本体形式地刻画一个论域。一个典型的本体由有限个术语及它们之间的关系组成。
★在万维网这个环境中。本体提供了对给定领域的一种共识。这样的共识对于消除术语区别是必要的。
通过把各自的术语差异映射到一个公共的本体之间的直接映射,能够消除这些术语差异。
无论採用哪种方案,本体都支持语义可共用性(semantic interoperability)。
2、设想有两个应用希望通过使用同一词汇表来交流。为了实现这一目标。有必要定义全部可能用到的元素名和属性名。
同一时候还要定义文档的结构:一个属性能够使用什么样的值。哪些元素能够出如今其他元素中。
3、RDF
RDF是语义网框架中的基础数据模型,它包含了三个对象类型,Resource、Property、Statement
资源:全部可以使用RDF表示的对象都称为资源。包含网络上的全部信息、虚拟概念、现实事物等等。
资源以唯一的URI来标识,不同的资源拥有不同的URI。
属性:属性描写叙述资源的特征(属性)或资源间的关系。
陈述:用于描写叙述资源所具有的属性。一条陈述包括三个部分,通常称之为RDF三元组<主体,属性,客体>。
当中主体是一个被描写叙述的资源,由URI表示。
客体表示主体在属性上的取值。它能够是另外一个资源(由URI来表示)或者是文本(literal)。
4、基于XML的RDF语法样例1:描写叙述网页创建日期的RDF/XML
(1) <?
xml version="1.0"?
>
(2) <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
(3) xmlns:exterms="http://www.example.org/terms/">
(4) <rdf:Description rdf:about="http://www.example.org/index.html">
(5) <exterms:creation-date>August 16, 1999</exterms:creation-date>
(6) </rdf:Description>
(7) </rdf:RDF>
(增加行号不过为了便于解释样例,RDF/XML中并不包括行号)
看起来有些摸不着头脑(a lot of overhead)。依次考虑该XML的各个部分将利于理解其作用。
第1行是XML声明(XML declaration):<?
xml version="1.0"?>。
它表明下面内容将是XML,XML版本是1.0。
第2行以rdf:RDF元素開始。它表明下面XML内容(从这里開始,直到第7行的</rdf:RDF>为止)用于表达RDF。同一行紧随rdf:RDF其后的是XML命名空间声明(XML namespace declaration),即rdf:RDF首标签的xmlns属性。该声明指明在当前内容中出现的全部前缀为rdf:的标签都属于由下列URIref所标识的命名空间:
http://www.w3.org/1999/02/22-rdf-syntax-ns#。以http://www.w3.org/1999/02/22-rdf-syntax-ns#打头的URIrefs用于标识来自RDF词汇表中的术语。
第3行是还有一个XML命名空间声明(关于前缀exterms:的)。该声明用rdf:RDF元素的还有一个xmlns属性来表示。它指明前缀exterms:与命名空间URIref
http://www.example.org/terms/关联。以http://www.example.org/terms/開始的URIrefs用于由example组织(example.org)[译注:example组织为本文档所举示
例]定义的词汇表中的术语。
第3行末尾的">"符号表明rdf:RDF首标签的结束。
第1至3行是常规的、必备的部分,用以表明当前的内容是RDF/XML,并声明内容中所使
用的命名空间。
第4-6行是Figure 11中所看到的陈述的RDF/XML主要部分。谈及RDF陈述时,显而易见。陈述是一种“description(描写叙述)”。而且,它是一种“about(有关)”陈述主体的描写叙述(在本例中,是有关 http://www.example.org/index.html的描写叙述)。RDF/XML表示陈述的方式正是如此。
第4行中rdf:Description的起始标签表明某个资源描写叙述的開始。然后标识了陈述所“about(针对)”的资源(也就是陈述的主体)。RDF/XML採用了 rdf:about 属性来指定主体资源的URIref。
第5行用QName exterms:creation-date作为标签。提供了“属性元素(property element)”,来表示谓词以及陈述的客体。选择QName(限定名)
exterms:creation-date。能够将本地名称creation-date 扩展为http://www.example.org/terms/creation-date。这个属性元素(property element )的内容就是陈述的客体-即平庸文字“August 19, 1999 ”(主体资源的creation-date 属性的值)。属性元素(property element)在rdf:Description 元素所包括内容中以嵌套的形式存在。意味着该属性(property )应用于rdf:Description
元素的rdf:about 属性(attribute)所指定的资源。第6行表明这个rdf:Description 到此结束。
最后。第7行表明从第2行開始的rdf:RDF元素到此结束。
在可以通过上下文确定XML内容为RDF/XML的情况下。可以不用rdf:RDF元素来包含RDF/XML的内容。
样例2:表达两条陈述的RDF/XML
1. <?xml version="1.0"?
>
2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3. xmlns:dc="http://purl.org/dc/elements/1.1/"
4. xmlns:exterms="http://www.example.org/terms/">
5. <rdf:Description rdf:about="http://www.example.org/index.html">
6. <exterms:creation-date>August 16, 1999</exterms:creation-date>
7. </rdf:Description>
8. <rdf:Description rdf:about="http://www.example.org/index.html">
9. <dc:language>en</dc:language>
10. </rdf:Description>
11. </rdf:RDF>
例2和例1一样,仅仅是多了一个表达第二条陈述的rdf:Description元素(第8至10行)。(第3行给出了还有一个命名空间声明,以标识在第二条陈述中用到的命名空间
)。
能够用相同的方式加入随意多个陈述,仅仅需对每条陈述分别使用一个rdf:Description元素。如例3所看到的,一旦完毕了书写XML和命名空间声明,RDF/XML中各个
RDF陈述的书写将简单明了。
样例3:简略表达多个属性
1. <?xml version="1.0"?
>
2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3. xmlns:dc="http://purl.org/dc/elements/1.1/"
4. xmlns:exterms="http://www.example.org/terms/">
5. <rdf:Description rdf:about="http://www.example.org/index.html">
6. <exterms:creation-date>August 16, 1999</exterms:creation-date>
7. <dc:language>en</dc:language>
8. <dc:creator rdf:resource="http://www.example.org/staffid/85740"/>
9. </rdf:Description>
10. </rdf:RDF>
与前面两个样例相比,例3中多了一个dc:creator属性元素(在第8行)[译注//属性元素(property element)指表示RDF中的属性(property)的XML元素(XML element)]。另外,三个属性元素(表达主体http://www.example.org/index.html的三个属性)都嵌在同一个rdf:Description元素(标识主体http://www.example.org/index.html)里。而不是为各个陈述单独写一个rdf:Description元素。
第8行引入了一种新的属性元素形式。第7行中的dc:language元素与例2中的exterms:creation-date元素类似,他们都是用平庸文字(plain literal)来表示属性的值,而且都用与属性名称(property name)相应的首标签(start-tag)和尾标签(end-tag)将上述文字括起来。然而,第8行中的dc:creator元素表示一个属性值为还有一个资源(而不是平庸文字)的属性。
假设把该资源的URIref写成被括在首标签和尾标签中的平庸文字(像前两个元素那样),这将表示dc:creator元素的值是字符串 http://www.example.org/staffid/85740 ,而不是由该字符串代表的URIref所标识的资源。为了表明这一差别,dc:creator元素被写成空元素标签(empty-element tag)(即没有尾标签)的形式,同一时候用一个rdf:resource属性(attribute)来表达属性的值(property value)。
rdf:resource属性(attribute)表明属性元素(property element)的值是还有一个用URIref标识资源(resource)。因为该URIref要作为属性(attribute)值,RDF/XML要求这个
URIref必须被写成绝对URIref或相对URIref的形式。而不能像写元素名(element name)或属性名(attribute name)那样被简略为QName。
用分开的陈述写上面的样例:
<?
xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:exterms="http://www.example.org/terms/">
<rdf:Description rdf:about="http://www.example.org/index.html">
<exterms:creation-date>August 16, 1999</exterms:creation-date>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.org/index.html">
<dc:language>en</dc:language>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.org/index.html">
<dc:creator rdf:resource="http://www.example.org/staffid/85740"/>
</rdf:Description>
</rdf:RDF>
RDF/XML相同能够表示包括空白结点(blank node)(即没有URIref的结点,详见2.3节)的图。比方,图13(取自[RDF-SYNTAX])显示了一个表达下列信息的图:
“文档'http://www.w3.org/TR/rdf-syntax-grammar'有一个title(标题)('RDF/XML Syntax Specification (Revised)')和一个editor(编者),而editor的name(姓名)为'Dave Beckett'、home page(主页)为'http://purl.org/net/dajobe/'”。
样例4:描写叙述空白结点的RDF/XML
1. <?xml version="1.0"?
>
2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3. xmlns:dc="http://purl.org/dc/elements/1.1/"
4. xmlns:exterms="http://example.org/stuff/1.0/">
5. <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar">
6. <dc:title>RDF/XML Syntax Specification (Revised)</dc:title>
7. <exterms:editor rdf:nodeID="abc"/>
8. </rdf:Description>
9. <rdf:Description rdf:nodeID="abc">
10. <exterms:fullName>Dave Beckett</exterms:fullName>
11. <exterms:homePage rdf:resource="http://purl.org/net/dajobe/"/>
12. </rdf:Description>
13. </rdf:RDF>
在例4中。第9行使用空白结点标识符abc来标识作为多个陈述的主体的空白结点,然后在第7行中利用该空白结点标识符来表明它所相应的空白结点是某个资源的
exterms:editor属性(property)。
相对于[RDF-SYNTAX]中描写叙述的其他方式而言。使用空白结点标识符的长处是能够在一个RDF/XML文档中多次引用同一个空白结点
将上述样例中的陈述改为用类型文字而不是平庸文字来作为exterms:creation-date属性的值(property values)。
例5:使用类型文字的RDF/XML
1. <?
xml version="1.0"?>
2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3. xmlns:exterms="http://www.example.org/terms/">
4. <rdf:Description rdf:about="http://www.example.org/index.html">
5. <exterms:creation-date rdf:datatype=
"http://www.w3.org/2001/XMLSchema#date">1999-08-16
</exterms:creation-date>
6. </rdf:Description>
7. </rdf:RDF>
例5中。在第5行给出的exterms:creation-date属性元素(property element)的值是一个类型文字(而不是平庸文字)。这是通过为exterms:creation-date元素的首标签(start-tag)添加一个rdf:datatype属性(attribute)并由此指定数据类型实现的。rdf:datatype属性(attribute)的值应是某个数据类型的URIref,在本例中它是XML Schema中的date数据类型的URIref。作为属性值(attribute value),URIref必须被写全[译注//即写为相对URIref或绝对URIref],而不是像在三元组中那样写出它的QName形式xsd:date。用一个正确的数据类型文字作为元素内容(element
content),在本例中是文字1999-08-16,即用XML Schema中的date数据类型表示的一个代表1999年8月16日的文字。
举例说明了使用类型文字须要为每个元素值为类型文字的元素书写一个rdf:datatype属性(attribute),并用一个标识详细数据类型的URIref作为属性值。如前面提到的。RDF/XML要求用作属性值(attribute value)的URIrefs必须书写完整,而不能写成QName形式。在这样的情况下。RDF/XML同意使用XML 实体(entities)以提高可读性,即为URIrefs提供一个另外的简写形式。XML实体声明的本质是将一个XML名称(XML name)与一个字符串相关联。假设实体名在XML文档中被引用。XML处理器(XML
processors)将用对应的字符串来替换该引用。比方,下列ENTITY声明(被写在RDF/XML文档头部的DOCTYPE声明中):
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
把实体xsd定义为一个代表命名空间URIref(相应于XML Schema数据类型的命名空间)的字符串。这一声明使得完整的命名空间URIref可在XML文档中被简略为实体
引用&xsd;。
在例5中使用上述简略形式便可得到例8.
例8: 使用类型文字和XML实体的RDF/XML
1. <?
xml version="1.0"?>
2. <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
3. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
4. xmlns:exterms="http://www.example.org/terms/">
5. <rdf:Description rdf:about="http://www.example.org/index.html">
6. <exterms:creation-date rdf:datatype="&xsd;date">1999-08-16
</exterms:creation-date>
7. </rdf:Description>
8. </rdf:RDF>
第2行中的DOCTYPE声明定义了实体xsd,该实体被用在第6行中。
虽然还有其它用于书写RDF/XML的简略形式,但到眼下为止所介绍的方法提供了一种简单而一般的用RDF/XML来表达RDF图的方法。要应用这些方法,一个RDF图能够
这样书写RDF/XML:
▪全部空白结点(blank nodes)被指定空白结点标识符(blank node identifiers)。
▪依次列出各个结点。将它作为一个非嵌套的rdf:Description元素的主体(subject)。若该结点有URIref。则rdf:Description元素使用rdf:about属性
(attribute);若该结点是空结点。则rdf:Description元素使用rdf:nodeID属性(attribute)。
对于各个以该结点作为主体(subject)的三元组(triple)。创建一个正确的属性元素(property element)。该属性元素或者是元素内容(element content)为文字(literal)(可能为空)、或者是有一个指定该三元组的客体(object)的rdf:resource属性(attribute)(对于客体有URIref的情况)、或者是有一个指定该三元组的客体的rdf:nodeID属性(attribute)(对于客体结点为空结点的情况)。
5、一个命名空间中定义了一组用于某种特定目的的URIref集合。称为一个词汇表。这样,我们能够通过这种URIref来使用和共享这些成果。
6、不像典型的程序设计语言和数据库系统那样,RDF没有自己的内置数据类型。比方,整型,实型,字符型。或者日期类型。
可是,RDF类型文字为一个已给定的文字提供了一种简单的方法来指出应该用什么样的数据类型来说明它。
在类型文字中使用的类型在外部定义,而且由它们的数据类型URI来确定。
RDF的其他表达能力
7、RDF容器
三种类型的容器
rdf:Bag(包)无序
rdf:Seq(序列)有序
rdf:Alt(替换)
8、RDF集合
容器的一个缺点是没有办法封闭它。即没有办法说这些是容器的全部成员。
一个容器仅仅说一些有标识的资源是它的成员。无法说没有其它的成员了。并且。如 果有
一个图描写叙述它的一些成员,我们没法排除在其他地方有图也描写叙述这个容器的其他成员的可能。RDF以RDF集合(collection)的形式提供了对描 述特定成员的组的支持。一个RDF集合是用列表结构表示的一组事物,这个列表结构是用一些提前定义的集合词汇表示的。RDF的集合词汇包含属性 rdf:first 和rdf:rest,和资源
rdf:nil.
9、RDF详细化
RDF提供了用以描写叙述RDF陈述的内置词汇。用这些词汇对一个陈述的描写叙述称为这个陈述的详细化(reification)。RDF详细化词 汇包括类rdf:Statement。属性rdf:subject,rdf:predicate, 和 rdf:object。然而,用RDF详细化词汇须要慎重,由于非常easy想到这些词汇定义了一些实际上未定义事物。
这个问题会再这节的后面讨论。
详细化是被设计用于表达一些属性,如书写的日期。RDF数据元信息
10、RDF Schema
RDF和RDFS不同于XML和XML Schema
RDF本身并不能针对特定应用需求来定义一些类和特性。这些类和特性被称为RDF词汇。它们须要通过RDF词汇描写叙述语言:RDF Schema(RDF的一种扩展语言) 来定义。
RDF Schema为RDF提供了一个类型系统。RDF Schema 类型系统在某些方面类似于Java这种面向对象编程语言的类型系统。比如,RDF Schema同意资源被定义为一个或者多个类的实例。另外,RDFS通常把类组织成为一种分级结构;比如,类 ex:Dog能够定义为ex:Mammal的子类。而ex:Mammal又是ex:Animal的子类。
假设某个资源是类 ex:Dog的实例,那么隐含意味着它也是ex:Animal的实例。然而,RDF 类和特性在某些方面又与编程语言的类型系统有着明显的差异。RDF类和特性并没有过多束缚资源的描写叙述方式,而是提供了一些关于RDF 资源的额外描写叙述信息。
RDF Schema 所具有的这些能力本身也是以 RDF词汇形式提供的。也就是说。这些RDF 词汇是一组带有特殊含义的、提前定义的RDF资源。 这些资源的(RDF Schema词
汇)URI带有前缀 http://www.w3.org/2000/01/rdf-schema# (QName通常採用前缀 rdfs:)。