XML-Schema

Schema是用于描述和规范XML文档的逻辑结构的一种语言,它最大的作用就是验证XML的正确性。可以理解成与DTD(文档类型定义)功能差不多。

XML Schema 是 DTD 的继任者

理由如下:

  • XML Schema 可针对未来的需求进行扩展
  • XML Schema 更完善,功能更强大
  • XML Schema 基于 XML 编写
  • XML Schema 支持数据类型
  • XML Schema 支持命名空间
<书本 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F:\XML\Schema\book.xsd">
    <名册>123</名册>
    <作者>Lin</作者>
</书本>

验证Schema

<?xml version="1.0" encoding="UTF-8"?>
<!-- 默认xs命名空间于引用DTD的地址(http://www.w3.org/2001/XMLSchema)验证 -->
<!--schema根元素-->
<!--complexType 复杂类型-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:complexType name="书本类型">
        <xs:all>
            <xs:element name="名册" type="xs:string"/>
            <xs:element name="作者" type="xs:string"/>
        </xs:all>
    </xs:complexType>
    <xs:element name="书本" type="书本类型"/>
</xs:schema>

转换成group形式

<?xml version="1.0" encoding="UTF-8"?>
<!-- 默认xs命名空间于引用DTD的地址(http://www.w3.org/2001/XMLSchema)验证 -->
<!--schema根元素-->
<!--complexType 复杂类型-->
<!--all 规定子元素能够以任意顺序出现,每个子元素可出现零次或一次。-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:group name="书本组">
        <xs:all>
            <xs:element name="名册" type="xs:string"/>
            <xs:element name="作者" type="xs:string"/>
        </xs:all>
    </xs:group>
    <xs:complexType name="书本类型">
        <xs:group ref="书本组"/>
    </xs:complexType>
    <xs:element name="书本" type="书本类型"/>
</xs:schema>

属性group

<!-- use表示 prohibited禁止  required必须- optional可选-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:attributeGroup name="myAttrGroup">
        <xs:attribute name="属性1" use="optional "/>
        <xs:attribute name="属性2" use= "prohibited"/>
    </xs:attributeGroup>
    <xs:element name="元素">
        <xs:complexType>
            <xs:attributeGroup ref="myAttrGroup"/>
        </xs:complexType>
    </xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<元素 属性1="" 属性2="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F:\XML\Schema\book.xsd"/>

simpleType

<!-- simpleType简单类型 只能在基本类型上扩展-->
<!-- restriction限制范围-->
<!--list集合一个或者多个-->
<!--union 多个类型中的其中一个-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:simpleType name="限定范围">
        <xs:restriction base="xs:int">
            <xs:enumeration value="1"/>
            <xs:enumeration value="2"/>
            <xs:enumeration value="3"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="集合">
        <xs:list itemType="xs:date"/>
    </xs:simpleType>
    <xs:simpleType name="可选">
        <xs:union memberTypes="集合 限定范围"/>
    </xs:simpleType>
    <xs:element name="元素" type="可选"/>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<元素 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F:\XML\Schema\book.xsd">2012-10-12 2012-10-11</元素>


或者 


<?xml version="1.0" encoding="UTF-8"?>
<元素 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F:\XML\Schema\book.xsd">2012-10-12 2012-10-11</元素>

复杂例子

<?xml version="1.0" encoding="UTF-8"?>
<学生名册 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F:\XML\Schema\student.xsd" >
    <学生 学号="1">
        <姓名/>
        <性别></性别>
        <年龄>1</年龄>
    </学生>
    <学生 学号="1">
        <姓名/>
        <性别></性别>
        <年龄>1</年龄>
    </学生>
    <学生 学号="1">
        <姓名/>
        <性别/>
        <年龄>1</年龄>
    </学生>
</学生名册>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="学生名册">
        <xs:complexType>
            <xs:sequence minOccurs="3" maxOccurs="unbounded">
                <xs:element ref="学生"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="学生">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="姓名" type="xs:string"/>
                <xs:element name="性别" default="男" >
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="男"/>
                            <xs:enumeration value="女"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="年龄">
                    <xs:simpleType>
                        <xs:restriction base="xs:integer">
                            <xs:minExclusive value="0"/>
                            <xs:maxExclusive value="100"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="学号" type="xs:integer" use="required"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

 

 

 

posted @ 2012-12-17 22:58  Mr.Lin_♪  阅读(144)  评论(0)    收藏  举报