DTD的编写

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 构建模块

  • 元素:元素可包含文本、其他元素或者是空的。

  • 属性:属性可提供有关元素的额外信息

    ​ 属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。

  • 实体:实体引用字符

    实体引用字符实体引用字符
    &lt;<&gt;>
    &amp;&&quot;"
    &apos;

  • 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">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simba1949

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值