XML Schema

 

目录

# 定义和引用

o 在Eclipse 中使用XSD对XML文档进行有效验证

# 元素定义

o 简单元素定义

o 对简单元素值进行约束

o 定义复杂类型元素

o 定义空元素

o 定义只包含子元素的复杂元素

o 定义只包含文本的复杂元素

o 定义混合内容复杂元素

o 定义元素属性

o 子元素顺序

o 元素出现次数

o 子元素分组和引用

o 属性分组和引用

o 允许出现未定义的子元素

o 允许出现未定义的属性

# 参考

 

 

# 定义和引用

 

Schema 本身也是一个XML文件,根元素为 <schema>:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/NewXMLSchema"
    elementFormDefault="qualified">
 

</xs:schema>

或者使用默认命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<schema
    xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/NewXMLSchema"
    elementFormDefault="qualified">

    

</schema>

    - XSD所有元素(<schema> 等)位于"http://www.w3.org/2001/XMLSchema"命名空间

    - targetNamespace 定义XSD所定义的XML文档的命名空间

    - elementFormDefault="qualified" 定义实例文档元素必须使用 qualified name

 使用某一个Schema的XML文档,称为该Schema的实例文档

实例文档引用Schema的格式是:

<?xml version="1.0" encoding="UTF-8"?>
<NewRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.example.org/NewXMLSchema"
    xsi:schemaLocation="http://www.example.org NewXMLSchema.xsd" >

</NewRoot>

注意,schemaLocation 属性值必须是偶数个URI,以空格分隔,上例中是2个

 

o 在Eclipse 中使用XSD对XML文档进行有效验证

 

Eclipse 中,在Package Explorer 中右键点击XML文档,选择“Validate”菜单项,对XML文档进行有效性验证

如果XML文档应用了Schema,则需要将Schema文件添加到XML Catalog:选择 Window->Preference->XML->XML Catalog

添加一个 User Specified Entry:

    - Location:Schema路径,可以指定文件系统绝对路径,或工作空间相对路径

    - Key type:选择 Namespace name

    - Key:输入该Schema 所定义的命名空间(targetNamespace)

 

Eclipse 对实例文档进行验证时,将根据所声明的命名空间(xmlns="URI"),在XML Catalog 中查找对应的Schema文件

 

# 元素定义

 

XSD将元素分为2种类型:

    - 简单元素:只包含文本,无属性

    - 复杂元素:可能包含文本、子元素、属性

根据是否包含文本或子元素,复杂元素又分为以下4种(每种都可能具有属性):

    - 空元素:无文本、子元素

    - 仅包含子元素

    - 仅包含文本(但有属性,因此与简单元素区分)

    - 包含文本及子元素

 

o 简单元素定义

 

<element name="name" type="type" >

常见的类型有 string、boolean、integer...(如果XSD没有定义默认命名空间,则类型要加命名空间前缀,如 xs:string )

设置缺省值:

<element name="name" type="type" default="default">

设置固定值:

<element name="name" type="type" fixed="value">

 

o 对简单元素值进行约束

 

使用 <simpleType> 定义一种简单元素类型,使用 <restriction> 对该类型进行约束,如:

<element name="age" type="ageType" />
<simpleType name="ageType" >
    <restriction base="integer">
        <minInclusive value="0" />
        <maxExclusive value="10000" />
    </restriction>
</simpleType>


也可以直接将 <simpleType> 定义为<element> 的子元素,如:

<element name="age" >
<simpleType >
    <restriction base="integer">
        <minInclusive value="0" />
        <maxExclusive value="10000" />
    </restriction>
</simpleType>
</element>

 

o 定义复杂类型元素

 

使用 <complexType> 定义复杂元素类型

<element name="name">
     <complexType>
    ...
    </complexType>
</element>

 

o 定义空元素

 

空元素即只有属性,不包含文本或子元素的复杂类型元素

<element name="name">
    <complexType>
        <attribute ... />
        <attribute ... />
        ...
    </complexType>
</element>

关于属性的定义见后文

 

o 定义只包含子元素的复杂元素

 

使用 <sequence> 定义其子元素

<complexType>
    <sequence>
        <element ... > ... </element>
        ...
    </sequence>
</complexType>

实例文档中子元素的出现顺序必须按照XSD定义的顺序

 

o 定义只包含文本的复杂元素

 

使用 <simpleContent>

<element name="name" >
    <complexType>
        <simpleContent base="type">
            ...
        </simpleContent>
    <complexType>
</element>

 

可以使用 <restriction> 约束文本值:

<element name="name" >
    <complexType>
        <simpleContent >
            <restriction base="type">
            ...
            </restriction>
        </simpleContent>
    <complexType>
</element>

 

或者,使用 <extension> 增加属性定义

<element name="name" >
    <complexType>
        <simpleContent >
            <extension base="type">
                <attribute ... />
                ...
            </extension >
        </simpleContent>
    <complexType>
</element>

 

o 定义混合内容复杂元素

 

这类元素包含文本内容和子元素

使用 mixed="true" 属性

<complexType mixed="true">

 

o 定义元素属性

 

元素属性定义类似于简单元素定义:

<attribute name="name" type="type" >

 

 o 子元素顺序

 

使用以下元素定义子元素出现的顺序:

    - <sequence> 顺序

    - <all> 任意顺序

    - <choice> 只允许其中之一出现

 

o 元素出现次数

 

使用 minOccurs/maxOccurs 属性

<element name="name" minOccurs="min" maxOccurs="max" >

 

o 子元素分组和引用

 

将子元素定义为一组,可被其它元素引用

定义组:

<group name="name">
    <sequence>
        ...
    </sequence>
</group>

引用:

<sequence>
    <group ref="name" />
    <element ... />
</sequence>

 

o 属性分组和引用

 

将属性分组,可被其它元素引用

定义分组:

<attributeGroup name="name">
    <attribute ... />
    ...
</attributeGroup>

引用:

<complexType>
    <attributeGroup ref="name" />
</complexType>

 

o 允许出现未定义的子元素

 

使用 <any> 定义任意子元素

<sequence>
    <element ...>...</element>
    ...
    <any minOccurs="0" />
</sequence>

 

o 允许出现未定义的属性

 

使用 <anyAttribute>

<complexType>
    <sequence> ... </sequnece>
    <anyAttribute />
</complexType>

 

# 参考

 

数据类型:XSD String

元素:XSD Elements

 

 

 

 

posted @ 2013-08-06 12:26  Jack of Hearts  阅读(629)  评论(0编辑  收藏  举报