xml约束技术之dtd的详解

互联网 17-3-22

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></pre>  <p>  公共的外部导入:一般项目采用公共外部导入,比如ssh的xml文件基本上就是采用了这种方式</p>  <pre class="brush: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></pre>  <h3>3.2DTD语法:</h3>  <p>  1.约束标签<br> 语法:</p>  <pre class="brush:xml;"><code> <!ELEMENT 元素名称 类别>  或 <!ELEMENT 元素名称 (元素内容)></code></pre>   类别:<br>  空标签: EMPTY。 表示元素一定是空元素.例如:<bb/>:<!--ELEMENT bb EMPTY--><br>  普通字符串: (#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。例如:<!--ELEMENT to (#PCDATA)--><br>  <p>任何内容: ANY。表示元素的内容可以是任意内容(包括子标签) 例如:<!--ELEMENT note ANY--></p>

元素内容:

<code>顺序问题:  <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签     次数问题:  标签  :  必须且只出现1次。  标签+ : 至少出现1次  标签*  : 0或n次。  标签? : 0 或1次。  声明"非.../既..."类型的内容</code>
<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的详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:xml,文件操作功能类的示例代码详解

相关资讯