2010-5-14
十七、DTD
l <!DOCTYPE 文档类型名称 SYSTEM “DTD文件的URL”>
l <!DOCTYPE 文件类型名称 PUBLIC “DTD名称” “DTD文件的URL”>
l DOCTYPE声明语句紧跟在XML文档声明之后
l DTD标识名称应符合一些标准的规定,对于ISO标准以ISO三个字母开头;被改进的非ISO标准的DTD以加号开头;未被改进的非ISO标准的以减号开头
l <!DOCTYPE 根元素名 [DTD定义语句]>
l DOCTYPE声明语句紧跟在XML文档声明之后
十八、XML文档的组成单元
l XML声明(declaration)
l DOCTYPE声明语句
l PI
l Element
l 注释(comment)
l CDATA区
十九、DTD元素定义
l <!ELEMENT 元素名称 使用规则>
l 使用规则(#PCDATA)普通文本(parsed character data)
<!ELEMENT 书 (bookName,editor,price)>可以跟子元素集
<!ELEMENT bookName (#PCDATA)>
l DTD注释格式与XML文档相同
l 每条元素定义语句的顺序无关紧要
l 具有不同用途的元素不能使用相同的元素名
<!ELEMENT 书 (bookName editor price)>三个子元素出现顺序随意
<!ELEMENT 书 (bookName,editor,price)>只能按这个顺序出现
<!ELEMENT 书 (bookName|editor|price)>只能包含三个子元素的任何一个
l 在元素的使用规则中可以定义子元素的出现次数
<!ELEMENT 书架 (书+)>必须出现一次或多次;无符号表示只能出现一次
(书?)只能出现一次或不出现;(书*)可以不出现也可以出现一次或多次
l 一对圆括号可用于将扩在其中的内容组合成一个或可统一操作的分组,分组中可以嵌套更小的分组<!ELEMENT contact ((title*,author?,email)*|comment)>
二十、DTD属性定义
l <!ATTLIST 元素名 属性名1 属性类型 设置说明 属性2 属性类型 设置说明…>
<!ATTLIST 页面作者
姓名 CDATA #IMPLIED à可有可无
年龄 CDATA #IMPLIED
联系信息 CDATA #REQUIRED à必须被设置
网站职务 CDATA #FIXED "页面作者" à取值固定
个人爱好 CDATA "上网" à直接使用默认值,XML中可设置也可不设置这个属性
>
l CDATA属性值类型为普通字符串(特殊字符要使用转义字符);ENUMER设置的属性值只能是一组中的某一个;ID编号不能重复
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 购物篮 [
<!ELEMENT 购物篮 ANY>
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种(鸡肉|牛肉|猪肉|鱼肉) "鸡肉">
]>
<购物篮>
<肉 品种="鱼肉"/>
<肉 品种="牛肉"/>
</购物篮>
*****************************************************
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 联系人列表 [
<!ELEMENT 联系人列表 ANY>
<!ELEMENT 联系人(姓名,EMAIL)>
<!ELEMENT 姓名(#PCDATA)>
<!ELEMENT EMAIL(#PCDATA)>
<!ELEMENT 联系人 编号 ID #REQUIRED>
]>
<联系人列表>
<联系人 编号="1">
<姓名>ALEX</姓名>
<EMAIL>alex@per.com</EMAIL>
</联系人>
<联系人 编号="2">
<姓名>ALICE</姓名>
<EMAIL>alice@per.com</EMAIL>
</联系人>
</联系人列表>
2010-5-15
二十一、DTD实体定义
l 实体的根本作用是为一段文本内容创建一个别名
l <!ENTITY …>,分为引用实体和参数实体
l 引用实体
n 语法:<!ENTITY 实体名称 “实体名称”>
<!ENTITY 实体名称 SYSTEM “外部XML文档的URL”>
n 引用方式:&实体名称;
n <!DOCTYPE copyright [
<!ENTITY copyright SYSTEM “http://www.XX.com/copyright.xml”>
]>
***************************************
©right;
n <?xml version="1.0" standalone="no" ?>
<!-- file name: book.xml -->
<!DOCTYPE 书架 SYSTEM "book.dtd" [
<!ENTITY owner SYSTEM "owner.xml">
]>
<书架>
<书>
<bookName>firstBook</bookName>
<editor>&ownerName;</editor>
<price>100.00</price>
</书>
&owner;
</书架>
************************************************
<!-- file name: book.dtd -->
<!ELEMENT 书架 (书+,ownerElement)>
<!ELEMENT 书 (bookName,editor,price)>
<!ELEMENT bookName (#PCDATA)>
<!ELEMENT editor (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT ownerElement (#PCDATA)>
<!ENTITY ownerName "Alex_Young">
************************************************
<?xml version="1.0" ?>
<!-- file name: owner.xml -->
<ownerElement>测试引用其他XML</ownerElement>
l 参数实体
n <!ENTITY % 实体名称 “实体内容”>
n 引用方式:%实体名称;
n Sample1: <!ENTITY % TAG_NAMES "姓名|EMAIl|电话|地址">
<!ELEMENT 个人信息(%TAG_NAMES;|生日)>
<!ELEMENT 客户信息(%TAG_NAMES;|公司名)>
n Sample2: <!ENTITY % common.attributes
'id ID #IMPLIED
account CDATA #REQUIRED'
>
*************
<!ATTLIST purchaseOrder %common.attributes;>
<!ATTLIST item %common.attributes;>
二十二、XML Schema与DTD的比较
l XML Schema符合XML语法结构
l DOM、SAX等XML API很容易解析出XML Schema的内容
l XML Schema采用与XML文档同样的合法性验证机制
l XML Schema对namespace支持很好
l XML Schema比DTD支持更多的数据类型,支持用户定义新数据类型
l XML Schema定义约束的能力非常强大,可以对XML实例文档做出细致的语言定义
l XML Schema基本上满足了关系模式在数据描述上的需要
l XML Schema不能像DTD一样定义实体,比DTD更负责
二十三、名称空间
l 避免名称冲突
l 每个约束模式文档被赋以一个唯一的名称空间,每个名称空间都有一个唯一的URI表示
l 在XML实例文档中为来自不同模式文档的元素增加不同的前缀部分,元素名称前的前缀名称分别代表各个模式文档的名称空间
l 名称空间的声明
n 基本格式:xmlns:前缀名称=”URI”
n 在任何元素中声明的名称空间,只对该元素及其中嵌套的所有子孙元素有效,声明名称空间的元素自身上也可以使用代表该名称空间的前缀
n QName(Qualified Name,限定名)是值用冒号把前缀与本地部分进行分隔的名称,即被限定在了某个名称空间中的名称。
n 默认名称空间
格式:xmls=”URI”
sample:<书架 xmlns=”http://www.per.org/xmlbook/schema”>
<书>
<书名>JavaScript开发</书名>
<作者>JavaScript开发</作者>
<售价>JavaScript开发</售价>
</书>
</书架>
n XML实例文档通常只需将元素限定于该模式文档的名称空间,而不需要将该元素的属性限定于名称空间中
n 如果属性名称中有一个前缀部分,该属性将限定在该前缀所指定的名称空间。如果属性名称中没有前缀,它不属于任何名称空间。属性不受默认名称空间的影响
n 前缀名xml已经被隐式的绑定到了一个名称空间上,内置属性名称以xml:作为前缀,自定义的属性名不能以xml:作为前缀
n xml:space属性用于设置下游应用程序应该如何处理解析器传递的空格等字符,设置值只能是”default”和”preserve”
n xml:lang属性用于设置元素的本地化语言信息,ISO-639规范中规定了代表各个国家和地区的本地化语言的名称
n 在某个元素中设置了xml:space和xml:lang属性,嵌套在该元素中的子孙元素都将沿袭其设置结果
n 使用名称空间引入XML Schema文档:schemaLocation属性的设置值中包含两部分,第一部分是名称空间的URI,第二部分是该名称空间所标识的XML Schema文件的位置或URL地址,两部分用空格分隔