schema规范中:
- 所有的标签和属性都要有schema文件来定义
- 所有的schema文件都要有一个id,即namespace
- namespace的值由targetNamespace属性来决定,是一个url(很可能不存在)
- 如何引入一个schema:xmlns="(namespace值)"
- 如果引入的schema不是w3c组织定义,必须指定schema文件位置
- schema文件在什么位置由schemaLocation属性决定:schemaLocation="(namespace + 文件位置)"
- 如果引入了n个约束,至少要给n-1个取别名
定义schema:book.xsd
<xml version="1.0" encoding="UTF-8">
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wangteng.com/bookSchema"
elementDefault="qualified"
>
<elemment name="书架">
<complexType>
<sequence maxOccurs="unbounded">
<element name="书">
<complexType>
<sequence maxOccurs="unbounded">
<element name="书名" type="string" />
<element name="作者" type="string" />
<element name="定价" type="string" />
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
引入定义的schema:
<xml version="1.0" encoding="UTF-8">
<书架 xmlns="http://www.wangteng.com/bookSchema"
xmlns:wang="http://www.w3.org/2001/XMLSchema-instance"
wang:schemaLocation="http://www.wangteng.com/bookSchema book.xsd"
>
<书>
<书名>托勒密门扉<书名>
<作者>(英)乔纳森·史特劳 <作者>
<定价>32.80<定价>
</书>
</书架>
取别名:schemaLocation
属性由 "http://www.w3.org/2001/XMLSchema-instance"
这个约束文档来定义,所以要引入 xmlns="http://www.w3.org/2001/XMLSchema-instance"
,因为这个引入要区别于别的引入,所以起别名xmlns:wang="http://www.w3.org/2001/XMLSchema-instance"
,因为定义schemaLocation
属性的文档起了别名,所以schemaLocation也要带上别名wang:schemaLocation=
。
如果xmlns="http://www.wangteng.com/bookSchema"
起别名改为 xmlns:teng="http://www.wangteng.com/bookSchema"
,那么由"http://www.wangteng.com/bookSchema"
所定义的标签也要加上别名,如<书架>
改为 <teng:书架>
,<书>
改为 <teng:书>
几个重要属性:
-
namespace
:相当于schema文件的id -
targetNamespace
:用来指定schema文件的namespace的值 -
xmlns
:引入一个约束,它的值是一个schema文件的namespace值 -
schemaLocation
:用来指定引入的schema文件的位置