DTD文档格式
内部的 DOCTYPE 声明格式:
<?xmlversion="1.0"?> <!DOCTYPEroot [ <!ELEMENTroot (sonOne,sonTwo)> <!ELEMENTsonOne (#PCDATA)> <!ELEMENTsonTwo (grandsonOne,grandsonTwo)> <!ELEMENTgrandsonOne (#PCDATA)> <!ELEMENTgrandsonTwo (#PCDATA)> ]> <root> <sonOne>第一个子元素</sonOne> <sonTwo> <grandsonOne>第一个孙元素</grandsonOne> <grandsonTwo>第二个孙元素</grandsonTwo> </sonTwo> </root>
(注:内部引入没有测试出提示,不建议使用)
外部文档声明
假如 DTD 位于 XML 源文件的外部,需要在XML顶部引入DTD文件,引入格式:
<!DOCTYPE 根元素 SYSTEM"文件名">
<?xmlversion="1.0"?> <!ELEMENTroot (sonOne,sonTwo)> <!ELEMENTsonOne (#PCDATA)> <!ELEMENTsonTwo (grandsonOne,grandsonTwo)> <!ELEMENTgrandsonOne (#PCDATA)> <!ELEMENTgrandsonTwo (#PCDATA)>
使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC"DTD名称""DTD文档的URL">
DTD 构建模块
- 元素:元素可包含文本、其他元素或者是空的。
- 属性:属性可提供有关元素的额外信息。
属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。 - 实体:实体引用字符
实体引用 |
字符 |
实体引用 |
字符 |
< |
< |
> |
> |
& |
& |
" | " |
' |
’ |
- PCDATA:文本中的标签会被当作标记来处理,而实体会被展开
- CDATA:文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
元素
元素声明使用下面的语法:
<!ELEMENT 元素名称 类别> 或者 <!ELEMENT 元素名称 (元素内容)>
元素内容可以是:
空元素 |
< !ELEMENT 元素名称 EMPTY> |
只有 PCDATA 的元素 |
< !ELEMENT 元素名称 (#PCDATA)> |
带有任何内容的元素 |
< !ELEMENT 元素名称 ANY> |
带有子元素 |
< !ELEMENT 元素名称 (子元素名称 1,子元素名称 2,…)> |
声明只出现一次的元素 |
< !ELEMENT 元素名称 (子元素名称)> |
声明最少出现一次的元素 |
< !ELEMENT 元素名称 (子元素名称+)> |
声明出现零次或多次的元素 |
< !ELEMENT 元素名称 (子元素名称*)> |
声明出现零次或一次的元素 |
< !ELEMENT 元素名称 (子元素名称?)> |
声明“非…/既…”类型的内容 |
< !ELEMENT note (to,(message|body))>(必须有to,必须有括号中一个) |
声明混合型的内容 |
< !ELEMENT note (#PCDATA|message)*>(括号中其中一个必须出现零次或者多次) |
属性
属性声明格式:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型的选项
类型 |
描述 |
CDATA |
值为字符数据 (character data) |
(en1|en2|…) |
此值是枚举列表中的一个值 |
ID |
值为唯一的 id |
IDREF |
值为另外一个元素的 id |
IDREFS |
值为其他 id 的列表 |
NMTOKEN |
值为合法的 XML 名称 |
NMTOKENS |
值为合法的 XML 名称的列表 |
ENTITY |
值是一个实体 |
ENTITIES |
值是一个实体列表 |
NOTATION |
此值是符号的名称 |
xml: | 值是一个预定义的 XML 值 |
默认值参数的选项
默认值 |
描述 |
#REQUIRED |
属性值是必需的 |
#IMPLIED |
属性不是必需的 |
#FIXED |
属性值是固定的 |
#FIXED语法
<!ATTLIST 元素名称 属性名称 属性类型 #FIXED"value">
列举属性值
<!ATTLIST 元素名称 属性名称 (en1|en2|..) 默认值>
实体
- 实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
- 实体引用是对实体的引用。
- 实体可在内部或外部进行声明。
一个内部实体声明
<!ENTITY 实体名称 "实体的值">
一个外部实体声明
<!ENTITY 实体名称 SYSTEM"URI/URL">