XML DTD学习

DTD:文档类型定义 (Document Type Definition)

一、DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用

1、声明于XML源文件。

1 <!DOCTYPE 根元素  [元素声明]>
<?xml version="1.0"  encoding="UTF-8"?>
<!-- XML文档的内部声明 --> <!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> ]> <书架> <> <书名>影响力</书名> <作者>罗伯特.西奥迪尼</作者> <售价>45</售价> </> </书架>

2、外部文档声明

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

book.dtd 文件:

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

book.xml 文件:

<?xml version="1.0"  encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<!-- book.dtd 外部声明 -->
<书架>
    <>
         <书名>影响力</书名>
         <作者>罗伯特.西奥迪尼</作者>
         <售价>45</售价>
    </>
</书架>

 二、构建模块

所有的XML文档都是有一下简单的构建模块构成:元素、属性、实体、PCDATA、CDATA 组成

PCDATA 的意思是被解析的字符数据(parsed character data),可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

CDATA 的意思是字符数据(character data),CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

三、元素的声明:

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

元素类型包括:空元素EMPTY、只有 PCDATA 的元素、带有任何内容的元素、带有子元素(序列)的元素。

  EMPTY类型规定了元素不能有值但可以有属性,不能包括文本。ANY类型则规定一个元素下面可以包括子元素,文本,属性,将根元素设置为ANY后 子元素出现的次数和顺序将不受限制。(#PCDATA) 则规定元素下面不能包括子元素,且元素的值是字符串。

<!ELEMENT 元素名称 EMPTY>
<!ELEMENT br EMPTY>
<!ELEMENT 元素名称 (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT 元素名称 ANY>
<!ELEMENT note ANY>
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
<!ELEMENT note (to,from,heading,body)>

关于子元素出现的次数

<!ELEMENT 元素名称 (子元素名称+)>   <!-- +:至少出现一次 -->
<!ELEMENT 元素名称 (子元素名称*)>   <!-- *:出现零次或者多次 -->
<!ELEMENT 元素名称 (子元素名称?)>   <!-- ?:出现零次或者一次 -->

 四、属性的声明

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

#REQUIRED:属性值是必需的

#IMPLIED:属性不是必需的

#FIXED value:属性值是固定的

五、实体

<!ENTITY 实体名称 "实体的值">

<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">

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

六、实战演练:

<!DOCTYPE CATALOG [

<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">

<!ELEMENT CATALOG (PRODUCT+)>

<!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock">

<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>

<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte" 
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell">

<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>

<!ELEMENT NOTES (#PCDATA)>

]>

根据上面的ddt,对应写出自己的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE CATALOG SYSTEM "CATALOG.dtd" >
<CATALOG>
    <PRODUCT NAME="apple"  PARTNUM="30">
        <SPECIFICATIONS WEIGHT="30" POWER="30"> </SPECIFICATIONS>
        <OPTIONS></OPTIONS>
        <PRICE MSRP="40" WHOLESALE="89" STREET ="90"  SHIPPING ="20"></PRICE>
        <NOTES></NOTES>
    </PRODUCT>
</CATALOG>

DTD入门学习结束!

原文地址:https://www.cnblogs.com/lyjs/p/4853338.html