一脚踩进java之xml04——约束之schema

一、XML Schema 简介

1.1 XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性
1.2 XML Schema VS DTD:
  1)XML Schema符合XML语法结构。
  2)DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
  3)ML Schema对名称空间支持得非常好。
  4)XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
  5)XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
  6)XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。

1.3 XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。 XML Schema规定XML文档实例的结构和每个元素/属性的数据类型
1.4 Schema相对于DTD的明显好处是,XML Schema文档本身也是XML文档,而不是像DTD一样使用自成一体的语法

二、Schema一些概念

2.1 XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd
2.2 和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema
2.3 应用schema约束 开发xml 过程

 

 2.4 编写了一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,这个URI地址叫namespace名称空间,以后XML文件就可以通过这个URI(即名称空间)引用绑定指定名称空间的元素

三、Schema入门案例

3.1 book.xsd文件

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                      targetNamespace="http://www.itcast.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:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

3.2 book.xml

<?xml version="1.0" encoding="UTF-8"?>

<itcast:书架 xmlns:itcast="http://www.itcast.cn"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation=“http://www.itcast.cn book.xsd">

    <itcast:>
        <itcast:书名>九阴真经</itcast:书名>
        <itcast:作者>郭靖</itcast:作者>
        <itcast:售价>28.00元</itcast:售价>
    </itcast:书>
</itcast:书架>

3.3 在XML Schema文档中声明名称空间

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
               targetNamespace="http://www. itcast.cn"
               elementFormDefault="qualified"
               attributeFormDefault="qualified"
>
<xs:schema>

  1)targetNamespace元素用于指定schema文档中声明的元素属于哪个名称空间。
  2)elementFormDefault元素用于指定局部元素是否受到该schema指定targetNamespace所指定的名称空间限定
  3)attributeFormDefault元素用于指定局部属性是否受到该schema指定targetNamespace所指定的名称空间限定

3.4 使用名称空间引入Schema 

  1)为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定,例如:

    <itcast:书架 xmlns:itcast="http://www.itcast.cn"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation=“http://www.itcast.cn book.xsd">

  2)schemaLocation此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置,两者之间用空格分隔。
  3)注意,在使用schemaLocation属性时,也需要指定该属性来自哪里。

3.5 使用默认名称空间 

  1)基本格式:
    xmlns="URI" 
  2)举例:

    <书架 xmlns=" http://www.itcast.cn"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation=“http://www.itcast.cn book.xsd">
        <>
        <书名>JavaScript网页开发</书名>
        <作者>张孝祥</作者>
        <售价>28.00元</售价>
        </>
    <书架>

3.6 使用名称空间引入多个XML Schema文档 

文件清单:xmlbook.xml

<?xml version="1.0" encoding="UTF-8"?>

<书架 xmlns="http://www.it315.org/xmlbook/schema" 
    xmlns:demo="http://www.it315.org/demo/schema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.it315.org/xmlbook/schema                 http://www.it315.org/xml/book.xsd 
        http://www.it315.org/demo/schema http://www.it315.org/demo.xsd">
    <>
        <书名>JavaScript网页开发</书名>
        <作者>张孝祥</作者>
        <售价 demo:币种=”人民币”>28.00元</售价>
    </书>
</书架>

3.7 Schema元素:简单类型和复杂类型

1)XML Schema规范中将元素分为两种类型
  ①简单类型元素:简单类型元素只能包含字符内容。这些字符可以被约束为特殊的预定义类型或派生类型。例如,可以指定一个简单元素的内容必须是日期、整数、字符串或者仅仅是一个字符或者一系列字符。type属性
  ②复杂类型元素:复杂类型元素是包含子元素内容或者属性的元素
  <complexType> <sequence> 子元素

四、参看w3c文档

  

  

原文地址:https://www.cnblogs.com/smilehq/p/12599269.html