一,属性声明
属性是描述素的额外信息的,是对素的修饰与补
充。一般来说,信息详实的XML文档都是一个特点,即
素通过属性来描述边缘信息。
在 DTD 中,属性通过 ATTLIST 声明来进行声明。一
个属性声明可以声明一个素的多个属性。
<! ATTLIST 素名 属性名 属性类型 [属性限定条件] [默认值]>
“属性限定条件”和“默认值‘两部分是可选的吗,有下面几种情况
Ø 在没有指定“素对属性的约束”时,必须为该属性指定“默认值”;
Ø 当“素对属性的约束”是#REQUIRED时,不能为该属性指定“默认值”;
Ø 当“素对属性的约束”是“IMPLIED”时,不能为该属性指定“默认值”;
Ø 当“素对属性的约束”是“FIXED”时,必须为该属性指定“默认值”;
二,限定条件
v #REQUIRED: 必须的属性,意味着必须为该素提供该属性
v #IMPLIED: 该属性是可有可无的
v #FIXED: 该属性的值是固定的,定义是必须制定固定值。使用该素时无需为其分配该属性,XML处理器会自动为给属性增加固定值
例题 Dtd
<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT 计算机书籍 ((书名, 作者, 价格, 简要介绍))>
<!ELEMENT 简要介绍 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ATTLIST 作者 地址 CDATA #REQUIRED>
<!ELEMENT 价格 (#PCDATA)>
<!ELEMENT 书籍列表 ((计算机书籍))>
<!ELEMENT 书名 (#PCDATA)>
Xml
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE 书籍列表 SYSTEM "required.dtd">
<书籍列表>
<计算机书籍>
<书名>Struts 2.1权威指南</书名>
<作者 地址="广州">kongyeeku</作者>
<价格>79.00</价格>
<简要介绍>该书详细介绍了Struts 2.1的各种功能和用法</简要介绍>
</计算机书籍>
</书籍列表>
三,属性类型
属性类型 |
含义 |
CDATA |
值为字符串数据 |
(en1|en2|..) |
此值是枚举列表中的一个值 |
ID |
该属性值必须是有效地标识符,在XML文档时唯一的 |
IDREF |
值为另外一个素的 id属性值 |
IDREFS |
值必须引用自多个已经有的ID属性值,多个ID属性值用空格隔开 |
NMTOKEN |
值为合法的 XML 名称 |
NMTOKENS |
值为多个合法的 XML 名称的列表 |
ENTITY |
值是一个外部实体,如图片支持 |
ENTITIES |
值是一个实体列表,多个实体之间以空格隔开 |
NOTATION |
该属性值是在DTD中声明过的符号,这个是过期的,不要使用 |
(1),字符类型
CDATA 是简单的纯文本字符类型,是最常用的类型,将简单的文本用做属性值。可以包括任何字符串,但不允许使用“<”,“>”,“&”,“””,“‘”。如果需要使用必须使用实体引用。属性值和素内容都
可以是文本类型,但是定义的方法不同
(2),枚举类型
声明了属性的备选值列表,属性必须从该列表
中选择一个值作为属性值。
<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT 购物车 (肉* , 水果*)>
<!ELEMENT 肉 EMPTY>
<!ELEMENT 水果 EMPTY>
<!ATTLIST 肉 类型 (鸡肉|牛肉|猪肉|鱼肉) #REQUIRED>
<!ATTLIST 水果 类型 (苹果|梨|桔子) #REQUIRED>
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE 购物车 SYSTEM "enumerated.dtd">
<购物车>
<肉 类型="猪肉"/>
<肉 类型="鸡肉"/>
<水果 类型="苹果"/>
<水果 类型="梨"/>
</购物车>
(3),ID、IDREF、 IDREFS类型
ID类型是一种较为严格的约束,它要求属性值必须是有效地XML标识名,而且在整个XML文件档中其值不能重复。
<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT beans (bean|object)*>
<!ELEMENT bean (property*)>
<!ELEMENT object EMPTY>
<!ELEMENT property EMPTY>
<!ATTLIST bean id ID #REQUIRED>
<!ATTLIST object id ID #REQUIRED>
<!ATTLIST property name CDATA #REQUIRED>
<!ATTLIST property ref IDREF #IMPLIED>
<!ATTLIST property set IDREFS #IMPLIED>
(4),NMTOKEN和NMTOKENS类型
NMTOKEN是一个比ID类型更宽松的类型,它只要求该属性是个合法的XML标识。它也是字符串数据,但是约束比CDATA约束要严格,它要求出现的字符要少
<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT 书籍列表 (计算机书籍)*>
<!ELEMENT 计算机书籍 (书名,作者,价格,简要介绍)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
<!ELEMENT 简要介绍 (#PCDATA)>
<!ATTLIST 作者 地址 CDATA #REQUIRED>
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE 书籍列表 SYSTEM "cdata.dtd">
<书籍列表>
<计算机书籍>
<书名>轻量级Java EE企业开发实战</书名>
<作者 地址="广州#">李刚</作者>
<价格>63</价格>
<简要介绍>该书主要介绍了一种流行的轻量级企业应用架构</简要介绍>
</计算机书籍>
</书籍列表>
(5),ENTITY和ENTITIES类型
定义ENTITY和ENTITIES类型的属性其属性值只能是未解析的实体,与外部数据相连。如图像文件,音像文件等。
<?xml version="1.0" encoding="gb2312"?>
<!ENTITY desc_movie SYSTEM "http://www.crazyit.org/test.wmv" >
<!ENTITY book_part1 SYSTEM "http://www.crazyit.org/part1.pdf" >
<!ENTITY book_part2 SYSTEM "http://www.crazyit.org/part2.pdf" >
<!ENTITY book_part3 SYSTEM "http://www.crazyit.org/part3.pdf" >
<!ELEMENT book (#PCDATA)>
<!-- 定义2个属性,它们的类型分别是ENTITY和ENTITIES -->
<!ATTLIST book description ENTITY "desc_movie">
<!ATTLIST book content ENTITIES #IMPLIED >
今天的文章 DTD约束语法细节分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/98658.html