XML约束(详见w3c)
XML约束要求:大家能够看懂约束内容,根据约束内容写出符合规则的xml文件。
引入
XML语法:规范的xml文件的基本编写规则。(由w3c组织制定的)
XML约束:规范XML文件数据内容格式的编写规则。(由开发者自行定义)
XML约束技术
DTD约束(Document Type Definition,全称为文档类型定义。):语法相对简单,功能也相对简单。学习成本也低。
Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!!!(名称空间)
DTD约束
1)导入dtd方式
内部导入
<!DOCTYPE note [
]> |
外部导入分2种
本地文件系统:
(当引用的文件在本地时,采用如下方式:)
<!DOCTYPE note SYSTEM "note.dtd"> |
公共的外部导入(当引用的文件是一个公共的文件时,采用如下方式:)
<!DOCTYPE 根元素 PUBLIC "http://www.baidu.com/baidu.dtd "> |
2)DTD语法
①约束标签
<!ELEMENT 元素名称 类别> 或 <!ELEMENT 元素名称 (元素内容)>
类别: 如为元素类型,则直接书写
空标签: EMPTY。 表示元素一定是空元素。
普通字符串:(#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。
任何内容: ANY。表示元素的内容可以是任意内容(包括子标签)
(元素内容): 如为元素内容:则需要使用()括起来
顺序问题:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>:用逗号分隔,表示内容的出现顺序必须与声明时一致。
例如:<!ELEMENT note (to,from,heading,body,br,ren,chy, phone)>
<!ELEMENT 元素名称 (子元素名称 1|子元素名称 2|....)>:用|分隔,表示任选其一,即多个只能出现一个
例如:<!ELEMENT note (to|from)>
次数问题:
标签 : 必须且只出现1次。
标签+ :至少出现1次
标签* : 0或多次。
标签? : 0 或1次。
也可使用圆括号( )批量设置
例如: <!ELEMENT note (to+,from?,heading,body,br*,(ren,chy, phone)*)>
注意:圆括号()里面的标签应该当做一个整体出现,次序应该保持不变。
② 约束属性
<!ATTLIST 元素名称 属性名称 属性值类型 默认值>
或者
<!ATTLIST 元素名
属性名1 属性值类型 默认值
属性名2 属性值类型 默认值
……
>
默认值:
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED "value" 属性不是必须的,但属性值value是固定的
默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。
例如:<!ATTLIST name attr CDATA "默认属性值">
属性值类型:控制属性值的
CDATA :表示普通字符串
(en1|en2|..):表示一定是任选其中的一个值,此值是枚举列表中的一个值
ID:表示在一个xml文档中该属性值必须唯一。ID 属性的值只能由字母、下划线开始,不能以数字开头,ID属性值中间不能出现空白字符
ENTITY:值是一个实体。实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
引用实体主要在XML文档中被引用, 例如:
<!ENTITY myentity "这是一个实体内容">
<name>&myentity;</name>
note.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 外部引用:公共的外部导入(来自网络),注意PUBLIC需要大写,否则无效
<!DOCTYPE note PUBLIC "http://www.baidu.com/baidu.dtd">
-->
<!-- 外部引用:本地文件系统 ,注意SYSTEM需要大写,否则无效 -->
<!DOCTYPE note SYSTEM "note.dtd">
<!-- 内部引用
<!DOCTYPE note [
<!ELEMENT note (to+,from?,heading,body,br*,ren,chy, phone)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ELEMENT br EMPTY>
<!ELEMENT ren (hh)>
<!ATTLIST chy name CDATA #IMPLIED>
<!ATTLIST note id ID #REQUIRED>
<!ATTLIST to id ID #REQUIRED>
<!ATTLIST from age CDATA #FIXED "18">
<!ATTLIST br name (br1|br2) #REQUIRED>
]>
-->
<note id="id0">
<to id="id1">George</to>
<to id="id2">George</to>
<to id="id3">George</to>
<to id="id4">George</to>
<from age="18">John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
<br name="br1"/>
<br name="br2"/>
<ren><hh>任何内容</hh></ren>
<chy name=""></chy>
<phone sex=""></phone>
</note>
<!ELEMENT note (to+,from?,heading,body,br*,ren,chy, phone)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ELEMENT br EMPTY>
<!ELEMENT ren (hh)>
<!ATTLIST chy name CDATA #IMPLIED>
<!ATTLIST note id ID #REQUIRED>
<!ATTLIST to id ID #REQUIRED>
<!ATTLIST from age CDATA #FIXED "18">
<!ATTLIST br name (br1|br2) #REQUIRED>