DTD文档格式
内部的 DOCTYPE 声明格式:
<?xml version="1.0"?>
<!DOCTYPE root [
<!ELEMENT root (sonOne,sonTwo)>
<!ELEMENT sonOne (#PCDATA)>
<!ELEMENT sonTwo (grandsonOne,grandsonTwo)>
<!ELEMENT grandsonOne (#PCDATA)>
<!ELEMENT grandsonTwo (#PCDATA)>
]>
<root>
<sonOne>第一个子元素</sonOne>
<sonTwo>
<grandsonOne>第一个孙元素</grandsonOne>
<grandsonTwo>第二个孙元素</grandsonTwo>
</sonTwo>
</root>
(注:内部引入没有测试出提示,不建议使用)
外部文档声明
假如 DTD 位于 XML 源文件的外部,需要在XML顶部引入DTD文件,引入格式:
<!DOCTYPE 根元素 SYSTEM "文件名">
<?xml version="1.0"?>
<!ELEMENT root (sonOne,sonTwo)>
<!ELEMENT sonOne (#PCDATA)>
<!ELEMENT sonTwo (grandsonOne,grandsonTwo)>
<!ELEMENT grandsonOne (#PCDATA)>
<!ELEMENT grandsonTwo (#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">