Schema基础

来源:互联网 发布:java大括号转义字符 编辑:程序博客网 时间:2024/04/30 13:10
 

1. Schema入门案例

<?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>

先解释文档内容,在解释schema名字空间

targetNamespace="http://www. itcast.cn" elementFormDefault="qualified">

将本文档中所有的标签全部都绑定到目标名字空间"http://www. itcast.cn"

<?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:书名>JavaScript网页开发</itcast:书名>

<itcast:作者>张孝祥</itcast:作者>

<itcast:售价>28.00</itcast:售价>

</itcast:>

</itcast:书架>

        itcast : 解释书架来自itcast,那么itcast来自哪里呢

        itcast来自于: xmlns:itcast=”http://www.itcast.cn”

xmlns:名字空间

http://www.itcast.cn在这里只是一个绑定的名字而已,并不是具体指某个网址,那么http://www.itcast.cn到底绑定了些什么呢?

         xsi:schemaLocation=http://www.itcast.cn   book.xsd"

在这里使用schemaLocation属性明确的说明了是book.xsd这个约束文件绑定到了http://www.itcast.cn这个名字空间上。但是schemaLoaction又是来自哪里呢,它的前缀是xsi,那么xsi又是代表什么样的一个东西呢?

       xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

在这里有声明了一个名字空间,而且xsi就是它的前缀,也就是说上一步中schemaLocation这个属性是来自于绑定到这个名字空间的约束文件的。

那么这里有需要进一步考虑,绑定在这个名字空间的文件到底是谁呢,是不是也需要象刚刚的book.xsd一样用schemaLocation属性来声明呢?答案是不需要,因为这个名字空间来自于schema标准的制定者,可以简单的理解为它是总所周知的,不需要在明确指定了。

2. 使用默认名称空间 

基本格式: xmlns="URI"  

一般声明名字空间格式为:xmlns:class3g = “URI” ,但此时不会指定前缀

         举例:

<书架 xmlns="http://www.class3g.org/xmlbook/schema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=http://www.class3g.cn  book.xsd">

<>

<书名>JavaScript网页开发</书名>

<作者>张孝祥</作者>

<售价>28.00</售价>

</>

</书架>

如果不适用默认名字空间应为

<class3g:书架 xmlns:class3g="http://www.class3g.org/xmlbook/schema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=http://www.class3g.cn  book.xsd">

< class3g:>

< class3g:书名>JavaScript网页开发</ class3g:书名>

< class3g:作者>张孝祥</ class3g:作者>

< class3g:售价>28.00</ class3g:售价>

</ class3g:>

</ class3g:书架>

3. 使用名称空间引入多个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/xmlbook.xsd 

http://www.it315.org/demo/schema http://www.it315.org/demo.xsd">

<>

<书名>JavaScript网页开发</书名>

<作者>张孝祥</作者>

<售价 demo:币种=”人民币”>28.00</售价>

</>

</书架>

此文档中同时引入了三个约束文档,

一个默认的名字空间:xmlns="http://www.it315.org/xmlbook/schema

一个叫demo的名字空间:xmlns:demo=http://www.it315.org/demo/schema

一个著名的名字空间:xsi:schemaLocation="http://www.it315.org/xmlbook/schema

著名的名字空间xsi不需要指定绑定的约束文件,所以schemaLocation属性中只需声明两外两个约束文件即可:

xsi:schemaLocation="http://www.it315.org/xmlbook/schema  http://www.it315.org/xmlbook.xsd 

http://www.it315.org/demo/schema http://www.it315.org/demo.xsd"

另外在 

<售价 demo:币种=”人民币”>28.00</售价>

其中“售价”这个标签来自于默认名字空间xmlns="http://www.it315.org/xmlbook/schema

而属性“币种”却来自于demoxmlns:demo=http://www.it315.org/demo/schema

4. 不使用名称空间引入XML Schema文档 

文件清单:xmlbook.xml

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

<书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="xmlbook.xsd">

<>

<书名>JavaScript网页开发</书名>

<作者>张孝祥</作者>

<售价>28.00</售价>

</>

</书架>

其中各标签并没有声明源自于那个名字空间,也没有定义默认名字空间,而是使用属性xsi:noNamespaceSchemaLocation="xmlbook.xsd" 直接声明这些标签不使用名字空间,而且直接受到xmlbook.xsd文件的约束

这种声明了解即可,一般不用。

Schema使用案例

打开tomcatweb.xml文件,分析器名字空间声明。

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

    version="2.5">

XSD 简单元素

XSD 属性

<xs:attribute name="lang" type="xs:string"/>不需要特别声明属性是谁的,因为会被嵌套在属性所有者的标签内部。

XSD类型指示器

案例:

分析xsd文件,写出xml

shipOrder.xsd

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">

 <xs:complexType>

  <xs:sequence>

   <xs:element name="orderperson" type="xs:string"/>

   <xs:element name="shipto">

    <xs:complexType>

     <xs:sequence>

      <xs:element name="name" type="xs:string"/>

      <xs:element name="address" type="xs:string"/>

      <xs:element name="city" type="xs:string"/>

      <xs:element name="country" type="xs:string"/>

     </xs:sequence>

    </xs:complexType>

   </xs:element>

   <xs:element name="item" maxOccurs="unbounded">

    <xs:complexType>

     <xs:sequence>

      <xs:element name="title" type="xs:string"/>

      <xs:element name="note" type="xs:string" minOccurs="0"/>

      <xs:element name="quantity" type="xs:positiveInteger"/>

      <xs:element name="price" type="xs:decimal"/>

     </xs:sequence>

    </xs:complexType>

   </xs:element>

  </xs:sequence>

  <xs:attribute name="orderid" type="xs:string" use="required"/>

 </xs:complexType>

</xs:element>

</xs:schema>

 

shipOrder.xml

 

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

<shiporder xmlns="http://www.class3g.com" 

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://www.class3g.com shipOrder.xsd" 

         orderid="3">

         

<orderperson>Tom</orderperson>

<shipto>

<name>xxx</name>

<address>asdff.asdf</address>

<city>pk</city>

<country>jap</country>

</shipto>

<item>

<title>asd </title>

<note>ssssssss</note>

<quantity>3</quantity>

<price>20.3</price>

</item>

</shiporder>

 

原创粉丝点击