xml文档的DTD约束和Schema约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。XML的约束模式有两种,一种是DTD,还有一种就是Schema。
一、DTD约束(语法简单,功能简单)
二、Schema约束(语法复杂,功能强大)



一、DTD约束

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合b法的元素来定义文档的结构。
文档类型定义可被成行地声明于标准通用标记语言、可扩展标记语言文档中,也可作为一个外部引用。


(一)声明

1、内部的 DOCTYPE 声明

<!DOCTYPE note[
    <!ELEMENT note(heading,body)>
    <!ELEMENT heading  (#PCDATA)>
    <!ELEMENT body     (#PCDATA)>
]>

<!--
!ELEMENT note(heading,body)
定义 note 元素有四个元素:heading,、body,并且按照顺序、次数排列。

!ELEMENT heading  (#PCDATA)
定义 heading 元素为 "#PCDATA" 类型
!ELEMENT body     (#PCDATA)
定义 body 元素为 "#PCDATA" 类型
-->


2、外部文档声明
(1)本地文件系统导入

<!DOCTYPE rootElt SYSTEM "constrain.dtd">

<!--
格式为:
<!DOCTYPE 根元素 SYSTEM "约束文件名">

-->


(2)公共的外部导入

<!DOCTYPE hibernate-configuration PUBLIC   
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  

<!--          
格式为:
<!DOCTYPE 根标签 PUBLIC "约束文件url">

-->



(二)DTD-元素

在一个 DTD 中,元素通过元素声明来进行声明。

<!ELEMENT rootElt (subElt1+,subElt2*,subElt3?,(subElt4|subElt5))>
<!ELEMENT subElt1 EMPTY>
<!ELEMENT subElt2 (#PCDATA)>
<!ELEMENT subElt2 ANY>

<!--下面为合法xml格式-->
<rootElt>
    <subElt1></subElt1>
    <subElt1></subElt1>
    <subElt1></subElt1>
    <subElt3>any</subElt3>
    <subElt4><grand></grand></subElt4>
</rootElt>

<!--
元素约束格式:
    <!ELEMENT 标签名字 类别> 或者 <!ELEMENT 标签名字 (标签内容)>

类别:
    1、空标签: EMPTY 表示标签是空标签
    2、普通字符串: (#PCDATA) 表示标签内容一定是普通字符串
    3、带有任何内容的标签: ANY 表示标签的可以是任何内容

标签内容:
    1、解决子标签出现顺序问题:
        <!ELEMENT 父元素 (子元素1,子元素2,子元素3)>
        那么父元素,必定要包含 子元素1,子元素2,子元素3 ,并且一定要按照该顺序排列

    2、解决子标签出现次数问题:
        <!ELEMENT 父元素 (子元素1+,子元素2*,子元素3?)>
        这里除了子元素顺序问题。还有包含着子元素的后面跟着的符号
        + 表明子元素1可以出现1次或者多次
        * 表明子元素2可以出现0次或者多次
        ? 表明子元素3可以出现0次或者1次

    3、解决子标签不确定问题:
        <!ELEMENT 父元素 (子元素1,(子元素2|子元素3))>
        表明该父元素,一定要包含子元素1,子元素2或子元素3。

-->


(三)DTD-属性

在 DTD 中,属性通过 ATTLIST 声明来进行声明。

<!ELEMENT elt EMPTY>
<!ATTLIST elt name CDATA "nameless">
<!ATTLIST elt gender (women|men) #REQUIRED>
<!ATTLIST elt id ID>
<!ATTLIST elt alias CDATA #IMPLIED>
<!ATTLIST elt specis CDATA #FIXED "human">

<!--下面为合法xml格式-->
<elt name="lee" gender="man" id="elt1" specis="huamn" />

<!--下面为不合法xml格式
    1、缺少name属性
    2、gender属性的值不是枚举中的任何一个
    3、ID类型的id属性,值不能以数字开头
    4、specis属性值时固定的
-->
<elt gender="ladybody" id="1" specis="animal">

<!--
属性约束格式:
    <!ATTLIST 元素名称 属性名称 属性类型 默认值>

属性类型:
    CDATA   值为字符数据 (character data)
    (en1|en2|..)    此值是枚举列表中的一个值
    ID  值为唯一的 id
    IDREF   值为另外一个元素的 id
    IDREFS  值为其他 id 的列表
    NMTOKEN 值为合法的 XML 名称
    NMTOKENS    值为合法的 XML 名称的列表
    ENTITY  值是一个实体
    ENTITIES    值是一个实体列表
    NOTATION    此值是符号的名称
    xml:    值是一个预定义的 XML 值

默认值:
    #REQUIRED 属性值时必需的
    #IMPLIED  属性不是必需的
    #FIXED "value" 属性不是必需的,但属性值是固定的

-->


更多关于DTD约束内容…




二、Schema约束

可扩展标记语言架构是以可扩展标记语言(例如XML)为基础的,它用于可替代文档类型定义(DTD);一份XML schema文件描述了可扩展标记语言文档的结构。
1、XML Schema 是基于 XML 的 DTD 替代者。
2、XML Schema 描述 XML 文档的结构。
3、XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。


(一)简单的类型

1、xsd 元素
简单元素指那些仅包含文本的元素。它不会包含任何其他的元素或者属性。(也可以像数据类型添加限定,以此来限制它的内容)

<xs:element name="Name" type="xs:string">
<xs:element name="Age" type="integer">
<xs:element name="gender" type="" default="man">
<xs:element name="specis" type="xs:string" fixed="human">

<!--
定义简易元素的格式:
    <xs:element name="元素名称" type="元素的数据类型"/>

元素的数据类型:
    xs:string 字符串类型
    xs:decimal 浮点数类型
    xs:integer 整数类型
    xs:boolean 布尔类型
    xs:date 日期类型
    xs:time 时间类型

默认值和固定值 
    default 当没有其他值被规定时,默认值就会自动分配给元素
    fixed 固定值会自动分配给元素,而且无法规定另外的值


-->


2、xsd 属性
某个元素拥有属性则是复杂的类型。但是属性本身作为简易类型被声明。。

<xs:attribute name="id" type="integer">

<!--
定义属性的格式为:
    <xs:attribute name="属性名称" type="属性的数据类型" />

属性的数据类型:
    xs:string 字符串类型
    xs:decimal 浮点数类型
    xs:integer 整数类型
    xs:boolean 布尔类型
    xs:date 日期类型
    xs:time 时间类型

默认值和固定值 
    default 当没有其他值被规定时,默认值就会自动分配给元素
    fixed 固定值会自动分配给元素,而且无法规定另外的值

-->


3、xsd限定

<!--
    1、对值的限定
    下面的例子定义带有限定且名为age的元素。age值不能低于0,不能高于120。
-->
<xs:element name="age">

<xs:simpleType>
    <xs:restriction base="xs:integer">
        <xs:minInclusive value="0"/>
        <xs:maxInclusive value="120"/>
    </xs:restriction>
</xssimpleType>
</xs:element>


<!--
    2、限定为某一枚举类
    下面的例子,把xml元素限定为一组枚举类。元素gender的内容只能是man和woman。
-->
<xs:element name="gender">
<xs:simpleType>
    <xs:restriction base="xs:string">
        <xs:enumeration value="man"/>
        <xs:enumeration value="woman"/>
    <xs:restriction>
</xs:simpleType>
<xs:element>



(二)复杂的类型
复合元素指包含其他元素或者换属性的xml元素。四种类型复合元素:
1、空元素
2、包含其他元素的元素
3、仅包含文本的元素
4、包含元素和文本的元素
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值