DTD、Schema约束

前端之家收集整理的这篇文章主要介绍了DTD、Schema约束前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

什么是XML约束

XML语法: 规范的xml文件的基本编写规则。(由w3c组织制定的)
XML约束: 规范XML文件数据内容格式的编写规则。(由开发者自行定义)
举例:

<?xml version="1.0" encoding="utf-8"?>
<contactList>
    <contact id="001" name="eric">
        <name>张三</name>
        <age>20</age>
        <phone>134222223333</phone>
        <email>zhangsan@qq.com</email>
        <qq>432221111</qq>
    </contact>
</contactList>

以上是一个xml文档,如<contact></contact>这个标签必须成对出现这是语法约束,而contact标签出现多少次这个是内容约束

两种约束:

DTD约束:语法相对简单,功能也相对简单。学习成本也低。
Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!!!(基于名称空间)

DTD约束

三种导入约束的方法

内部导入

book.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> <!ATTLIST 书 id ID #required> ]>
<书架>
    < id="id1">
        <书名>Java就业培训教程</书名>
        <作者>张孝祥</作者>
        <售价>39.00元</售价>
    </>
    < id="id2">
        <书名>MysqL</书名>
        <作者>王明</作者>
        <售价>28.00元</售价>
    </>
</书架>

外部导入

book.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
    < id="id1">
        <书名>Java就业培训教程</书名>
        <作者>张孝祥</作者>
        <售价>39.00元</售价>
    </>
    < id="id2">
        <书名>MysqL</书名>
        <作者>王明</作者>
        <售价>28.00元</售价>
    </>
</书架>

book.dtd

<!ELEMENT 书架 (书+)>
    <!ELEMENT 书 (书名,售价)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>
    <!ATTLISTid ID #required>

互联网导入

<!DOCTYPE 根元素 PUBLIC "dtd文件的地址">

DTD语法(约束标签属性、文本)

标签约束

<!ELEMENT 元素名称 类别><!ELEMENT 元素名称 (元素内容)>

1、类别:
标签: EMPTY。 表示元素一定是空标签
普通字符串: (#PCDATA)。表示标签内容一定是普通字符串(不能含有子标签)。
任何内容: ANY。表示元素的内容可以是任意内容包括标签
2、顺序问题
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签
3、次数问题:
标签 : 必须且只出现1次。
标签+ : 至少出现1次
标签* : 0或n次。
标签? : 0 或1次。

属性约束

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

1、属性类型:控制属性值的
CDATA :表示普通字符串
(en1|en2|..): 表示一定是任选其中的一个值
ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
2、默认值:
#required 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性不是必须的,但属性值是固定的

Schema约束

什么是Schema约束

XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性,现在已是w3c组织的标准,它正逐步取代DTD。

DTD VS Schema

  • XML Schema符合XML语法结构。
  • DOM、SAX等XML API很容易解析出XML Schema文档中的内容
  • XML Schema对名称空间支持得非常好。
  • XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
  • XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。

使用Schema约束

例一:

book.xsd(一个XML Schema文档通常称之为模式文档(约束文档))

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www. itcast.cn" elementFormDefault="qualified">
<xs:element name='书架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='书' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

book.xml(遵循这个文档书写的xml文件称之为实例文档)

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

<itcast:书架 xmlns:itcast="http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itcast.cn book.xsd">

    <itcast:书>
        <itcast:书名>JavaScript网页开发</itcast:书名>
        <itcast:作者>张孝祥</itcast:作者>
        <itcast:售价>28.00元</itcast:售价>
    </itcast:书>
</itcast:书架>

1、对book.xsd的分析:

  • xmlns:xs=”http://www.w3.org/2001/XMLSchema”
    表明此schema中使用的元素和数据类型来自于http://www.w3.org/2001/XMLSchema名称空间(namespace),xs是这个命名空间的别名
  • targetNamespace=”http://www. itcast.cn”
    表明此schema定义的元素 (书架,书,书名,售价)来自于http://www.w3schools.com名称空间
  • elementFormDefault=”qualified”
    指定该schema文档中声明的根元素及其所有子元素都属于targetNamespace所指定的名称空间

2、对book.xml的分析

  • xmlns:itcast=”http://www.itcast.cn”

    表明itcast声明的标签来自http://www.itcast.cn命名空间

  • xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

    固定写法,用来对xml文件头部写法的规范

  • xsi:schemaLocation=”http://www.itcast.cn book.xsd”

    表明http://www.itcast.cn命名映射到book.xsd文档(中间是空格)

    图解分析如下:

例二:使用命名空间引入多个schema文档

<?xml version="1.0" encoding="UTF-8"?> <书架 xmlns="http://www.it315.org/xmlbook/schema" <!-- 默认命名空间 --> xmlns:demo="http://www.it315.org/demo/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.it315.org/xmlbook/schema http://www.it315.org/xmlbook.xsd http://www.it315.org/demo/schema http://www.it315.org/demo.xsd"> <> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价 demo:币种=”人民币”>28.00元</售价><!-- "币种"这个属性使用demo命名空间,标签全部使用的是默认命名空间 --> </> </书架> 
原文链接:https://www.f2er.com/xml/294651.html

猜你在找的XML相关文章