欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

10.xml约束--DTD约束+Schema约束

程序员文章站 2022-03-13 08:09:47
1.引入XML语法: 规范的xml文件的基本编写规则。(由w3c组织制定的)XML约束: 规范XML文件数据内容格式的编写规则。(由开发者自行定义)2.技术DTD约束:语法相对简单,功能也相对简单。学习成本也低。Schema约束:语法相对复杂,功能也相对强大。学习成本相对高!!!(名称空间)3.DTD约束(html.chm中有详细介绍,这里是常用的)1.内部导入

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.w3.org/2001/XMLSchema-instance"
				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.w3.org/2001/XMLSchema"
					  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>

 

 

本文地址:https://blog.csdn.net/yun1996/article/details/107157698