文章目录
- **7** **Schema约束(能够看懂即可)**
- **1** **书写schema约束**
- **2** **在xml文件中引入schema约束**
7 Schema约束(能够看懂即可)
与dtd约束一样,schema它也是用来约束xml文件的。schema约束书写的时候,它遵守xml的语法规则。在书写schema的时候,就和书写xml文件的文档结构一样。
注意:书写schema文件的时候,它的文件扩展名是xsd。
1 书写schema约束
1、首先创建一个xml文件。然后根据xml文件书写符合规范的schema约束。
创建books.xml文件:
代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>面试宝典</name>
<author>锁哥</author>
<price>78.8</price>
</book>
<book>
<name>java从入门到精通</name>
<author>黑旋风</author>
<price>88.8</price>
</book>
</books>
2、接下来我们需要创建一个schema文件:
步骤:
第一步:首先进入文件创建窗口,选中工程鼠标右击,new–>File,然后进入如下页面:
第二步:输入创建的文件的名称和schema文件的后缀名xsd;
第三步:因为schema约束文件本身就是xml,所以声明xml文件的头适用于schema约束的文件。
第四步:将如下的内容复制到上述已经创建好的books.xsd中。然后我们就可以书写schema约束了。
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/books"
elementFormDefault="qualified">
</schema>
说明:
1)schema约束的结构和xml文件书写规范是一样的,<?xml version="1.0" encoding="UTF-8"?>表示对xml的声明,是根标签;
2)xmlns=“http://www.w3.org/2001/XMLSchema” 表示此schema文件受到w3组织的指定的约束;
3)targetNamespace=“http://www.example.org/books”,叫做名称空间,这个相当于java中包的作用,区分不同约束中的不同标签。当需要被当前这个schema文件约束的xml文件,需要通过当前这个名字引入当前schema文件。
4)elementFormDefault=“qualified”,如果值为qualified,那么当前schema中所有的标签默认都是放在名称空间中的。如果值为unqualified,那么除了schema中的根标签在名称空间即 http://www.example.org/books 包中,其他的标签都不会在这个包中。在开发中,我们都是书写默认值qualified。
上述了解完成之后,接下来我们读一下一个完整的schema约束:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/books"
elementFormDefault="qualified">
<!-- 在此处书写schema约束语法 -->
<element name="books">
<complexType><!-- 声明books是复杂标签 -->
<sequence><!-- 通过sequence标签指定子标签的顺序 -->
<element name="book" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="author" type="string"></element>
<element name="price" type="double"></element>
</sequence>
<attribute name="address"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
说明:
1.xml中出现的标签需要使用这样的语法来定义。即先清楚xml中需要多少个标签,在Schema文件中就书写多少个element标签。
所以xml中第一个出现的books标签需要使用来声明。
element标签中的 name属性 就是xml中 可以书写的标签的名字。
2.为了方便schema约束的书写,我们将xml中的标签简单的分为2大类:
a) 简单标签 : 标签中只有文本数据;
b) 复杂标签:标签中有子标签或者属性加上文本数据;
在element标签中需要使用complexType声明当前的element标签name属性指定的是一个复杂标签。
如果是简单标签可以使用simpleType。
3.上述在books.xml文件中我们发现books标签是复杂标签,针对复杂标签,需要在当前的标签中书写子标签来限制当前复杂标签中的其他内容。
所以我们需要使用标签来声明books标签是一个复杂标签。并且针对复杂标签中出现的子标签,我们需要使用标签来声明子标签出现的顺序。
A)books标签中出现的子标签是book,由于book也是一个标签,所以我们也需要使用标签来声明xml中的book;
B)并且book标签也是一个复杂标签,所以我们需要使用标签来声明;
C)book标签中也有子标签,所以还需要使用来声明子标签的顺序;
D)最后发现book标签在books.xml出现了多次,所以需要给加上maxOccurs="unbounded"属性。表示book标签可以出现很多次。(没有次数的限制)
大于等于1次
5.最后在里面写上book标签中出现的3个name,author,price子标签的声明。并且针对book标签中出现的属性。我们需要使用
这样的语法来声明。注意标签的位置。
在books.xml文件中增加一个address属性:
所以在books.xsd即schema约束中添加一个属性。注意标签的位置。
2 在xml文件中引入schema约束
在books.xml文件中引入schema约束的步骤:
第一步:首先鼠标放在根标签books后面,打个空格,然后将如下内容复制到books后面
代码如下:
<books xmlns="default namespace"
xsi:schemaLocation="{namespace} {location}"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
然后引入schema约束的图解
最终完整代码:
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns="http://www.example.org/books"
xsi:schemaLocation="http://www.example.org/books books.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<book address="藏经阁">
<name>面试宝典</name>
<author>锁哥</author>
<price>78.8</price>
</book>
<book>
<name>java从入门到精通</name>
<author>黑旋风</author>
<price>88.8</price>
</book>
</books>
说明:
1)xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”,表示当前xml文件是一个受schema约束的实例,这里不需要改变;
2)xmlns=“http://www.example.org/books”,schema约束文件中的targetNamespace的值,表示在books.xml文件中引入名称空间;
3)xsi:schemaLocation=“http://www.example.org/books books.xsd”,
schema约束文件中的targetNamespace的值 schema约束文件的路径