WebService学习笔记(二) - XML的dtd和schema

来源:互联网 发布:淘宝消字灵是真的么 编辑:程序博客网 时间:2024/06/07 19:42

一 DTD简单介绍

不解释,参看w3cschool

xml代码:

<?xml version="1.0" encoding="UTF-8"?><!ELEMENT classroom (claName,grade,students)><!ATTLIST classroom id ID #REQUIRED><!ELEMENT claName (#PCDATA)><!ELEMENT grade (#PCDATA)><!ELEMENT students (student+)><!ELEMENT student (id,stuName,age)><!ELEMENT id (#PCDATA)><!ELEMENT stuName (#PCDATA)><!ELEMENT age (#PCDATA)>

xml代码:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE classroom SYSTEM "classroom.dtd"><classroom id="c1">    <claName>10计算机应用技术</claName>    <grade>2010</grade>    <students>        <student>            <id>1</id>            <stuName>zhangsan</stuName>            <age>12</age>        </student>        <student>            <id>2</id>            <stuName>lisi</stuName>            <age>122</age>        </student>    </students></classroom>

二 schema入门

schema出现的目的是通过一个更加合理的方式来编写xml的限制文件(基于xml语法的方式),可以使用命名空间来支持多个名称相同的元素防止命名冲突,可以很好的完成对java或者所有对象的修饰并且提供了大量的数据类型。

2.1 命名空间

xml代码:

<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema"         targetNamespace="http://www.example.org/01"        xmlns:tns="http://www.example.org/01"         elementFormDefault="qualified">    <element name="user">        <complexType>            <sequence>                <element name="id" type="int"/>                <element name="username" type="string"/>                <element name="born" type="date"/>            </sequence>        </complexType>    </element></schema>

xmlns=”http://www.w3.org/2001/XMLSchema” : schema的默认名称空间,不能修改,但是可以增加前缀,如果增加前缀之后就意味着所有的element等元素都需要增加前缀。
targetNamespace 自已这个文档的命名空间,可以方便其它xml或者schema文件引用
xmlns:tns 此处的名称和自己的名称空间的名称一致,但是增加了tns的前缀,此时如果要引用当前文件所创建的类型,需要加上tns前缀

在xml中引入schame

xml代码:

<?xml version="1.0" encoding="UTF-8"?><user xmlns="http://www.example.org/01"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xsi:schemaLocation="http://www.example.org/01">    <id>1</id>    <username>zhangsan</username>    <born>1989-12-22</born></user>

xmlns:xsi 创建了一个可以引入其它schema文件的命名空间
xsi:schemaLocation 引入其它命名空间, 如果要在eclipse中使用命名空间的引入,需要为xml增加xml的cataloge

如果不希望通过命名空间来引入schema,可以使用文件路径来引入

xml代码:

xsi:noNamespaceSchemaLocation="01.xsd"

2.2 元素和属性

sequence : 元素必须按顺序出现

choice : 多个元素中选择一个

all: 元素的出现顺序可以为任意,但相同的元素只能有一个

注意,属性的定义在sequence之后。

xml代码:

    <element name="books">        <complexType>        <!-- maxOccurs表示最大出现次数 -->            <sequence maxOccurs="unbounded">                <element name="book">                    <complexType>                        <sequence minOccurs="1" maxOccurs="unbounded">                            <element name="title" type="string" />                            <element name="content" type="string" />                            <choice>                                <element name="author" type="string" />                                <element name="authors">                                    <complexType>                                        <all><!-- 每个元素只能出现一次 -->                                            <element name="author" type="string"/>                                        </all>                                    </complexType>                                </element>                            </choice>                        </sequence>                        <attribute name="id" type="int" use="required"/>                    </complexType>                </element>            </sequence>        </complexType>    </element>

2.3 相关约束

三 深入schema

3.1 数据模型的创建

通常一个类对一个schame文件,通过包含引用,需保证在同一个命名空间内

3.2 相关的设计方案

3.2.1 Russian Doll

只有一个根元素,通过嵌套的方式完成编写
优点:结构清晰,根元素只有一个
缺点:元素无法重用

3.2.2 Salami Slice

优点:能够进行最大化重用
缺点:根元素不清晰

xml代码:

    <element name="book" type="tns:bookType"></element>    <element name="id" type="int"/>    <element name="title" type="string"/>    <element name="content" type="string"/>    <complexType name="bookType">        <sequence>            <element ref="tns:id"/>            <element ref="tns:title"/>            <element ref="tns:content"/>        </sequence>    </complexType>

3.2.3 Venetian Blind

一个根结点,通过simpleType完成重用。

xml代码:

    <element name="person" type="tns:personType"/>    <complexType name="personType">        <sequence>            <element name="name" type="string"/>            <element name="age" type="tns:ageType"/>            <element name="email" type="tns:emailType"/>        </sequence>        <attribute name="sex" type="tns:sexType"/>    </complexType>    <simpleType name="emailType">        <restriction base="string">            <pattern value="(\w+\.*)*\w+@\w+\.[A-Za-z]{2,6}"/>            <minLength value="6"/>            <maxLength value="255"/>        </restriction>    </simpleType>    <simpleType name="ageType">        <restriction base="int">            <minInclusive value="1"/>            <maxExclusive value="150"/>        </restriction>    </simpleType>    <simpleType name="sexType">        <restriction base="string">            <enumeration value="男"/>            <enumeration value="女"/>        </restriction>    </simpleType>

3.3 shema与java的转换

使用xjc可以完成schema到java的转换

0 0
原创粉丝点击