DTD与XML Schema

Posted xidongyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DTD与XML Schema相关的知识,希望对你有一定的参考价值。

XML是一种数据格式化语言,用于描述复杂的数据结构。而DTD/Schema是规范XML文档,对XML文档的书写进行约束

 XML DTD

一个例子

DTD约束文档

<!ELEMENT books (book)>
<!ELEMENT book (name,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>

在DTD文档中定义book Tag的相关属性

XML文档

<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE books SYSTEM "books.dtd">
<books>
<book>
<name>java</name>
<price>$16</price>
</book>
</books>

在XML文档中引入DTD约束,因为DTD中规定books Tag有book组成,因此在XML中books Tag需有book child Tag,
DTD中规定book Tag由name和price组成,因此XML文档中book Tag必须有name和price

当然DTD和XML可以写在同一个文件中

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE users [
<!ELEMENT users (user*)>
<!ELEMENT user (id,username,password,email,birthday)>
<!ELEMENT id      (#PCDATA)>
<!ELEMENT username    (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT email    (#PCDATA)>
<!ELEMENT birthday    (#PCDATA)>
]>
<users>
<user>
<id>1</id>
<username>1</username>
<password>1</password>
<email>1</email>
</user>
</users>

XML引入DTD

XML中有两个方式引入DTD,一种是直接引入,即将DTD和XML写在同一个文档中。还有一种是外部引入。外部引入分为本地和公共。本地表示自定义DTD,而公共则表示大家共同认可的DTD。

本地引入DTD 
    <!DOCTYPE root-element SYSTEM "filename">
引入公共DTD
    <!DOCTYPE root-element PUBLIC "DTD-NAME" "URL">

很少有自定义DTD,大部分开发场景下都使用公用DTD,关于DTD可参考DTD定义

XML Schema

xml Schema使用预先定义好的元素和属性开发的,其本身就是XML文档(这与DTD不同),通过Schema再来规定XML实例文档。由于一个XML实例文档可以引入多个Schema,为了避免元素重名问题,每个Schema都应有一个名称空间(这里使用URI来区分)。由于定义Schema文档时要用到预先定义的属性和元素,因此需引入W3C组织规定的scheme,即xmlns="http://www.w3.org/2001/XMLSchema"

约束文档

<?xml version="1.0" encoding="utf-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNameSpace="http://www.dy-pc.com"
elementFormDefault = "qualified"
>
<element name="books">
    <complexType>
        <sequence>
            <element name="book">
                <squence>
                    <element name="name" type="string" />
                    <element name="price" type="double" />
                </squence>  
            </element>
        </sequence>
    </complexType>
</element>

XML文档

<?xml version="1.0" encoding="utf-8" ?>
<books  xmlns="http://www.dy-pc.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.dy-pc.com  test.xsd">
    <book>
        <name>java</name>
        <price>$16</price>
    </book>
</books>

以上是关于DTD与XML Schema的主要内容,如果未能解决你的问题,请参考以下文章

XML-Schema验证

Schema约束

schema.xml

xml约束技术---schema

DTD和Schema的区别

Schema技术