二、RDF概述(参考http://zh.transwiki.org/cn/rdfprimer.htm)
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具体化词汇需要谨慎,因为很容易想到这些词汇定义了一些实际上没有定义事物。这个问题会再这节的后面讨论。
具体化是被设计用于表达一些属性,如书写的日期,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:)。《语义网基础教程》学习笔记(二),布布扣,bubuko.com
《语义网基础教程》学习笔记(二)
原文:http://blog.csdn.net/hellozpc/article/details/38373487