2.XML约束:
2.1 引入
XML语法:规范的XML文件的基本编写规则。(有w3c组织制定的)
XML约束:规范XML文件数据内容格式的编写规则。(由开发者自定义)
2.2 XML约束的技术
DTD约束:语法相对简单,功能相对简单,学习成本相对低
Schema约束:语法相对复杂,功能相对复杂,学习成本相对高(名称空间)
2.3 DTD约束
1)导入DTD方式
a) 内部导入
<?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>
b) 外部导入
i. 本地文件系统:
<!DOCTYPE note SYSTEM "note.dtd">
ii. 公共的外部导入:
<!DOCTYPE note PUBLIC "文件名">//文件名一般是在互联网上的如:”http://gz.itcast.dtd”
2)DTD语法:
约束标签
<!ELEMENT 元素名称 类别> 或<!ELEMENT 元素名称 (元素内容)>
类别:
空标签:EMPTY,表示元素一定是空元素。<!ELEMENT 元素名称 EMPTY>
普通字符串:(#PCDATA),表示元素内容一定是普通字符串(不能包含子标签)
任何内容:ANY,表示元素的内容可以是任意内容(包含子标签)
(元素内容):
顺序问题:
<!ELEMENT 元素名称 (子元素名称1,子元素名称2,...)>:按顺序出现子标签
次数问题:
标签:必须且只出现一次
标签+:表示至少出现一次
标签*:表示0次或多次
标签?:表示0次或1次
约束属性:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
默认值:
#REQUIRED 属性值是必须的
#IMPLIED 属性不是必须的
#FIXED value 属性值是固定的
属性类型:
CDATA:表示普通字符串
(en1|en2|...):表示任选其中的一个值
ID:表示在一个XML文档中该属性值必须唯一,值不能以数字开头
约束文件:note.dtd
<!ELEMENT note (to?,from*,heading+,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ATTLIST to name CDATA #REQUIRED><!--设置标签to必须要有name属性-->
<!ATTLIST from name CDATA #IMPLIED><!--设置标签from标签有name属性,但是非必须的-->
<!ATTLIST heading name CDATA #FIXED "标题"><!--设置标签heading标签有name属性,但是是非必须的,但如果写了,其值必须是固定的-->
根据约束文件写的XML文件:note.html
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to name="abc">Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>