XML约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,称之为XML约束。
常用的约束技术XML DTD、XML Schema

DTD(Document Type Definition)

文档类型定义,DTD文件应使用UTF-8或Unicode
1.在XML文件中引入dtd文件
  (1)引入外部的dtd文件  

<!DOCTYPE 根元素名称 SYSTEM "dtd路径">

  (2)使用内部的dtd文件

 <!DOCTYPE 根元素名称 [dtd内容]>

  (3)使用外部的dtd文件(网络)

  <!DOCTYPE 根元素名称 PUBLIC "dtd名称" "dtd路径">

2.使用dtd定义元素
  语法<!ELEMENT 元素名 约束>
  简单元素:没有子元素的元素

<!ELEMENT 元素名称 (#PCDATA)>
      (#PCDATA):约束name是字符串类型
      EMPTY:元素为空(不能有内容)
      ANY:任意类型

  复杂元素:有子元素的元素

<!ELEMENT 元素名称 (子元素1,子元素2,...)>

    eg:<!ELEMENT person(name,age,sex)>子元素只能出现一次
    表示子元素出现的次数
      +:表示一次或多次
      ?:表示零次或一次
      *:表示任意次
      eg:<!ELEMENT person(name+,age?,sex*)>
    子元素使用逗号(,)隔开
      表示子元素出现的顺序
    子元素使用竖线(|)隔开
      表示只能出现任意一个子元素(枚举)
3.使用dtd定义属性
  语法<!ATTLIST 元素名称 属性名称 属性类型 属性约束>
  属性类型
    CDATA:表示属性的取值为普通的文本字符串
    ENUMERATED(DTD没有此关键字):表示枚举,只能从枚举列表中任选其一(a|b|c)
      枚举:表示只能在一定的范围内出现值,但是每次只能出现其中的一个
    ID:表示属性的取值不能重复,属性的值只能由字母、下划线开始,不能出现空白字符
  属性约束
    #REQUIRED:表示该属性必须出现
    #IMPLIED:表示该属性可有可无
    #FIXED :表示属性的值为一个固定值,#FIXED “固定值”
    直接值:表示属性的取值为该默认值

4.定义实体
  语法<!ENTITY 实体名称 "实体内容">
  用法:在XML文件中使用 &实体名称; 引用

<!ENTITY test "张三">
    &zhangsan;

  注意:定义实体需要写在内部dtd中,如果写在外部的dtd里面,在某些浏览器下得不到实体内容

schema

Schema与DTD完全不同,DTD使用不同于xml本身的另一套语法,而Schema自身也是一个xml文档,同时,schema对DTD中的不足 进行了不出,尤其是在表达属性值和元素内容的类型约束上。

XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
XML Schema:

定义可出现在文档中的元素
定义可出现在文档中的属性
定义哪个元素是子元素
定义子元素的次序
定义子元素的数目
定义元素是否为空,或者是否可包含文本
定义元素和属性的数据类型
定义元素和属性的默认值以及固定值

1、根标记
XML Schema模式是扩展名为“.xsd”的一个文本文件,使用XML语法来编写。 XML Schema模式的根标记必须是schema,使用的名称空间是:
http://www.w3.org/2001/XMLSchema 名称空间的前缀xsd。例如:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
    ....  
</xsd:schema>  

2、元素标记
XML Schema模式中的“简单类型”元素的格式为:

<xsd:element name="标记名称" type="简单数据类型">  
      标记名称:对应的XML文件中标记的名称
      简单数据类型:是对标记中文本数据的限制。例如: 
     <xsd:element name="出生日期" type="xsd:date">  

XML Schema模式可以使用的简单数据类型有:int、float、double、date、time、string等。如 :

<xsd:element name="出生日期" type="xsd:date">

元素约束XML文件中的“出生日期”没有子标记,且标记的数据必须是日期型,即内容必须是“yyyy-mm-dd”形式。
3、复杂类型元素
对于XML文件中有子标记的标记, XML Schema模式可以使用“复杂类型”元素累约束。 XML Schema模式中“复杂类型”元素的格式为:

<xsd:element name="标记名称">  
    <xsd:complexType>  
        对子标记约束的元素  
    </xsd:complexType>  
</xsd:element>  

“复杂类型”元素中最重要的部分就是“对子标记约束的元素”部分,如果该“复杂类型”元素想约束name指定的标记顺序出现几个子标记,而且这些子标记在模式中已经有全局元素对其进行了约束,那么“对子标记约束的元素”部分可以是使用带ref属性的元素,例如:

<xsd:element name="标记名称">  
    <xsd:complexType>  
        <xsd:sequence>  
            <xsd:element ref="子标记1" />  
            <xsd:element ref="子标记2" />  
         <xsd:sequence>  
    </xsd:complexType>  
</xsd:element>  
<xsd:element name="子标记1" type="简单数据类型" />  
如果对子标记的约束不想引用全局元素,或没有约束该子标记的全局元素,“对子标记约束的元素”还可以是一个“复杂类型”元素。例如:  
<xsd:element name="标记名称">  
    <xsd:complexType>  
        <xsd:sequence>  
        <xsd:element name="子标记1" >  
            < xsd:complexType>  
                .......................  
             < /xsd:complexType>  
        </xsd:elemnt>       
         <xsd:sequence>  
    </xsd:complexType>  
</xsd:element>  

4、属性
对于XML文件中的属性, XML Schema模式使用“attribute”标记累约束,该标记的格式如下:

其中use可取值:“required”、”optional”、”fixed”、”default”
“attribute”标记必须在“复杂类型”元素中使用,指出“复杂类型”元素约束的XML标记应当有怎样的属性,例如:

<xsd:element name="标记名称">  
    <xsd:complexType>  
        <xsd:simpleContent>  
            <xsd:extension base="xsd:string">  
                <xsd:attribute name="学号" type="xsd:int" use="required"  />  
            </xsd:extension>  
        </xsd:simpleContent>  
    </xsd:complexType>  
</xsd:element>  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值