XML\DTD 基础

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 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;&lt; 以及 &gt; 实体来分别替换它们。

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;&copyright;</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; &copywright;</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 教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值