一、DTD
二、Schema
- Schema约束文档本身就是一个XML文档。
- Schema约束文档的扩展名为.xsd
- Schema对名称空间支持很好
- 名称空间怎么来的:
- XML可以自定义标签(元素),当两个元素名相同时会产生冲突。名称空间就是来避免冲突的。
- 我们可以使用前缀解决冲突
- <?xml version="1.0" encoding="UTF-8"?>
- <AUTHOR>
- <AU:TITLE>Mr.</AU:TITLE> //这里的AU前缀
- <AU:FIRST>Sidney</AU:FIRST>
- <AU:SECOND>Sheldon</AU:SECOND>
- <BO:BOOK>
- <BO:TITLE>Sky is Falling</BO:TITLE>//这里的BO前缀,同AU一起避免了TITLE冲突
- <BO:PRICE>$5.6</BO:PRICE>
- </BO:BOOK>
- <BO:BOOK>
- <BO:TITLE>Rage of Angels</BO:TITLE>
- <BO:PRICE>$4.3</BO:PRICE>
- </BO:BOOK>
- </AUTHOR>
- XML名称空间通过标签名关联一个词汇来解决冲突问题。使不同名称空间的多个元素名出现在一个XML文档中。
- 创建名称空间的语法:xmlns:prefix = namespacevalue
- 元素应用名称空间的语法是:<NameSpace:ElementName>content</NameSpace:ElementName>//在元素名前添加一个名称空间
- 属性应用名称空间的语法是:
- <ElementName xmlns:RD='http://www.ibm.com/Univ/RD' >
- <RD:Dean RD: id=”1” > John</RD:Dean>
- </ElementName>
- <ElementName xmlns:RD='http://www.ibm.com/Univ/RD' >
- 缺省名称空间举例:当大部分元素属于同一个名称空间时,可以定义这个名称空间为缺省。
- 语法为: xmlns="namespace",这里与不缺省的区别是没有引用名。
- 举例:<NAME xmlns="http://www.ibmindia.com/NA">content</NAME>
- 名称空间怎么来的:
- 由于Schema本身就是一个XML文档,因此必须有一个根元素schema。
- 一个Schema约束实例:
- <?xml version="1.0" encoding="UTF-8"?>
- **********schama元素头开始************
- // 注意这行的命名空间xmlns可以在所有的XML定义,被它修饰的元素、属性、子节点都来自该名称空间。这里就表示schema来自xs这个W3C名称空间
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
- //注意这行的 targetNamespace是W3C schema的属性,表示 Schema 要约束的名称空间。
- targetNamespace="http://www.itcast.cn"
- elementFormDefault="qualified">
- **********schama元素头结束************
- <xs:element name='书架' >
- <xs:complexType>
- <xs:sequence maxOccurs='unbounded' >
- <xs:element name='书' >
- <xs:complexType>
- <xs:sequence>
- <xs:element name='书名' type='xs:string' />
- <xs:element name='作者' type='xs:string' />
- <xs:element name='售价' type='xs:string' />
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:schema>
- 如何引入Schema
- )建立一个新的xml文件,加入声明。
- <?xml verson="1.0" encoding="UTF-8"?>
- )查看要引入的schema约束文档,找到第一个元素即根元素。
- <?xml version="1.0" encoding="UTF-8"?>
- <书架>
- </书架>
- )思考:“书架”来自哪个名称空间?用xmlns声明该元素来自的名称空间。
- <?xml version="1.0" encoding="UTF-8"?>
- <书架 xmlns:itcast="">
- </书架>
- )查看schema,把targetNamespace的值写到xml中的名称空间定义中
- <?xml version="1.0" encoding="UTF-8"?>
- <itcast:书架 xmlns:itcast="http://www.itcast.cn">
- </itcast:书架>
- )XML中使用的名称空间对应的是那个xsd约束文件?用schemaLocation来制定名称空间和xsd文件的对应关系
- <?xml version="1.0" encoding="UTF-8"?>
- <itcast:书架 xmlns:itcast="http://www.itcast.cn" //被itcast修饰的都来自 itcast 名称空间,即schema约束的名称空间targetNamespace
- schemaLocation="http://www.itcast.cn books.xsd"> //xsd所在的名称空间
- </itcast:书架>
- )思考:schemaLocation又来自哪个名称空间呢?来自一个标准的名称空间 (W3C)http://www.w3.org/2001/XMLSchema-instance
- <?xml version="1.0" encoding="UTF-8"?>
- <itcast:书架 xmlns:itcast="http://www.itcast.cn"//xml所在名称空间,即schama约束的命名空间
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"// schema的名称空间
- xsi:schemaLocation="http://www.itcast.cn books.xsd">// schemaLocation 的xsd文件所在的空间
- </itcast:书架>
- )建立一个新的xml文件,加入声明。