版权声明:喜欢就点个赞吧,有啥疑问可以留言交流~ https://blog.csdn.net/m0_38015368/article/details/89296283
DTD
DTD: Document type defination,文档类型定义(DTD)可定义合法的XML文档构建模块,分为内部和外部。内部格式:<!DOCTYPE root-element [element-declarations]>
,外部格式:<!DOCTYPE root-element SYSTEM "filename">
。实例:
<!-- 内部 -->
<?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>sjj</to>
<from>zzz</form>
<heading>forget</heading>
<body>forget all things</body>
</note>
<!-- 外部 -->
<?xml version="1.0">
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>sjj</to>
<from>zzz</form>
<heading>forget</heading>
<body>forget all things</body>
</note>
# 其中 note.dtd 与此 XML 文件位于同一目录下(否则应该用绝对目录)
PCDATA 与 CDATA
PCDATA:被解析的字符数据(parsed character data),PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &
、<
以及 >
实体来分别替换它们。
CDATA:字符数据(character data)。CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
元素
元素是 XML 以及 HTML 文档的主要构建模块。XML 元素的例子是 “note” 和 “message” 。元素可包含文本、其他元素或者是空的。
声明一个元素
格式:
<!ELEMENT element-name category>
<!-- or -->
<!ELEMENT element-name (element-content)
空元素
空元素通过类别关键词 EMPTY 声明:
<!ELEMENT element-name EMPTY>
<!-- 实例 -->
<!-- dtd -->
<!ELEMENT br EMPTY>
<!-- xml -->
<br />
只有 PCDATA 的元素
<!ELEMENT element-name (#PCDATA)>
<!-- 实例 -->
<!ELEMENT from (#PCDATA)>
带有任何内容的元素
通过 ANY 声明。
<!ELEMENT element-name ANY>
<!-- 实例 -->
<!ELEMENT not ANY>
带有子元素的元素
<!ELEMENT element-name (child1)>
<!-- or -->
<!ELEMENT element-name (child1,child2,...)>
<!-- 实例 -->
<!ELEMENT note (to,from,heading,body)>
声明元素出现次数
<!-- 出现一次 -->
<!ELEMENT element-name (child-name)>
<!-- 实例 -->
<!ELEMENT note (message)>
<!-- 最少出现一次 -->
<!ELEMENT element-name (chil-name+) >
<!-- 实例 -->
<!ELEMENT note (message+)>
# 出现 0 次或多次用 *
# 出现 0 次或 1 次用 ?
声明"非…/即…" 内容
<!ELEMENT note (to,from,header,(message|body))>
# "note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。
声明混合型的内容
<!ELEMENT note (#PCDATA|to|from|header|message)*>
# "note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。
实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
- 实体引用是对实体的引用
- 实体可在内部或外部进行声明
- 实体还可以分为通用实体和参数实体
内部实体声明
语法:
<!ENTITY entity-name "entity-value">
# 注意与单个元素定义的差别,这里是 “""”,单个元素无 “""” 或者使用 “()”
实例:
<!-- DTD -->
<!ENTITY writer "zzz">
<!ENTITY copyright "Copyright zzzsdust.com">
<!-- XML -->
<auther>&writer;©right;</author>
一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 ( ; )。
外部实体声明
语法:
<!ENTITY entity-name SYSTEM "URI/URL">
实例:
<!-- DTD -->
<!ENTITY writer SYSTEM "http://www.zzzsdsut.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.zzzsdsut.com/entities.dtd">
<!-- XML -->
<author>&writer; ©wright;</author>
通用实体
用 &实体名;
引用的实体,在 DTD 中定义,在 XML 文档中引用。
参数实体
% 实体名
(空格不可少),在 DTD 中定义,并且只能在 DTD 中使用,用%实体名;
引用- 只有在 DTD 文件中,参数实体的声明才能引用其他实体
- 可外部引用、内部引用
实例:
<!ENTITY % an_element "<!ELEMENT mytag (subtag)>">
<!ENTITY % remote_dtd SYSTEM "http://zzzsdust.com/remote.dtd">
%an_element; %remote_dtd;
参考:DTD 教程