schema的基础:
<?xml version="1.0" encoding="UTF-8"?>
<!--
schema的优点:
1.schema出现的目的是通过一个更加合理的方式来编写xml限制文件(基于xml语法的方式)
2.schema可以使用命名空间来支持多个名称相同的元素
3.schema可以很好的完成对java或者所以对象的修饰并且提供了大量的数据类型
schema元素:
默认的命名空间(没有冒号):xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace:定义当前schema文件的命名空间(其他引入的时候需要引入的值)
也可以在当前schema中引入当前文件的其他元素
tns:指定的命名空间前缀名为tns
例子:
<element name="tt" type="tns:test"></element>
<complexType name="test"></complexType>
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/user" targetNamespace="http://www.example.org/user" 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>
根据user.xsd生成user.xml文件两种引入的方式:
<?xml version="1.0" encoding="UTF-8"?>
<!--
eclipse自动提示:
window-preferrece-xml-xml catalog然后点击add
-->
<user xmlns="http://www.example.org/user"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/user">
<id>1</id>
<username>zhangsan</username>
<born>1988-11-12</born>
</user>
<?xml version="1.0" encoding="UTF-8"?>
<!--
eclipse自动提示:
window-preferrece-xml-xml catalog然后点击add
xsi:noNamespaceSchemaLocation:直接访问xsd文件
-->
<user xmlns="http://www.example.org/user"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="user.xsd">
<id>1</id>
<username>zhangsan</username>
<born>1988-11-12</born>
</user>
三种常用的schema编写格式:
第一种:俄罗斯玩偶方式:
<?xml version="1.0" encoding="UTF-8"?>
<!--
俄罗斯玩偶方式:
结构清晰;但是元素无法重用
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/books" targetNamespace="http://www.example.org/books" elementFormDefault="qualified">
<!--
books是一个负责类型 然后又三个属性:title、content和author
author又是选择属性:选author或者authors
authors是个负责属性:包含author
complexType中三种:sequence、choice、all
sequence:元素必须按顺序出现
choice:多者中选择一个
all:所以相同的元素只能出现一次]
定义负责类型的属性:(在sequence之后进行定义)
attribute
-->
<element name="books">
<complexType>
<sequence minOccurs="1" 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>
<sequence minOccurs="1" maxOccurs="unbounded">
<element name="author" type="string"/>
</sequence>
</complexType>
</element>
</choice>
</sequence>
<attribute name="id" type="int" use="required"/>
</complexType>
</element>
</sequence>
<!-- minOccurs="1"设置最少一次, maxOccurs="unbounded"最多不限制;默认是一次 -->
</complexType>
</element>
</schema>
第一种格式生成文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--
eclipse自动提示:
window-preferrece-xml-xml catalog然后点击add
-->
<books:books xmlns:books="http://www.example.org/books"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/books">
<!-- 元素也是有顺序的 -->
<books:book id="1">
<books:title>java in action</books:title>
<books:content>java is good</books:content>
<books:author>Bruce</books:author>
</books:book>
<books:book id="2">
<books:title>lucence in actioin</books:title>
<books:content>lucence is good</books:content>
<books:authors>
<books:author>Jike</books:author>
<books:author>Mike</books:author>
</books:authors>
</books:book>
</books:books>
第二种:腊肠式方式:
<?xml version="1.0" encoding="UTF-8"?>
<!--
香肠切片方式:
结构不清晰
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/book02" targetNamespace="http://www.example.org/book02" elementFormDefault="qualified">
<element name="book" type="tns:bookType"/>
<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>
</schema>
第二种xml方式:
<?xml version="1.0" encoding="UTF-8"?>
<!--
eclipse自动提示:
window-preferrece-xml-xml catalog然后点击add
-->
<book
xmlns:book="http://www.example.org/book02"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/book02">
<id></id>
<title></title>
<content></content>
</book>
第三者百叶窗式的:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/person" targetNamespace="http://www.example.org/person" elementFormDefault="qualified">
<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="ageType">
<restriction base="int">
<minInclusive value="1"/>
<maxExclusive value="150"/>
<!-- 最小值包含1 -->
<!-- 最大值不包含 -->
</restriction>
</simpleType>
<simpleType name="sexType">
<restriction base="string">
<enumeration value="男"/>
<enumeration value="女"/>
</restriction>
</simpleType>
<simpleType name="emailType">
<restriction base="string">
<minLength value="6"/>
<maxLength value="255"/>
<pattern value="(\w+\.*)*\w+@\w+"/>
</restriction>
</simpleType>
</schema>
第三种的xml生成实例:
<?xml version="1.0" encoding="UTF-8"?>
<!--
eclipse自动提示:
window-preferrece-xml-xml catalog然后点击add
-->
<person:person
xmlns:person="http://www.example.org/person"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/person" sex="男">
<person:name>aa</person:name>
<person:age>12</person:age>
<person:email>sdf@sdf</person:email>
</person:person>
最后的综合测试实例:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/classroom" targetNamespace="http://www.example.org/classroom" elementFormDefault="qualified">
<element name="student" type="tns:studentType"/>
<complexType name="studentType">
<sequence>
<element name="name" type="string"/>
<element name="age" type="tns:ageType"/>
</sequence>
<attribute name="sex" type="tns:sexType"/>
</complexType>
<simpleType name="ageType">
<restriction base="int">
<minInclusive value="1"/>
<maxExclusive value="150"/>
<!-- 最小值包含1 -->
<!-- 最大值不包含 -->
</restriction>
</simpleType>
<simpleType name="sexType">
<restriction base="string">
<enumeration value="男"/>
<enumeration value="女"/>
</restriction>
</simpleType>
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<!--
schema转换java文件
xjc -d d:/java -verbose classroom.xsd
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/classroom" targetNamespace="http://www.example.org/classroom" elementFormDefault="qualified">
<!-- 如果想引人,并且互相调用的话,命名空间要为同样的 -->
<include schemaLocation="student.xsd"/>
<element name="classroom" type="tns:classroomType"/>
<complexType name="classroomType">
<sequence>
<element name="grade" type="tns:gradeType"/>
<element name="name" type="string"/>
<!--
<element name="stus">
<complexType>
<sequence minOccurs="1" maxOccurs="unbounded">
<element name="student" type="tns:studentType"/>
</sequence>
</complexType>
</element>
-->
<sequence minOccurs="1" maxOccurs="unbounded">
<element name="student" type="tns:studentType"/>
</sequence>
</sequence>
</complexType>
<simpleType name="gradeType">
<restriction base="int">
<minInclusive value="1"/>
<maxExclusive value="150"/>
<!-- 最小值包含1 -->
<!-- 最大值不包含 -->
</restriction>
</simpleType>
</schema>