XML Schema 简介
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文档的结构。
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
XML Schema对比DTD优势:
XML Schema 可针对未来的需求进行扩展
XML Schema 更完善,功能更强大
XML Schema 基于 XML 编写
XML Schema 支持数据类型
XML Schema 支持命名空间
myNamespace1.xsd:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://123.123.123"
elementFormDefault="qualified">
<xs:element name="myNode">
<xs:complexType>
<xs:sequence>
<xs:element name="myHead" type="xs:string"/>
<xs:element name="myBody" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
片断1:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns是xml namespace 的缩写。表示引入了一个命名空间(类似于java语言的import,c语言的include),引入了命名空间就是引入一个规范,比如:xs:schema不能写成xs:schema1 ,并为这个命名空间起一个别名为:xs,使用来自该命名空间的元素和数据类型应该使用前缀 xs。
因此:xs:schema、xs:element、xs:complexType、xs:sequence、xs:string都是来自http://www.w3.org/2001/XMLSchema。
片断2:
targetNamespace="http://123.123.123"
通过xmlns可以引入其他人写的命名空间。如果我们也想写一个命名空间,也想被别人引入,首先要为我们的命名空间起个名子,http://123.123.123 就是该命名空间的名子。
myNode、myHead和myBody就是http://123.123.123命名空间下的元素。
片断3:
elementFormDefault="qualified"
指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
myNamespace1.xsd 命名空间已经准备好,现在开始使用它。
use.xsd:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<myNode xmlns="http://123.123.123">
<myHead>wer</myHead>
<myBody>tuyigj</myBody>
</myNode>
片断1:
xmlns="http://123.123.123"
xmlns表示引入命名空间http://123.123.123 ,但是没有起别名,这就是默认的命名空间,默认的命名空间最多只能有一个。myNode、myHead和myBody在使用时都不要加前缀。
一年以后……
myNamespace1.xsd已经不能满我们的要求,需要对myNamespace1.xsd进行修改,但是myNamespace1.xsd已经被10万家公司引用。
新版myNamespace2.xsd:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://123.123.123"
elementFormDefault="qualified">
<xs:element name="myNode">
<xs:complexType>
<xs:sequence>
<xs:element name="myHead" type="xs:string"/>
<xs:element name="myBody" type="xs:string"/>
<xs:element name="myFoot" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
myNamespace1.xsd和myNamespace2.xsd的命名空间是一样的。
use1.xsd:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<myNode xmlns="http://123.123.123"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://123.123.123 myNamespace2.xsd ">
<myHead>dfd</myHead>
<myBody>df</myBody>
<myFoot>dsfsdf</myFoot>
</myNode>
片断1:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
一旦您拥有了可用的 XML Schema实例命名空间:您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:
xsi:schemaLocation="http://123.123.123 myNamespace2.xsd "
例子:这是java框架springMvc:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
">
</beans>
http://www.springframework.org/schema/beans这个命名空间下有许多版本: