DTD-文档类型定义 用来定义合法的xml文档构建模块,使用一些列合法的元素来定义文档结构,可被用来检测xml文档语法是否正确。DTD可以被成行地声明于xml文档中,也可以成为一个外部引用。
内部文档声明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <!DOCTYPE 根元素 [元素声明]> e.g. <?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 > armandhe</to > <from > hjx<from > <heading > message</heading > <body > hello,world</body > </note >
test.xml
外部文档声明 xml文档部分
1 2 3 4 5 6 7 8 9 <?xml version="1.0" ?> <!DOCTYPE note SYSTEM 'note.dtd' > //定义外部文档声明<note > <to > armandhe</to > <from > hjx<from > <heading > message</heading > <body > hello,world</body > </note >
dtd文档部分
1 2 3 4 5 <!ELEMENT note (to ,from ,heading ,body )> <!ELEMENT to (#PCDATA )> <!ELEMENT from (#PCDATA )> <!ELEMENT heading (#PCDATA )> <!ELEMENT body (#PCDATA )>
XML文档构建模块 所有地xml文档均由一下地构建模块构成:
元素 元素是 XML 以及 HTML 文档的主要构建模块 。
HTML 元素的例子是 “body” 和 “table”。XML 元素的例子是 “note” 和 “message” 。元素可包含文本、其他元素或者是空的。空的 HTML 元素的例子是 “hr”、”br” 以及 “img”。
1 2 3 4 <body id ="1" > 父元素文本 <form > 子元素文本内容</form > </body > //body与form均为元素
属性 属性可提供有关元素的额外信息。性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。
1 <img src ="computer.gif" />
实体 实体是用来定义普通文本的变量。实体引用是对实体的引用。
1 类似于html实体,html实体在xml中也可以使用,已经被预定义了
PCDATA PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。
也就是说,某一个元素被定义为PCDATA,那么他内部地文本元素中地内容如果出现其他标记,那么这些标记将被解析为元素,如果要让xml中使用地特殊字符被原样显示,则需要使用对应地实体。
CDDATA CDATA 的意思是字符数据(character data)。
***CDATA 是不会被解析器解析的文本。***在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
通俗得讲就是原样输出
元素声明 1 2 3 4 5 6 7 8 9 10 <!ELEMENT note EMPTY > //<note /> 空元素<!ELEMENT note (#PCDATA )> <!ELEMENT note ANY > //可包含任意内容<!ELEMENT note (to ,from ,heading ,body )> //字元素必须按章列出顺序出现在元素中且,字元素也需被声明<!ELEMENT note (footer )> //声明只出现一次的元素<!ELEMENT note (footer +)> //子元素至少出现一次<!ELEMENT note (footer *)> //字元素出现一次或多次<!ELEMENT note (footer ?)> //字元素出现零次或多次<!ELEMENT note (head ,body ,(message |confirm ))> //括号总的元素有且只能出现一个<!ELEMENT note (#PCDATA |to |form )*> //可以出现零次或多次的.....
属性声明 1 2 3 4 <!ARRLIST 元素名称 属性名称 属性类型 默认值> e.g <!AttlIST note id CDATA 1>
属性类型
属性默认值
实体 实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体引用是对实体的引用。
实体可在内部或外部进行声明。
1 2 3 4 5 6 7 //内部实体 <!ENTITY 实体名称 “实体值”> <!ENTITY message "this is a part of a good book" > <des > &message; </des > //外部实体 <!ENTITY message SYSTEM "http://www.armandhe.com/a.dtd" > <des > &message; </des >