加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML:Schema、三种编写Schema的方式

发布时间:2020-12-16 06:00:11 所属栏目:百科 来源:网络整理
导读:针对DTD文件的不足之处:(不能出现相同名称的元素,DTD的语法不是xml的语法)出现的Schema,需要使用什么命名空间的东西就先引入,使用xmlns,后面加后缀,不加就不用后缀 定义Schema文件,后缀名为xsd 引入XMLSchema那个命名空间,你就可以使用schema、tar




针对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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读