XML(3)——schema文件的三种编写方式

一、schema文件编写方式
①Russian Doll(俄罗斯套娃)
②Salami Slice(香肠切片)
③Venetian Blind(百叶窗) 推荐

二、Russian Doll俄罗斯套娃
顾名思义,编写方式是一层套一层,只有一个根元素,通过且套的方式编写完成。
优点:结构清晰
缺点:元素无法重用

RussionDoll.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.xy.com"
xmlns:tns="http://www.xy.com"
elementFormDefault="qualified">

<element name="books">
<complexType>
<!-- maxOccurs表示最大出现次数,unbounded表示次数无限制。默认次数为1次 -->
<sequence maxOccurs="unbounded">
<element name="book">
<complexType>
<sequence minOccurs="1" maxOccurs="unbounded">
<element name="title" type="string" />
<element name="content" type="string" />
<!-- choice标签中属性任选一个 -->
<choice>
<element name="author" type="string" />
<element name="authors">
<complexType>
<!-- all标签中的元素可以按顺序出现,但次数为1次 -->
<all>
<!-- 每个元素只能出现一次 -->
<element name="author" type="string" />
</all>
</complexType>
</element>
</choice>
</sequence>
<!-- book的属性,在schema中位置必须在sequence之后 -->
<attribute name="id" type="int" use="required" />
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>

RussionDoll.xml
<?xml version="1.0" encoding="UTF-8"?>
<book:books xmlns: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 in action</book:title>
<book:content>Java is good</book:content>
<book:author>TOM</book:author>
</book:book>
<book:book id="2">
<book:title>SOA in action</book:title>
<book:content>SOA is difficult</book:content>
<book:authors>
<book:author>LILY</book:author>
</book:authors>
</book:book>
</book:books>

二、Salami Slice腊肠切片
优点:可以进行最大化的重用
缺点:根元素不清晰。book、id、title、content所有的element都可以作为根元素
SalamiSlice.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.xy,com"
xmlns:tns="http://www.xy.com"
elementFormDefault="qualified">

<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>
</schema>

三、百叶窗Venetian Blind
根元素清晰,元素可重用
VenetianBlind.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.xy.com" 
xmlns:tns="http://www.xy.com" 
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="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>
</schema>

VenetianBlind.xml
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns="http://www.example.org/04"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.xy.com" sex="男">
<name>test</name>
<age>10</age>
<email>123456@QQ.com</email>
</person>

复杂一些的dtd
VenetianBlind2.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.xy.com"
xmlns:xy="http://www.xy.com" 
elementFormDefault="qualified">

<element name="persons" type="xy:personsType" />

<complexType name="personsType">
<sequence maxOccurs="unbounded">
<element name="person" type="xy:personType"></element>
</sequence>
</complexType>

<complexType name="personType">
<sequence>
<element name="name" type="string" />
<element name="age" type="xy:ageType" />
<element name="email" type="xy:emailType" />
</sequence>
<attribute name="sex" type="xy:sexType" default="男" />
<attribute name="id" type="ID" use="required" />
</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>
</schema>

VenetianBlind2.xml
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns="http://www.xy.com"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.xy.com">
   
 <person sex="女" id="p1">
  <name>test</name>
<age>10</age>
<email>123456@qq.com</email>
 </person>
 <person sex="男" id="p2">
  <name>test2</name>
<age>20</age>
<email>123456@qq.com</email>
 </person>
</persons>

时间: 2024-11-18 18:41:59

XML(3)——schema文件的三种编写方式的相关文章

Android XML数据的三种解析方式_Android

本篇文章包含以下内容:      XML数据的Dom解析      XML数据的Sax解析      XML数据的Pull解析      Activity中使用三种解析      Sax解析与Pull解析区别 三种解析方式的步骤: 1.在Assets文件夹中模拟创建XML数据 2.创建对应XML的Bean对象 3.开始解析 XML数据的Dom解析 DOM解析XML文件时,会将XML文件的所有内容读取到内存中(内存的消耗比较大),然后允许您使用DOM API遍历XML树.检索所需的数据 一.在As

Android编程实现XML解析与保存的三种方法详解

本文实例讲述了Android编程实现XML解析与保存的三种方法.分享给大家供大家参考,具体如下: 简介 在Android开发中,关于XML解析有三种方式,分别是: 1. SAX 基于事件的解析器,解析速度快,占用内存少.非常适合在Android移动设备中使用. 2. DOM 在内存中以树形结构存放,因此检索和更新效率会更高.但是对于特别大的文档,解析和加载整个文档将会很耗资源 3. PULL 基于事件的解析器,不同于SAX是,PULL是主动请求下一个事件,所以在可控上PULL要比SAX实用.An

asp.net读取excel文件的三种方法示例

 这篇文章主要介绍了asp.net读取excel文件的三种方法示例,包括采用OleDB读取Excel文件.引用的com组件读取Excel文件.用文件流读取,需要的朋友可以参考下 方法一:采用OleDB读取Excel文件   把Excel文件当做一个数据源来进行数据的读取操作,实例如下:  代码如下: public DataSet ExcelToDS(string Path)    {    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;&q

解析PHP生成静态html文件的三种方法_php技巧

本文将介绍Php 生成静态html文件的三种方法 .1,下面使用模版的一个方法! 复制代码 代码如下: <?php $fp = fopen ("templets.html","a"); if ($fp){ $fup = fread ($fp,filesize("templets.html")); $fp2 = fopen ("html.shtml","w"); if ($fwrite ($fp2,$f

java代码中init method和destroy method的三种使用方式

在Java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等. 周末对这两个方法进行了一点学习和整理,倒也不是专门为了这两个方法,而是在巩固spring相关知识的时候提到了,然后感觉自己并不是很熟悉这个,便好好的了解一下. 根据特意的去了解后,发现实际上可以有三种方式来实现init method和destroy method. 要用这两个方法,自然先要知道这两

IIS下PHP的三种配置方式对比_php技巧

在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异.   1.CGI(通用网关接口/Common Gateway Interface)一般是可执行程序,例如EXE文件,和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求.这样,当用户请求数量非常多时,会大量占用系统的资源,如内存.CPU时间等,造成效能低下.   2.ISAPI(

IIS6.0支持PHP的三种配置方式的优缺点

在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异. 1.CGI(通用网关接口/Common Gateway Interface)一般是可执行程序,例如EXE文件,和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求.这样,当用户请求数量非常多时,会大量占用系统的资源,如内存.CPU时间等,造成效能低下. 2.ISAPI(Inte

Java的三种编译方式

通常Java有三种编译方式,编译方式不同,那么得到的.class的大小也不同. 1)默认编译方式:javac A.java 2)  调试编译方式:javac -g A.java 3)  代码编译方式:javac -g:none A.java 案例如下:类A public class A{ public static void main(String args[]){ for(int i=0;i<100000;i++){ A a = new A(); } } } 通过上面这三种编译方式,得到的.c

Mysql 5.7.19三种安装方式手册

Mysql 5.7.19三种安装方式手册 ** 环境准备 操作系统:CentOS 软件:MySQL-5.7.19 ** ** 一.RPM 方式安装 进入官方网站:https://www.mysql.com 注册账号 downloads 选择MySQL Community Edition (GPL)>>Community (GPL) Downloads >>MySQL Community Server (GPL)>>download 操作系统:Red Hat Enterp