DTD和Schema约束

一、DTD

1、什么是DTD

DTD (Document Type Definition ),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

2、DTD重点要求

开发中,我们很少自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。常见框架使用DTD约束有:struts2,  hibernate等。

 

通过提供的DTD"web-app_2_3.dtd "编写XML

 

<?xml version="1.0" encoding="UTF-8"?>
<!--
	模拟servlet2.3规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
	格式如下:
	<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
-->
<!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
<!ELEMENT servlet-mapping (servlet-name,url-pattern+) >
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT jsp-file (#PCDATA)>

<!ELEMENT welcome-file-list (welcome-file+)>
<!ELEMENT welcome-file (#PCDATA)>

<!ATTLIST web-app version CDATA #IMPLIED>

 

3、DTD语法

1)内部DTD,在XML文档内部嵌入DTD,只对当前XML有效。

<?xml version="1.0" encoding="UTF-8"? standalone="yes" ?>

<!DOCTYPE web-app [

...//具体语法

]>

<web-app>

</web-app>

 2.)外部DTD——本地DTDDTD文档在本地系统上,公司内部自己项目使用。

 

3.)外部DTD——公共DTDDTD文档在网络上,一般都有框架提供。

 

 4、元素声明

定义元素语法:<!ELEMENT元素名 元素描述>

    元素名:自定义

    元素描述包括 : 符号和数据类型

          常见符号: ?  *  +  ()  |  ,

          常见类型:#PCDATA表示内容是文本,不能是子标签

 

 

 

 

符号

符号类型

 

描述

示例

 

?

问号

表示该对象可以出现,但只能出现一次

(菜鸟?

 

*

星号

 

表示该对象允许出现任意多次,也可以是零次

(爱好*)

 

+

加号

 

表示该对象最少出现一次,可以出现多次

(成员+)

 

()

括号

 

用来给元素分组

(古龙|金庸|梁羽生),

(王朔|余杰),毛毛

 

 

|

竖条

 

表明在列出的对象中选择一个

 

(男人|女人)

 

,

逗号

表示对象必须按指定的顺序出现

(西瓜,苹果,香蕉)

 

 

 

 

  

<!ELEMENT  web-app(servlet*,servlet-mapping*,welcome-file-list?)>
    web-app包括3个标签,且必须顺序出现。
        servlet子标签个数任意
        servlet-mapping子标签个数任意
        welcome-file-list子标签最多只能出现一次
<!ELEMENT servlet(servlet-name,description?,(servlet-class|jsp-file))>
    servlet有3个子标签,且必须顺序出现
        servlet-name,必须有,且只能出现1次
        description,可选1次
        servlet-class和jsp-file二选一,且只能出现一次
<!ELEMENT servlet-name(#PCDATA)>
    servlet-name的标签体必须是文本
<!ELEMENT  welcome-file-list  (welcome-file+)>
      welcome-file-list至少有1个子标签welcome-file

 

5、属性声明

 

 

 

 

 

 二、Schema约束

1、什么是Schema

Schema是新的XML文档约束:

Schema要比DTD强大很多,是DTD替代者;

Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml .

Schema功能更强大,数据类型更完善

Schema支持名称空间

2、Schema重点要求

 

DTD一样,要求可以通过schema约束文档编写xml文档。常见框架使用schema的有:Spring等通过提供”web-app_ 2_ 5.xsd"编写xml文档

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    模拟servlet2.5规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。
    格式如下:
    <web-app xmlns="http://www.example.org/web-app_2_5" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
            version="2.5">
-->
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/web-app_2_5"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:tns="http://www.example.org/web-app_2_5" 
    elementFormDefault="qualified">
    
    <xsd:element name="web-app">
        <xsd:complexType>
            <xsd:choice minOccurs="0" maxOccurs="unbounded">
                <xsd:element name="servlet">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="servlet-name"></xsd:element>
                            <xsd:element name="servlet-class"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="servlet-mapping">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="servlet-name"></xsd:element>
                            <xsd:element name="url-pattern" maxOccurs="unbounded"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="welcome-file-list">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:choice>
            <xsd:attribute name="version" type="double" use="optional"></xsd:attribute>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

 

 

 

 

posted @ 2020-08-13 11:08  企鹅22  阅读(231)  评论(0编辑  收藏  举报