XML文件Contact.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE contact SYSTEM "Contact.dtd">-->
<!-- <!DOCTYPE contact SYSTEM "dtd文件的路径">
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
引入公共的DTD:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
文档根结点 指的是当前xml中的根标签。
PUBLIC 表示当前引入的DTD是公共的DTD
-->
<contact xmlns="www.520xlh.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="www.520xlh.com Contact.xsd ">
<linkman id="i1">
<name>张三</name>
<email>123@163.qq</email>
<address>陕西省西安市</address>
<school>西北大学</school>
</linkman>
<linkman id="i2">
<name>李四</name>
<email>110@163.qq</email>
<address>陕西西安市</address>
<school>西安电子科技大学</school>
</linkman>
</contact>
用法:
<!-- <!DOCTYPE contact SYSTEM "Contact.dtd">-->
<!-- <!DOCTYPE contact SYSTEM "dtd文件的路径">
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
引入公共的DTD:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
文档根结点 指的是当前xml中的根标签。
PUBLIC 表示当前引入的DTD是公共的DTD
-->
XML约束DTD文件Contact.dtd
<!--新建一个后缀叫dtd的xml文件,写入一下内容-->
<!-- 标签名称 (规范) -->
<!ELEMENT contacts (linkman*)>
<!-- 有序标签 -->
<!ELEMENT linkman (name,email,address,school)>
<!-- 标签名称(需要解析的字符数据) -->
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT school (#PCDATA)>
<!-- 标签名 属性名称 属性类型 默认值 -->
<!--
ID 表示唯一
#REQUIRED 表示必填
-->
<!ATTLIST linkman id ID #REQUIRED>
<!--在需要受约束的文件中加入
<!DOCTYPE contacts SYSTEM "dtd的路径">-->
XML约束Schema文件Contact.xsd
:比dtd约束更加规范,且一个xml文件中可以有多个schema约束,等等。
注意事项:
1.在定义Schema文件的时候,由于这个Schema文件本身就是xml,它也要受到别的约束。而这个约束是W3C组织提前定义好的,
在Schema文件中需要提前引入进来在根标签中使用属性进行进入:
<schema xmlns=“http://www.w3.org/2001/XMLSchema” 引入W3C定义的schema书写的规范
targetNamespace=“http://www.itcast.org/book” 给当前的Schema文件起名字(命名空间)
作用是当哪个xml要引入这个schema约束的时候,必须通过当前targetNamespace 后面书写的uri地址来引入。
2.xml如何引入xsd:
<element xmlns=“http://www.itcast.org/book” 它是schema文件中的targetNamespace 属性后面的值
xsi:schemaLocation=“http://www.itcast.org/book book.xsd” 这个是在引入当前的schema文件的真实路径
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” 说明当前的xml是schema一个实例文档>
3.schema的名称空间:
在定义Schema文件的时候,需要在根标签中使用
targetNamespace 属性定义当前schema定义名称(只是一个分配的名字,根本没有指向任何文件),在被约束的xml文件中先根据这个名称引入当前的schema文件,然后在使用。
xsi:schemaLocation=”” 引入具体的schema文件。(因为targetNamespace属性定义的schema名称,只是一个名称而已,所以在xml文件中需要通过schemaLocation来声明指定所遵循的Schema文件的具体位置)
(xsi:schemaLocation 使用它引入某个schema时,先要使用名称空间, 空格 ,文件名)
名称空间主要功能是用于来
elementFormDefault=“qualified|unqualified”
在schema中书写qualified ,在限定xml中的定义的标签名必须使用定义的名称空间。
unqualified 要求根元素必须使用名称空间,而子元素不能使用名称空间。
<?xml version="1.0" encoding="UTF-8"?>
<!--
新建一个后缀叫xsd的xml文件,写入一下内容
xmlns 当前XML的名称空间 随便写唯一
xmlns:xs 当前XML中标签来自哪
targetNamespace 目标文档的名称空间
-->
<xs:schema xmlns="www.520xlh.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="www.520xlh.com"
elementFormDefault="qualified">
<!-- 元素的名称 -->
<xs:element name="contact">
<!-- 元素类型复杂类型 -->
<xs:complexType>
<!-- 有循序的 -->
<xs:sequence>
<!--
minOccurs 最少出现次数
unbounded 没有限制
-->
<xs:element name="linkman" minOccurs="0" maxOccurs="unbounded" >
<xs:complexType>
<xs:sequence>
<!-- type 表示元素的类型 -->
<xs:element name="name" type="xs:string"/>
<xs:element name="email" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="school" type="xs:string"/>
</xs:sequence>
<!-- user元素上的属性 -->
<xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<!-- 用法:
xmlns -> 当前文档的名称空间
xmlns:xsi -> 当前文档是schema约束的一个实例
xsi:schemaLocation -> 当前实例支持的约束文件的位置
-->
<!--<contacts xmlns="www.520it.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="www.520it.com xsd的路径">-->