DTD文件使用总结

1. 声明元素


1.1.声明格式

<!ELEMENT element-name category>


1.2 具体声明场景

  • 声明只有文本内容的元素:

<!ELEMENT element-name (#PCDATA)>


  • 声明有子元素的元素

<!ELEMENT element-name (child1)>或<!ELEMENT element-name (child1,child2,...)>


  • 声明只出现一次的元素

<!ELEMENT element-name (child-name)>

实例: <!ELEMENT note (message)>

上面的例子声明了:message 子元素必须出现一次,并且必须只在 “note” 元素中出现一次。


  • 声明最少出现一次的元素

<!ELEMENT element-name (child-name+)>

实例: <!ELEMENT note (message+)>

上面的例子中的加号(+)声明了:message 子元素必须在 “note” 元素内出现至少一次。


  • 声明出现零次或多次的元素

<!ELEMENT element-name (child-name*)>

实例: <!ELEMENT note (message*)>

上面的例子中的星号(*)声明了:子元素 message 可在 “note” 元素内出现零次或多次。


  • 声明出现零次或一次的元素

<!ELEMENT element-name (child-name?)>

实例: <!ELEMENT note (message?)>

上面的例子中的问号(?)声明了:子元素 message 可在 “note” 元素内出现零次或一次。


  • 声明"非…/即…"类型的内容

实例: <!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”。


1.3 声明时的注意点


顺序性: 当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中

完整性: 在一个完整的声明中,子元素也必须被声明


2. 声明属性


2.1 声明格式

声明格式: <!ATTLIST element-name attribute-name attribute-type attribute-value>

示例: <!ATTLIST payment type CDATA "check">


2.2 属性类型

类型描述
CDATA值为字符数据 (character data)
(en1|en2|…)此值是枚举列表中的一个值
ID值为唯一的 id
IDREF值为另外一个元素的 id
IDREFS值为其他 id 的列表
NMTOKEN值为合法的 XML 名称
NMTOKENS值为合法的 XML 名称的列表
ENTITY值是一个实体
ENTITIES值是一个实体列表
NOTATION此值是符号的名称

2.2 声明时attribute-value的可选值

解释
具体的值属性的默认值
#REQUIRED属性值是必需的
#IMPLIED属性不是必需的
#FIXED value属性值是固定的

示例:

  • 默认值
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">

合法的 XML:
<square width="100" />
  • #REQUIRED

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>

<!ATTLIST person number CDATA #REQUIRED>

合法的 XML:
<person number="5677" />

非法的 XML:
<person />

假如您没有默认值选项,但是仍然希望强制作者提交属性的话,请使用关键词 #REQUIRED。

  • #IMPLIED

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

<!ATTLIST contact fax CDATA #IMPLIED>

合法的 XML:
<contact fax="555-667788" />

合法的 XML:
<contact />

假如您不希望强制作者包含属性,并且您没有默认值选项的话,请使用关键词 #IMPLIED。

  • #FIXED

<!ATTLIST element-name attribute-name attribute-type #FIXED "value">

<!ATTLIST sender company CDATA #FIXED "Microsoft">

合法的 XML:
<sender company="Microsoft" />

非法的 XML:
<sender company="W3Schools" />

如果您希望属性拥有固定的值,并不允许作者改变这个值,请使用 #FIXED 关键词。如果作者使用了不同的值,XML 解析器会返回错误。

  • 列举属性值

<!ATTLIST element-name attribute-name (en1|en2|..) default-value>

<!ATTLIST payment type (check|cash) "cash">

XML 例子:
<payment type="check" />
或
<payment type="cash" />

如果您希望属性值为一系列固定的合法值之一,请使用列举属性值。

3. dtd声明类型


3.1 内部声明

xml内容和dtd在同一个xml文件内.

声明位置: <?xml version="1.0"?>之后, 元素之前

声明格式: <!DOCTYPE root-element [element-declarations]>

作用范围: 当前xml范围内

声明示例:

<?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>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

以上 DTD 解释如下:

  • !DOCTYPE note (第二行)定义此文档是 note 类型的文档
  • !ELEMENT note (第三行)定义 note 元素有四个元素:“to、from、heading,、body”
  • !ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型
  • !ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型
  • !ELEMENT heading (第六行)定义 heading 元素为 “#PCDATA” 类型
  • !ELEMENT body (第七行)定义 body 元素为 “#PCDATA” 类型

3.2 外部SYSTEM声明

一般项目内声明的dtd约束, 项目内可以复用

格式: <!DOCTYPE root-element SYSTEM "dtdFileName">

注意: dtdFileName可以是xml的相对路径或文件绝对路径

outer.xml文件内容:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "my.dtd">
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>

my.dtd文件内容(和outer.xml同一级目录下):

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

3.3 外部PUBLIC声明

第三方公共的dtd约束

声明格式: <!DOCTYPE 根元素名 PUBLIC "DTD的名称" "外部DTD文件的URI">

示例:

web.xml内容

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
</web-app>


参考: https://www.runoob.com/dtd/dtd-tutorial.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值