xml约束技术之dtd
发布时间:2020-12-16 08:51:14 所属栏目:百科 来源:网络整理
导读:DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。这篇文章作简单介绍下DTD的用法。想学习完整的请点击下面w3c的教程。 1.DTD官方教程 ##2.xml约束技术: DTD约束:语法相对简单,功能也相对简单。先出现 Schema约束:语法相对复杂,功能也相对强大
1.DTD官方教程##2.xml约束技术: 3.DTD简介:文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。 3.1导入DTD的方式:1.内部导入: #导入方式:
<!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>
2.外部导入方式: #导入方式:
<!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)>
公共的外部导入:一般项目采用公共外部导入,比如ssh的xml文件基本上就是采用了这种方式 #导入方式:
<!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">
3.2DTD语法:1.约束标签 <!ELEMENT 元素名称 类别> 或 <!ELEMENT 元素名称 (元素内容)>
类别: 顺序问题:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签
次数问题:
标签 : 必须且只出现1次。
标签+ : 至少出现1次
标签* : 0或n次。
标签? : 0 或1次。
声明"非.../既..."类型的内容
2.约束属性: <!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型: CDATA :表示普通字符串
(en1|en2|..): 表示一定是任选其中的一个值
ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
默认值: #REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性不是必须的,但属性值是固定的
3.3测试如下,请细看注释:<?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>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |