笔记 语义网简明教程 第二版 CH2

第2章 XML结构化网络文档

2.1 引言
SGML 国际标准 ISO8879 定义一种独立于设备和系统且人机均可读写的信息表示法。
HTML(hypertext markup language) 源于SGML的书写网页的标准语言。(是一种SGML的应用)。
XML(extensible markup language)也是一种SGML应用。
XML与HTML相比较的特性
  1. XML允许机器可解读的信息表示方式
    HTML文档不包含结构信息,即文档成分及其相互关系的信息。

    XML文档比HTML更容易被机器解读,因为它描述了文档的每一部分,并借助XML嵌套结构定义了文档成分之间的关系。
    XML的还允许定义值约束。
  2. XML的内容和格式是分开的
    HTML描述了文档的格式,而XML没有。
  3. XML是一种关于标记的元语言——没有固定的标签集,而是由用户自行定义自己的标签
    HTML标签是预先定义的
万维网上的应用需要交流与合作,就必须就公用词汇表达成一致。各种团体和商界已经着手定义自己特定的词汇表,并创建基于XML的应用。一些已有的XML应用:
  1. 数学MathML
  2. 生物BSML
  3. 人力资源领域HRML
  4. 天文学领域AML
  5. 新闻领域NewsML
  6. 投资领域IRML
W3C在XML之上定义了多种语言:SVG、SMIL。RDF?
XML语言可以作为不同应用之间的统一数据交换格式(uniform data exchange format)。
2.2 XML语言
一个XML文档包含一个序言、一系列元素和一个可选的尾注
2.2.1 序言
由声明和一项可选的对外部结构化文档的引用组成:
     <? xml version="1.0"encoding="UTF-16"?>
可以指明文档是否自包含,即是否引用外部结构化文档
     <? xml version="1.0"encoding="UTF-16"standalone="no"?>
对外部结构化文档的引用:
     <! DOCTYPE book SYSTEM "book.dtd">
结构信息可以是本地文件,也可以是一个URL
2.2.2 元素
XML的元素代表着XML文档描述的“事物”。这些元素构成了XML文档的主要概念。
一个元素由一个起始标签、元素内容和一个结尾标签构成:
     <lecturer>David Billington</lecturer>
标签名的限制很少,重要的限制是:标签名的首字符必须是字母、下划线或者冒号,而且不能以字符串xml的任何组合方式开头。
元素内容可以是文本,或是其他的元素,或为空。
2.2.3 属性
空元素可以拥有属性形式的一些特性。属性是元素的起始标签中的名字-值对:
     <lecturer name="David Billington"phone="+61-7-3875 507"/>
属性不能嵌套
2.2.4 注释
     <! -- This is a comment-->
2.2.5 处理指令
处理指令(PI)提供一种向处理元素的应用传递信息的机制,一般形式如:
     <? target instruction?>
     <? stylesheet type="text/css" href="mystyle.css"?>
处理指令提供了一种在另外的说明性表示中增加过程处理的可能。
2.2.6 合式XML文档
合式(语法完全正确的)XML文档,部分规则:
  1. 文档最外层只能有一个元素
  2. 每个元素都包含一个起始标签和一个与之相对应的结尾标签
  3. 标签之间不可重叠
  4. 同一元素内部的属性名不可相同
  5. 元素名和标签名必须合法
2.2.7 XML文档的树形模型
树形结构为XML提供了一个形式化的数据模型:
特点:
  1. 仅有一个根节点
  2. 树中无环
  3. 除了根节点之外,每个节点仅有一个父节点
  4. 每个节都有一个标记
  5. 元素的次序是有意义的(属性间的次序是无关的)
2.3 结构化
两个应用希望通过使用同一词汇表来交流,有必要定义所有可能用到的元素名和属性名,同时还要定义文档的结构:一个属性可以使用什么样的值,哪些元素可以出现在其他元素中,等。
一个遵循了结构化信息的合式XML文档成为有效的(valid)。
2.3.1 DTD方式
  1. 外部DTD
    一个DTD的组成部分可以定义在另一个独立的文件中。
    通常情况下使用外部DTD较好,因为它的定义可以被几个不同文档使用,一致性和维护都更好。
  2. 内部DTD
    也可以定义在XML文档自身中。
  3. 元素:
    <lecturer>
    <name>David Billington</name>
    <phone>+61-7-3875 507</phone>
    </lecturer>
    这个元素类型的DTD形如:
    <! ELEMENT lecturer (name, phone)>
    <! ELEMENT name (#PCDATA)>
    <! ELEMENT phone (#PCDATA)>
    如果name和phone两个元素互斥或者有顺序,则DTD形如:
    <! ELEMENT lecturer (name | phone)>
    <! ELEMENT lecturer (name, phone) | (phone, name)>
  4. 属性:
    <order orderNO="23456" customer="John Smith" data="October 15, 2002">
    <item itemNO="a528" quantity="1"/>
    <item itemNO="c817" quantity="3"/>
    </order>
    此元素DTD形如:
    <! ELEMENT order (item+)>
    <! ATTLIST order
    orderNO       ID         #REQUIRED
    customer      CDATA  #REQUIRED
    date              CDATA  #REQUIRED>
    <! ELEMENT item EMPTY>
    <! ATTLIST
    itemNO       ID          #REQUIRED
    quantity      CDATA   #REQUIRED
    comments   CDATA   #IMPLIED>
    +属于基数操作符(cardinality operators):
    ? 出现0次或1次
    *  出现0次或多次
    + 出现1次或多次
    除了定义元素,还要在属性表(attribute list)中定义属性。第一分量是此属性表所适用的元素类型名称,后跟一个三元组表,其中的三元组由属性名、属性类型和值类型构成。
  5. 属性类型:
    可选择的属性类型有限:
    CDATA 串类型(字符序列)
    ID 在整个XML文档中唯一确定的名字
    IDREF 指向另一个元素的索引,该元素与本IDREF属性拥有同样的ID属性值
    IDREFS 一些列IDREF
    (v1 | .....| vn) 所有可能值的一个枚举
  6. 值类型:
    #REQUIRED必须出现
    #IMPLIED可选
    #FIXED"value"每个元素必须具有这一属性,该属性值永远等于在DTD中FIXED后"value"中给定的值。
    "value"规定属性的默认值。如果XML文档规定了一个属性的特定值,特定值将覆盖默认值。
    DTD的数据类型非常有限。
  7. 引用
    使用IDREF和IDREFS的例子:
    DTD部分
    <! ELEMENT family (person*)>
    <! ELEMENT person (name)>
    <! ELEMENT name (#PCDATA)>
    <! ATTLIST person
    id           ID         #REQUIRED
    mother   IDREF   #IMPLIED
    father     IDREF   #IMPLIED
    children  IDREFS #IMPLIED>
    XML元素:
    <family>

    <person id = "bob" mother = "mary" father = "peter">
    <name>Bob Marley</name>
    </person>

    <person id = "bridget" mother = "mary">
    <name>Bridget Jones</name>
    </person>

2.3.2 XML Schema
XML Schema为定义XML文档结构提供了一种更为丰富的语言。
XML Schema语法基于XML自身,可读性高、可重用性好
相对DTD提供模式(schemas)重用和精华的可能性,允许用户通过扩展或限制已有的类型来定义新的类型。
一个XML Schema是一个含起始标签的元素,如:
<xsd: schema
xmlns: xsd = "http://www.w3.org/2000/10/XMLSchema
version = "1.0">
  1. 元素类型
    语法为:
    <element name = "..."/>
    <element type = '...'/>
    例子:
    <element name = "email"/>
    <element name = "head" minOccurs = "1" manOccurs = "1">
    <element name = "to" minOccurs = "1">
  2. 属性类型
    语法为:
    <attribute name = "..."/>
    <attribute type = "..."/>
    例子:
    <attribute name = "id" type = "ID" use = "required"/>
    <element name = "speaks" type = "Language" use = "default" value = "en"/>
  3. 数据类型
    克服了DTD数据类型非常有限的局限性。
    1具有很多内嵌数据类型(built-in data types):
    数字型(Integer, Short, Byte, Long, Float, Decimal)字符串型(string, ID, IDREF, CDATA, Language)日期和时间数据类型(Time, Date, Month, Year)
    2还具有用户自定义数据类型(user-defined data types):
    包括不可使用元素或属性的简单数据类型(simple data type)和可以使用元素和属性的复杂数据类型(complex data type)。
    复杂数据类型的定义的手段:
    ·sequence已有数据类型元素的序列,按照预定义的次序出现
    ·all必须出现的元素集合,但出现的次序无关紧要
    ·choice元素的集合,其中之一将被选择。
    例子:
    <complexType name = "lecturerType">
    <sequence>
    <element name = "firstname" type = "string"
    minOccurs = "0" maxOccurs = "unbounded"/>
    <element name = "lastname" type ="string"/>
    </sequence>
    <attribute name = "title" type = "string" use = "optional"/>
    </complexType>
    lecturerType这个元素既有title属性又有两个name元素。
  4. 数据类型的扩展
    可以使用新的元素和属性来扩展已有数据类型。
    <complexType name = "extendedLecturerType">
    <extension base = "lecturerType">
    <sequence>
    <element name = "email" type = "string"
    minOccurs = "0" maxOccurs = "1"/>
    </sequence>
    <attribute name = "rank " type = "string" use = "required"/>
    </extension>
    </complexType>
    扩展类型的实例也是源类型的实例。
    源类型和扩展类型之间有层次关系。
  5. 数据类型的限制
    可以通过对某些值的约束来限制已有的数据类型。
    限制并非扩展的逆过程,不是通过删除元素和属性来实现的,因此层次关系依然成立:限制生成的新类型的实例也是源类型的实例
2.4 命名空间
因为一个XML文档可能会用到多个DTD或者Schema,由于每个结构化文档是独立开发的,因此命名冲突在所难免。
解决方法在技术上是简单的:每个DTD或Schema使用不同的前缀,以消除二义性,用冒号分隔前缀和本地名。
例子:
<? xml version = "1.0" encoding = "UTF-16"?>
<vu: instructors
xmlns: vu = "http://www.vu.com/empDTD"
xmlns: gu = "http://www.gu.au/empDTD "
xmlns: uky = "http://www.uky.edu/empDTD">
<uky: faculty
uky: title = "assistant professor"
uky: name = "John Smith"
uky: department = "Computer Science"/>
<gu: academicStaff
gu: title = "lecturer"
gu: name = "Mate Jones"
gu: department = "Information Technology"/>
</vu: instructors>

2.5 XML文档的寻址和查询
对于XML文档来说可以使用XQL、XML-QL、XQuery来查询。
XML查询语句的核心概念是路径表达式(path expression)它规定如何在XML文档的树形表示中到达一个节点或一个节点集。
XPath的使用:

  1. /library/author寻址所有在library下的author元素
  2. //author寻址文档中所有author元素
  3. /library/@location @符号用于表示属性节点
  4. //book/@title = "Artificial Intelligence" 在文档的任意book元素下寻址所有属性节点中标题为Artificial Intelligence的。
  5. //book [@ title = "Artificial Intelligence"] 寻址所有title为Artificial Intelligence的书。
  6. //author[1] 寻找XML文档中第一个author元素节点
  7. //author[1]/book[last()] 寻找第一个author元素节点下最后一个book元素
  8. //book[not & title] 寻址没有title树形的所有book元素节点。
2.6 处理
对于一个给定的XML文档,应用不同的样式表能够以不同的方式显示该文档。
样式表可以用不同的语言书写,CSS或者XSL
XSL包含一个转换语言XSLT和一个格式语言endangered(两者都是建立在XML之上的XML的应用)。
XSLT规定了一套将输入XML文档转换成另一个XML文档、HTML文档或者纯文本的规则。输出文档可以使用与输入文档相同的DTD或Schema,或者使用完全不同的词汇表。
XSLT文档定义一个模板。XSLT中还可以再定义模板供主模版所用。为文档中的每个元素类型定义模板是个好习惯。
2.7 小结
  1. XML是一种元语言,允许用户借助标签为文档定义标签
  2. 标签的嵌套引入了机构。可以用XML Schema或DTD来规定文档的结构
  3. XML将内容和结构与格式相分离
  4. XML是网上结构化信息表示的默认标准,支持信息的机器处理
  5. XML借助标记、结构和转换支持不同应用之间的结构化信息的交换
  6. 查询语言支持XML
  • 标签嵌套没有标准含义
  • 机器不能解读XML文档的语义,只有人可以做到这一点
  • 如果对词汇表存在共同理解,则XML将支持协作和交流。

Leave a Reply

Your email address will not be published. Required fields are marked *