XML三部曲之二—DTD

前端之家收集整理的这篇文章主要介绍了XML三部曲之二—DTD前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


DTDDocument Type Definition),定义了XML文件的结构,为XML文件提供语法与规则。内容既可以在XML文件中,也可以在XML文件外。可以定义自己的DTD.DTD对于XML是可选的内容


一、为什么要用?


为了正确的交换数据,XML文件需要确定的结构。

<span style="font-size:18px;"><book>

    <author>

        <name>刘伟</name>

        <sex>男</sex>

    </author>

</book></span>



一个<book>标签只能包含一个<name><sex>标签


二、形式


1、内置DTD


DTD被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:

<!DOCTYPE 根元素 [元素声明]>

带有DTD 的 XML 文档实例:

<span style="font-size:18px;"><span style="font-size:18px;">   <?xml version="1.0"?>
   <!DOCTYPE note [
       <!ELEMENT note(to,from,heading,body)>
       <!ELEMENT to      (#PCDATA)>
       <!ELEMENT from    (#PCDATA)>
       <!ELEMENT heading(#PCDATA)>
       <!ELEMENT body   (#PCDATA)>
   ]>
   <note>
       <to>晴天</to>
       <from>小夏</from>
       <heading>提醒</heading>
       <body>得要开会今天!</body>
   </note></span></span>


解释如下:

!DOCTYPE note (第二行)定义此文档是note 类型的文档。

!ELEMENT note (第三行)定义note 元素有四个元素:"to、from、heading,、body"

!ELEMENT to (第四行)定义to 元素为 "#PCDATA" 类型

!ELEMENT from (第五行)定义from元素为 "#PCDATA" 类型

!ELEMENT heading (第六行)定义heading 元素为 "#PCDATA" 类型

!ELEMENT body (第七行)定义body 元素为 "#PCDATA" 类型

2、外部DTD


DTD位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:

<!DOCTYPE 根元素 SYSTEM "文件名">

这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD:<?xml version="1.0"?>


<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>晴天</to>
<from>小夏</from>
<heading>提醒</heading>
<body>记得要开会今天!</body>
</note>

这是包含 DTD 的 "note.dtd" 文件

<!ELEMENT note (to,body)>
< !ELEMENT to (#PCDATA)>
< !ELEMENT from (#PCDATA)>
< !ELEMENT heading (#PCDATA)>
< !ELEMENT body (#PCDATA)>

三、XML文件构成

1、元素

1)普通元素

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

例子:

<!ELEMENT书名(#PCDATA)>

<!ELEMENT计算机书籍(书名,价格,简要介绍)>


2)空元素

空元素通过类别关键词EMPTY进行声明:

<!ELEMENT元素名称 EMPTY>

DTD例子:

<!ELEMENTbr EMPTY>

XML例子:

<br/>


3)带有任何内容的元素

<!ELEMENT元素名称 ANY>

例子:

<!ELEMENTnote ANY>




子元素顺序
<1 要求顺序:
   DTD
     <!ELEMENT计算机书籍(书名,价格)>
     <!ELEMENT书名(#PCDATA)>
     <!ELEMENT价格(#PCDATA)>
  XML
    <书籍列表>
       <计算机书籍>
           <书名>J2EE</书名>
           <价格>23</价格>
       </计算机书籍>
    </书籍列表>
 
<2 不要求顺序:
<span style="font-family: Arial,Helvetica,sans-serif;">DTD:    </span>
<!ELEMENT计算机书籍(书名|价格)*>
 XML:
<书籍列表>
    <计算机书籍>
        <价格>23</价格>
        <书名>J2EE</书名>
    </计算机书籍>
</书籍列表>
 

<3 重复元素:
 DTD:        <!ELEMENT计算机书籍(书名,作者+)>
 XML:
<书籍列表>
    <计算机书籍>
        <书名>J2EE</书名>
        <作者>小小</作者>
        <作者>清河</作者>
    </计算机书籍>
</书籍列表>

<4成组元素
 DTD:        <!ELEMENT计算机书籍(书名,作者)+>
 XML:
<书籍列表>
    <计算机书籍>
       <书名>J2EE</书名>
       <作者>小小</作者>
       <书名>XML</书名>
       <作者>清河</作者>
    </计算机书籍>
</书籍列表>
 

2属性

属性声明使用下列语法:

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

DTD实例

<!ATTLISTpayment type CDATA "check">

XML实例

<paymenttype="check" />

关键字的使用(这部分简答了解)

#Implied:假如您不希望强制作者包含属性,并且您没有默认值选项的话

#required:假如您没有默认值选项,但是仍然希望强制作者提交属性的话

#fixes:如果您希望属性拥有固定的值,并不允许作者改变这个值

3、实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

实体可在内部或外部进行声明。

一个内部实体声明

语法:

<!ENTITY实体名称 "实体的值">例子:

DTD例子:

<!ENTITY writer"Bill Gates">

<!ENTITY copyright "12323">XML例子:

<author>&writer;&copyright;</author>注释:一个实体由三部分构成:一个和号 (&),一个实体名称,以及一个分号 (;)

一个外部实体声明

语法:

<!ENTITY实体名称 SYSTEM "URI/URL">例子:

DTD例子:

<!ENTITY writerSYSTEM "http://www.baidu.com/">

<!ENTITY copyright SYSTEM "http://www.baidu.com/">XML例子:

<author>&writer;&copyright;</author>

注意:声明的次序

4、命名空间

解决复杂的DTD描述元素中名称冲突问题

前缀法的使用

元素名和属性名前面加一个标识进行区分

猜你在找的XML相关文章