总结
豆包 AI 助手文章总结

xml约束技术之dtd的详解

黄舟
发布: 2017-03-22 16:36:20
原创
1433人浏览过

1.DTD官方教程

##2.xml约束技术:
dtd约束:语法相对简单,功能也相对简单。先出现
schema约束:语法相对复杂,功能也相对强大。采用和xml语法类似的编写方式,schema约束出现就是为了替换dtd约束。

3.DTD简介:

  文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

3.1导入DTD的方式:

1.内部导入:

<code>#导入方式:
<!DOCTYPE root-element [element-declarations]>
#实例:
<?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>
</code>
登录后复制
(第二行)定义此文档是 note(根标签) 类型的文档。<br>
(第三行)定义 note 元素有四个元素(标签):"to、from、heading,、body"<br>
(第四行)定义 to 元素为 "#PCDATA" 类型<br>
(第五行)定义 frome 元素为 "#PCDATA" 类型<br>
(第六行)定义 heading 元素为 "#PCDATA" 类型<br>
<p>(第七行)定义 body 元素为 "#PCDATA" 类型</p>
<p>外部导入方式:<br>  本地文件:</p>
<pre class="brush:xml;"><code>#导入方式:
 <!DOCTYPE note SYSTEM "note.dtd">
#note.dtd文件内容:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)></code>
登录后复制

  公共的外部导入:一般项目采用公共外部导入,比如ssh的xml文件基本上就是采用了这种方式

<code>#导入方式:
 <!DOCTYPE 根元素 PUBLIC "http://rlovep.com/peace.dtd">
#如hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"></code>
登录后复制

3.2DTD语法:

  1.约束标签
 语法:

<code> <!ELEMENT 元素名称 类别>  或 <!ELEMENT 元素名称 (元素内容)></code>
登录后复制
 类别:
空标签: EMPTY。 表示元素一定是空元素.例如::
普通字符串: (#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。例如:

任何内容: ANY。表示元素的内容可以是任意内容(包括子标签) 例如:

 元素内容:

<code>顺序问题:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签
 
次数问题:
标签  :  必须且只出现1次。
标签+ : 至少出现1次
标签*  : 0或n次。
标签? : 0 或1次。
声明"非.../既..."类型的内容</code>
登录后复制

 2.约束属性:
 语法:

<code><!ATTLIST 元素名称 属性名称 属性类型 默认值></code>
登录后复制

 属性类型:

<code>CDATA :表示普通字符串
(en1|en2|..): 表示一定是任选其中的一个值
ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头</code>
登录后复制

 默认值:

<code>#REQUIRED 属性值是必需的
#IMPLIED   属性不是必需的
#FIXED value 属性不是必须的,但属性值是固定的</code>
登录后复制

3.3测试如下,请细看注释:

<code><?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from+,heading*,body?,(br|b))>
<!--带有子序列的元素,需要按照先后顺序出现;
    to只能出现一次
    from最少出现一次
    heading次数随意
    body出现零次或者一次
    非出现br就出现b
-->
<!--元素约束-->
<!ELEMENT to (#PCDATA)><!--pcdata元素-->
<!ELEMENT from ANY><!--任何内容的元素-->
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ELEMENT br EMPTY><!--空元素-->
<!ELEMENT b EMPTY><!--空元素-->
<!--属性约束-->
<!ATTLIST to number CDATA #REQUIRED><!--必须有属性值出现,且属性值类型为字符串-->
<!ATTLIST from length CDATA "10"><!--默认属性值,不写出属性时属性值为10-->
<!--假如您不希望强制作者包含属性,并且您没有默认值选项的话,请使用关键词 #IMPLIED。-->
<!ATTLIST heading length CDATA #IMPLIED>
<!ATTLIST body length CDATA #FIXED "123"><!--属性拥有固定的值,并不允许作者改变这个值-->
<!ATTLIST br type (check|cash) "cash"><!--属性值可以为check和cash中的一个-->
]>
<note>
<to number="1234">Tove</to>
<from>Jani</from>
<heading length="10">Reminder</heading>
<body length="123">Don't forget me this weekend</body>
<br type="check"/>
</note></code>
登录后复制

以上就是xml约束技术之dtd的详解的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号