什么是XML约束?
在xml技术里,编写一个文档来约束一个xml文档,称为XML约束。
为什么要使用XML约束?
我们从网上下载了一个开源框架,这个开源框架是使用XML作为配置文件的,这时候框架的设计者就需要约束我们配置文件的写法。
XML约束的作用:
约束xml文档的写法
对xml进行校验
常见的XML约束技术:
XML DTD
XML Schema
将dtd的约束内容写在外置的dtd文件中,这个文件后缀必须为.dtd。文件保存时必须用utf-8编码保存。
再在xml文件中使用
来引入这个DTD约束文件。
SYSTEM表明引入的DTD在当前文件系统中,后面指定的文件位置是当前硬盘中的位置。
PUBLIC表明引入的DTD在网络公共位置中,后面要指明DTD的名字和DTD所在网络位置URL地址
直接在xml中书写DTD
元素约束:
存放类型:ANY/EMPTY
元素约束:子元素的列表,将可以包含的子元素用小括号括起来
子元素之间可以使用逗号进行分割,表明子元素必须按照顺序出现
子元素之间可以使用竖线进行分割,表面子元素出现其中之一
#PCDATA 表明包含标签体
+ 表示一次或多次
* 0次或多次
? 0次或一次
也可以使用小括号进行组的操作
属性类型:
属性约束:
#REQUIRED
表明当前属性是一个必须存在的属性,如果这样的属性不存在则在校验时会报错
#IMPLIED
表明当前属性是一个可选的属性,可以有也可以没有
#FIXED "固定值"
表明当前属性具有一个固定值,这样的属性不需要进行赋值,自动就会取这个固定值为值.如果这样的属性指定了一个不是固定值的值则校验报错
"默认值"
表明当前属性具有一个默认值,如果给了其他的值就用其他值,如果没有给值则取这个默认值
就是对一大段内容的引用,可以简化代码的复用
引用实体:
在xml中引用的实体叫做引用实体
&实体名称;
参数实体:
在dtd中引用的实体叫做参数实体
%实体名称;
对于下面这个DTD约束文件 book.dtd
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
根据这个约束可以写出如下的xml文件:
<书架>
<书>
<书名>Thinking in Java书名>
<作者>Bruce Eckel作者>
<售价>79.00元售价>
书>
<书>
<书名>第一行代码书名>
<作者>郭霖作者>
<售价>68.00元售价>
书>
书架>
如何在xml中引入Schema—名称空间:
全世界独一无二的名字,用来唯一的标识某个资源,通常是公司的域名,只是名字而已并不真的表示资源的位置。
<zipstream:书架 xmlns:itcast="http://zipstream.me"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=“http://zipstream.me book.xsd">
语法比较多也比较复杂,具体参照Schema的文档。
对于下面这个DTD约束文件 shiporder.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="www.itheima.com"
elementFormDefault="qualified"
>
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
xs:sequence>
xs:complexType>
xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
xs:sequence>
xs:complexType>
xs:element>
xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
xs:complexType>
xs:element>
xs:schema>
根据这个约束可以写出如下的xml文件:
<itheima:shiporder xmlns:itheima="www.itheima.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="www.itheima.com shiporder.xsd" orderid="asdf" >
<itheima:orderperson>asdfitheima:orderperson>
<itheima:shipto>
<itheima:name>zzzzitheima:name>
<itheima:address>ssssitheima:address>
<itheima:city>sdfdfitheima:city>
<itheima:country>sdfdfitheima:country>
itheima:shipto>
<itheima:item>
<itheima:title>sadfdsfitheima:title>
<itheima:note>sdfdsfdsfitheima:note>
<itheima:quantity>10itheima:quantity>
<itheima:price>100.99itheima:price>
itheima:item>
<itheima:item>
<itheima:title>sadfdsfitheima:title>
<itheima:note>sdfdsfdsfitheima:note>
<itheima:quantity>10itheima:quantity>
<itheima:price>100.99itheima:price>
itheima:item>
itheima:shiporder>