XML

XML 知识量:7 - 28 - 99

4.2 XML Schema><

DTD文件的问题- 4.2.1 -

DTD存在的问题主要有以下几个方面:

  • DTD有独立的语法,且语法规则较为复杂。

  • DTD本身不是标记语言,不符合XML标准。

  • DTD中数据类型过于简单,已经不能满足实际需要。

  • DTD不支持命名空间。

  • DTD对元素出现的次数控制不够精确。

什么是XML Schema- 4.2.2 -

XML Schema语言也称为XML Schema Definition(XSD),其作用与DTD一样,用于对XML文档进行约束。XML Schema本身是一个XML文档,符合XML语法规范,可以被XML处理器直接解析,也支持命名空间,是DTD更好的替代者。

XML Schema的特点- 4.2.3 -

XML Schema主要有以下特点:

  • 使用XML语法,可以被XML处理器解析,便于学习和使用。

  • 支持丰富的数据类型,例如整型、布尔型、日期型等,也可以方便的创建其他复杂数据类型。

  • 支持命名空间,使XML文档具有更强的可扩展性。

XML Schema的结构- 4.2.4 -

初步了解一下XML Schema的结构,以下是一个简单的示例:

<?xml version="1.0" encoding="UTF-8"?>
<a:schema xmlns:a="http://www.w3.org/2001/XMLSchema">
    <a:element name="student_list">
        <a:complexType>
            <a:sequence maxOccurs="unbounded">
                <a:element name="student" type="student_info"/>
            </a:sequence>
        </a:complexType>
    </a:element>
    <a:complexType name="student_info">
        <a:sequence>
            <a:element name="number" type="a:string"/>
            <a:element name="name" type="a:string"/>
            <a:element name="class" type="a:string"/>
            <a:element name="sex">
                <a:simpleType>
                    <a:restriction base="a:string">
                        <a:enumeration value="male"/>
                        <a:enumeration value="female"/>
                    </a:restriction>
                </a:simpleType>
            </a:element>
        </a:sequence>
    </a:complexType>
</a:schema>

以上代码简单说明如下:

  • 因为XML Schema文档本身是XML文档,因此第1行就是XML的声明语句。

  • 第2行创建了根元素即声明命名空间,这里的根元素是schema,前缀a代表命名空间http://www.pnotes.cn。

  • Schema文档剩余部分就是元素的声明,定义了元素的名称name和数据类型type。

引用Schema文件- 4.2.5 -

引用XML Schema文件的语法为:

<根元素 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="待引用的Schema文件路径">

其中,http://www.w3.org/2001/XMLSchema-instance是W3C规定的用于引用Schema文件的命名空间,前缀一般为xsi。noNamespaceSchemaLocation属性用于指明要引用的Schema文件的路径,绝对路径或相对路径都可以。下面的示例引用了上节的Schema文件:

<?xml version="1.0" encoding="UTF-8"?>
<student_list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="student_list.xsd">
    <student>
        <number>1</number>
        <name>Bob</name>
        <class>1-1</class>
        <sex>male</sex>
    </student>
    <student>
        <number>2</number>
        <name>Lily</name>
        <class>1-2</class>
        <sex>female</sex>
    </student>
</student_list>