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;©right;</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入门学习结束!