XML文件的DTD约束和Schema约束

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文件中需要提前引入进来在根标签中使用属性进行进入:
targetNamespace=“http://www.itcast.org/book” 给当前的Schema文件起名字(命名空间)
作用是当哪个xml要引入这个schema约束的时候,必须通过当前targetNamespace 后面书写的uri地址来引入。

  2.xml如何引入xsd:
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的路径">-->

你可能感兴趣的:(javaweb)