0%

DTD-文档类型定义

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文档均由一下地构建模块构成:

  • 元素
  • 属性
  • 实体
  • PCDATA
  • CDDATA

元素

元素是 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>
Buy me a coffee.

欢迎关注我的其它发布渠道