XML:Schema、三种编写Schema的方式
针对DTD文件的不足之处:(不能出现相同名称的元素,DTD的语法不是xml的语法)出现的Schema,需要使用什么命名空间的东西就先引入,使用xmlns,后面加后缀,不加就不用后缀
定义Schema文件,后缀名为xsd
引入XMLSchema那个命名空间,你就可以使用schema、targetNamespace等元素了,它的定义文档在eclipse工具中已经有了,肯定由dtd校验,最初始的。 在xml中引入schema文件校验、提示
DTD和Schema其实可以看做解析XML的程序(比如框架)和书写XML文件之间的约定(比如我们程序员),DTD和Schema由框架提供,就约定了XML的书写模式,你按照这个模式写,那么框架的程序在解析的时候就不会出错。比如dtd中定义*,表示可以定义0到多个元素,那我框架的解析程序就会提供一个list来存储;dtd中定义user?,表示可以出现0或1个User类型,那解析程序就会定义一个User变量来接收。否则你们之间就会出错。 编写Schema的三种方式: 1.Russia Roll(俄罗斯玩偶) <?xmlversion="1.0" encoding="UTF-8"?> <schemaxmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.example.org/02" xmlns:tns="http://www.example.org/02"elementFormDefault="qualified"> <element name="books"> <complexType> <!-- maxOccurs表示最大出现次数--> <sequencemaxOccurs="unbounded"> <elementname="book"> <complexType> <sequenceminOccurs="1" maxOccurs="unbounded"> <elementname="title" type="string" /> <elementname="content" type="string" /> <choice> <elementname="author" type="string" /> <elementname="authors"> <complexType> <all><!--每个元素只能出现一次 --> <elementname="author" type="string"/> </all> </complexType> </element> </choice> </sequence> <attributename="id" type="int" use="required"/> </complexType> </element> </sequence> </complexType> </element> </schema> 优点:结构清晰;缺点:类型不能重用 根据它写的xml文件 <?xmlversion="1.0" encoding="UTF-8"?> <book:booksxmlns:book="http://www.example.org/02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="02.xsd"> <book:book id="1"> <book:title>Java inaction</book:title> <book:content>Java isgood</book:content> <book:author>Bruce</book:author> </book:book> <book:book id="2"> <book:title>SOA inaction</book:title> <book:content>soa isdifficult</book:content> <book:authors> <book:author>Jike</book:author> </book:authors> </book:book> </book:books> 2.Salami Slice(腊肉切片) <?xml version="1.0"encoding="UTF-8"?> <schemaxmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/03" xmlns:tns="http://www.example.org/03" elementFormDefault="qualified"> <elementname="book" type="tns:bookType"></element> <elementname="id" type="int"/> <elementname="title" type="string"/> <elementname="content" type="string"/>
<complexTypename="bookType"> <sequence> <elementref="tns:id"/> <elementref="tns:title"/> <elementref="tns:content"/> </sequence> </complexType> </schema> 优点:类型最大程度重用;缺点:结构不清晰,根节点都不好确定 <?xml version="1.0"encoding="UTF-8"?> <titlexmlns="http://www.example.org/03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/03"> 12asdasdasd </title> 3.Venetian Blind(百叶窗) <?xml version="1.0"encoding="UTF-8"?> <schemaxmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/04" xmlns:tns="http://www.example.org/04" elementFormDefault="qualified">
<elementname="person" type="tns:personType"/>
<complexTypename="personType"> <sequence> <elementname="name" type="string"/> <elementname="age" type="tns:ageType"/> <elementname="email" type="tns:emailType"/> </sequence> <attributename="sex" type="tns:sexType"/> </complexType>
<simpleTypename="emailType"> <restrictionbase="string"> <patternvalue="(w+.*)*w+@w+.[A-Za-z]{2,6}"/> <minLengthvalue="6"/> <maxLengthvalue="255"/> </restriction> </simpleType>
<simpleTypename="ageType"> <restrictionbase="int"> <minInclusivevalue="1"/> <maxExclusivevalue="150"/> </restriction> </simpleType>
<simpleTypename="sexType"> <restrictionbase="string"> <enumerationvalue="男"/> <enumerationvalue="女"/> </restriction> </simpleType> </schema> 根据以上写就的xml <?xml version="1.0"encoding="UTF-8"?> <personxmlns="http://www.example.org/04" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/04"sex="男"> <name>搜索</name> <age>149</age> <email>sadf@sdf.css</email> </person> 最好的使用Schema的方式【一个Schema表示一个类,做到分离、模块化】 Student.xsd <?xml version="1.0"encoding="UTF-8"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/classroom" xmlns:tns="http://www.example.org/classroom" elementFormDefault="qualified"> <xsd:elementname="student" type="tns:studentType"/>
<xsd:complexTypename="studentType"> <xsd:sequence> <xsd:elementname="name" type="xsd:string"/> <xsd:elementname="sex" type="tns:sexType"/> </xsd:sequence> </xsd:complexType>
<xsd:simpleTypename="sexType"> <xsd:restrictionbase="xsd:string"> <xsd:enumerationvalue="男"/> <xsd:enumerationvalue="女"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> classroom.xsd <?xml version="1.0"encoding="UTF-8"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/classroom" xmlns:tns="http://www.example.org/classroom" elementFormDefault="qualified"> <xsd:includeschemaLocation="student.xsd"/>
<xsd:elementname="classroom" type="tns:classroomType"/>
<xsd:complexTypename="classroomType"> <xsd:sequence> <xsd:elementname="grade" type="tns:gradeType"/> <xsd:elementname="name" type="xsd:string"/> <!-- <xsd:element name="stus"> <xsd:complexType> <xsd:sequenceminOccurs="1" maxOccurs="unbounded"> <xsd:elementname="student" type="tns:studentType"/> </xsd:sequence> </xsd:complexType> </xsd:element> --> <xsd:sequenceminOccurs="1" maxOccurs="unbounded"> <xsd:elementname="student" type="tns:studentType"/> </xsd:sequence> </xsd:sequence> </xsd:complexType>
<xsd:simpleTypename="gradeType"> <xsd:restrictionbase="xsd:int"> <xsd:minInclusivevalue="2000"/> <xsd:maxInclusivevalue="3000"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |