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这个命名空间下有许多版本:

猜你喜欢

转载自blog.csdn.net/hong10086/article/details/83538244
今日推荐