zoukankan      html  css  js  c++  java
  • XML的Schema约束

     XML的DTD和Schema约束区别:

    • DTD 的局限性
    • DTD不遵守XML语法(写XML文档实例时候用一种语法,写DTD的时候用另外一种语法)
    • DTD数据类型有限(与数据库数据类型不一致)
    • DTD不可扩展
    • DTD不支持命名空间(命名冲突)
    • Schema的新特性
    • Schema基于XML语法
    • Schema可以用能处理XML文档的工具处理
    • Schema大大扩充了数据类型,可以自定义数据类型
    • Schema支持元素的继承
    • Schema支持属性组
    • Schema支持命名空间

     XSD文档至少要包含:schema根元素和XML模式命名空间的定义、元素定义。需要注意的是XSD中必须定义一个且只能定义一个schema根元素,根元素中包括模式的约束,XML模式命名空间的定义,其他命名空间的定义、版本信息、语言信息和其他一些信息。

       1、schema根元素定义

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

         2、普通元素定义

    <xsd:element name="user" type="xsd:string" />

    XSD中元素是利用element标识符来声明,在上面的示例中name属性是元素的名字,type属性是元素值的类型,可以使XML Schema中内置的数据类型或其他类型

    全部元素如下: 

    元素 说明
    name 元素的名称
    type 元素值的类型
    minOccurs 该元素在父元素中最少出现的次数(默认为1,必须大于等于0)
    maxOccurs 该元素在父元素中最多出现的次数(默认为1,必须大于等于0),当设置为unbounded表示不限制。

    2.1 元素引用:避免在文档中多次定义同一个元素,可以使用元素的引用:

    <xsd:element name="user" type="xsd:string" />
    <xsd:sequence>
        <xsd:element ref="user" />  <!--当前元素就是user元素-->
    </xsd:sequence>

     2.2 元素别名:先定义

    <xsd:element name="user" type="xsd:string" substitutionGroup="yonghu" />

     后使用

    <yonghu>admin</yonghu>
    <user>admin</user>

     2.3 默认值与固定值

        通过default属性的设置,可以在XML文档中没有对city定义时赋予默认值,而是用fixed属性,可以给元素country设定一个固定的值china,并且不允许改变。

    <xsd:element name="city" type="xsd:string" default="xian" />
    <xsd:element name="country" type="xsd:string" fixed="china" />

     2.4 组合器

       sequence组合器,定义了一列元素必须按照模式中指定的顺序显示(如果是可选的,也可以不显示)。

    <xsd:sequence>
      <xsd:element name="first" type="xsd:string" />
      <xsd:element name="middle" type="xsd:string" />
      <xsd:element name="last" type="xsd:string" />        
    </xsd:sequence>

       all组合器,允许所定义的元素可以按照任意顺序显示,all元素的子元素在默认情况下是必须的,而且每次最多显示一次。

    <xsd:all minOccurs="0">
      <xsd:element name="first" type="xsd:string" />
      <xsd:element name="middle" type="xsd:string" />
      <xsd:element name="last" type="xsd:string" />        
    </xsd:all>

      choice组合器,允许指定多组声明中的一个,用于互斥情况。

    <xsd:choice>
      <xsd:element name="first" type="xsd:string" />
      <xsd:element name="middle" type="xsd:string" />
      <xsd:element name="last" type="xsd:string" />        
    </xsd:choice>

     3、定义属性

        在XML Schema文档中可以按照定义元素的方法定义属性,但受限制程度较高。可以应用在attribute元素定义中的属性如下表所示。 

    属性 含义
    defalt 初始默认值
    fixed 不能修改和覆盖的固定属性值
    name 属性的名称
    ref 对前一个属性定义的引用
    type 该属性的XSD类型或者简单类型
    use 如何使用属性 optional(可选属性,即属性不是必须的,默认是这个)、prohibited(禁止使用)或者required(强制必须)。
    form 确定attributeFormDefault的本地址
    id 模式文档中属性唯一的ID

     创建属性

    <xsd:attribute name="age" type="xsd:integer" />

    该语句定义了一个名为age的属性,它的值必须为整数。把它添加到模式中时,它必须是schema元素,complexType元素或者attributeGroup元素的子元素

    <xsd:element name="name">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="first" type="xsd:string" />
        </xsd:sequence>
        <xsd:attribute name="age" type="xsd:integer" use="optional" />   <!--将属性添加到元素name属性中-->  
      </xsd:complexType>
    </xsd:element>

     以上文档对应有效的XML文档如下:

    <?xml version="1.0"?>
    <name age="27">
      <first>string</first>
    </name>

     本文摘自:逆心XML Schema <第三篇>

    说明: xsi:schemaLocation 指定的命名空间对应的验证文件,用来定义xml schema的地址,也就是xml书写时需要遵循的语法,用于声明了目标命名空间的模式文档。 xmlns:xsi="" 是xsi中的元素的的约束规范。

  • 相关阅读:
    java se 转到ee小结
    objective c基本知识
    2013_11_14:递归算法(2)—全排列
    2013_11_13:递归算法(1)
    2013_11_13:关于 new 和delelte 的使用
    c++调试问题
    模式匹配BM算法介绍与实现
    一个n数组求和问题
    机试题
    算法题目
  • 原文地址:https://www.cnblogs.com/java-oracle/p/6158765.html
Copyright © 2011-2022 走看看