1.引入
XML语法: 规范的xml文件的基本编写规则。(由w3c组织制定的)
XML约束: 规范XML文件数据内容格式的编写规则。(由开发者自行定义)
2.技术
DTD约束:语法相对简单,功能也相对简单。学习成本也低。
Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!!!(名称空间)
3.DTD约束(html.chm中有详细介绍,这里是常用的)
1.内部导入
<?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></to>
<from>Reminder</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
2.外部文件导入,本地文件
<!DOCTYPE xml文件的根标签? SYSTEM "dtd文件">
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to id="a1"></to>
<to id="a2"></to>
<to id="a3"></to>
<heading>Reminder</heading>
<heading>Reminder</heading>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
<body>Don't forget me this weekend</body>
<body>Don't forget me this weekend</body>
</note>
note.dtd 文件内容
<!ELEMENT note (from?,to+,heading*,body+)>
<!ELEMENT to EMPTY>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ATTLIST to id ID #REQUIRED>
3. 公共外部导入
<!DOCTYPE 根元素 PUBLIC "http://gz.itcast.cn/itcast.dtd">
3.1.DTD语法
3.1.1.约束标签
??<!ELEMENT 元素名称 类别>? 或 <!ELEMENT 元素名称 (元素内容)>
? (1)类别:
? ? ?空标签: EMPTY。 表示元素一定是空元素。
? ? ?普通字符串: (#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。
? ? 任何内容: ANY。表示元素的内容可以是任意内容(包括子标签)
(2)(元素内容):
? ? ?顺序问题:
?<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签
?(3)次数问题:
? ? ?标签?? :? 必须且只出现1次。
? ? ?标签+? : 至少出现1次
? ? ?标签*?? : 0或n次。
? ? ?标签?? : 0 或1次。
3.1.2.约束属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
? ? ? ? ? ? (1)默认值:
????????????????????#REQUIRED 属性值是必需的
? ? ? ? ? ? ? ? ? ? #IMPLIED?? 属性不是必需的
? ? ? ? ? ? ? ? ? ? #FIXED value 属性不是必须的,但属性值是固定的
? ? ? ? ? ? (2)属性类型:控制属性值的
? ? ? ? ? ? ? ? ? ? ? CDATA :表示普通字符串
? ? ? ? ? ? ? ? ? ? ? (en1|en2|..): 表示一定是任选其中的一个值
? ? ? ? ? ? ? ? ? ? ? ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
note.xml
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to id="a1"></to>
<to id="a2"></to>
<to id="a3"></to>
<heading>Reminder</heading>
<heading>Reminder</heading>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
<body>Don't forget me this weekend</body>
<body>Don't forget me this weekend</body>
</note>
note.dtd
<!ELEMENT note (from?,to+,heading*,body+)>
<!ELEMENT to EMPTY>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ATTLIST to id ID #REQUIRED>
4.Schema约束
名称空间:告诉xml文档的哪个元素被哪个schema文档约束。 在一个xml文档中,不同的标签可以受到不同的schema文档的约束。
?1)一个名称空间受到schema文档约束的情况
? 2)多个名称空间受到多个schema文档约束的情况
? 3)默认名称空间的情况
? 4)没有名称空间的情况
Schema文件的后缀名是.xsd
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<xiaolan:书架 xmlns:xiaolan="http://www.xiaolan.cn"
xmlns:xsi="http://www.51sjk.com/Upload/Articles/1/0/263/263365_20210708000333617.jpg"
xsi:schemaLocation="http://www.xiaolan.cn book.xsd"> 名称空间别名对应的约束文件 book.xsd 这个是固定格式 名称空间别名(空格)文件
<!--1.xml定义了一个名为xiaolan的名称空间,别名为http://www.xiaolan.cn
2.书架标签引用了xiaolan名称的名称空间
3.别名为http://www.xiaolan.cn的schema文件在当前目录的book.xsd
-->
<xiaolan:书架>
<xiaolan:书名>JavaScript网页开发</xiaolan:书名>
<xiaolan:作者>张孝祥</xiaolan:作者>
<xiaolan:售价>28</xiaolan:售价>
</xiaolan:书>
</xiaolan:书架>
.xsd文件
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.51sjk.com/Upload/Articles/1/0/263/263365_20210708000333679.jpg"
targetNamespace="http://www.xiaolan.cn"
elementFormDefault="qualified">
<xs:element name='书架' >
<xs:complexType>
<xs:sequence maxOccurs='unbounded' >
<xs:element name='书' >
<xs:complexType>
<xs:sequence>
<xs:element name='书名' type='xs:string' />
<xs:element name='作者' type='xs:string' />
<xs:element name='售价' type='xs:integer' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
?
?