Schema简介
DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系,W3C定义的Schema用来代替DTD。
chema相对于DTD的明显好处是XML Schema文档本身也是XML文档,而不是像DTD一样使用自成一体的语法。
这就方便了用户和开发者,因为可以使用相同的工具来处理XML Schema和其他XML信息,而不必专门为Schema使用特殊工具,Schema简单易懂,懂得XML语法、规则的人都可以立刻理解它。
如何编写SCHEMA:
一.1个简单的Schema文档
下面是一个最简单的XML文档和schema文件。
hello.xml
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0"?>
<greeting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="E:\stu.xsd">Hello World!!</greeting>
<!--一个根元素:greeting;且这个元素不含属性,无子元素,内容是字符串。-->
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello.xsd
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="greeting" type="xsd:string"/>
</xsd:schema>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
由上面可以看出:
XML Schema文档后缀名是.xsd,完全符合XML语法,根元素是schema,命名空间xmlns:xsd="http://www.w3.org/2001/XMLSchema, -----注意在 schema的 xsd文件中 是 XMLSchema 而在引用文件xml中是XMLSchema-instance,写错了无法引用到,也不会报错。
用元素<element>定义实例文档中的元素;
引用时用(写在根节点里):
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:\stu.xsd" 关键地方:
在 xsd文件中 开头:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ---固定
targetNamespace="http://www.w3school.com.cn" --自定义
xmlns="http://www.w3school.com.cn" --自定义
elementFormDefault="qualified"> ....................coding </xs:schema>

 在 xml 引用中

<?xml version="1.0"?>
<note ----定义在schema中的根节点
xmlns="http://www.w3school.com.cn" --- schema中定义的namespace
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ----固定
xsi:schemaLocation="http://www.w3school.com.cn note.xsd"> ----namespace + filename ......coding </note>

  


二.我们来看下面这个XML文档和schema文件。
stu.xml
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<stus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:\stu.xsd">
<stu ID="s1" 婚否="否">
<name>长度1-10</name>
<sex>女</sex>
<age>10</age>
</stu>
<stu ID="s2" 婚否="是">
<name>长度1-10</name>
<sex>男</sex>
<age>24</age>
</stu>
</stus>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
注:要求:
<stus>下可出现多个<Stu>,<stu>有属性id,不能重复;
子节点<name>:不能为空,长度1-10
子节点<sex>:只能为男/女两个选项
子节点<age>:只能为数字,并且大于0小于100
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
相应的schema文件如下:
stu.xsd
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="stus">
<xs:complexType>
<xs:sequence>
<xs:element name="stu" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="myname"/>
<xs:element name="sex" type="mysex"/>
<xs:element name="age" type="myage"/>
</xs:sequence>
<xs:attributeGroup ref="stuGroup"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="myname">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="myage">
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="mysex">
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
<xs:attributeGroup name="stuGroup">
<xs:attribute name="ID" type="xs:ID" use="required"/>
<xs:attribute name="婚否" type="myhf" use="optional"></xs:attribute>
</xs:attributeGroup>
<xs:simpleType name="myhf">
<xs:restriction base="xs:string">
<xs:enumeration value="是"></xs:enumeration>
<xs:enumeration value="否"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:schema>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello.xsd与stus.xsd相比,stus.xsd比hello.xsd限制得更加的完整
三:分析stus.xsd文件的内容:
1.<xs:element name="stus">:声明一个根节点名为stus
2.<xs:complexType>:类型为复杂类型,复杂类型:为带属性和子节点的类型
3.<xs:sequence>:sequence表示子元素依次出现的顺序。
4.<xs:element name="stu" minOccurs="0" maxOccurs="unbounded">:
声明一个子节点名为stu,minOccurs="0" :子节点的数量最少为0个,最大不进行限制(unbounded也可指定一个具体的数字,如10)
5.<xs:complexType>:指定<stu>节点也为复杂类型
6.<xs:sequence>:sequence表示子元素依次出现的顺序。
7.<xs:element name="name" type="myname"/>:在<stu>节点下指定<name>描述节点,简单类型(最底层的节点),类型用名为myname的自定义的类型
8.<xs:element name="sex" type="mysex"/> :在<stu>节点下指定<sex>描述节点,简单类型(最底层的节点),类型用名为mysex的自定义的类型
9.<xs:element name="age" type="myage"/> :在<stu>节点下指定<age>描述节点,简单类型(最底层的节点),类型用名为myage的自定义的类型
10.找到自定义myname类型:
<xs:simpleType name="myname">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
详解:
<xs:simpleType name="myname">:定义一个名为myname的简单数据类型
<xs:restriction base="xs:string">:指定其基地类型如(string,integer)等
<xs:minLength value="1"/>:长度最少为1
<xs:maxLength value="10"/>:长度最大为10
11.自定义myage类型:
<xs:simpleType name="myage">
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
详解:
<xs:simpleType name="myage">:定义一个名为myage的简单数据类型
<xs:restriction base="xs:integer">:指定其基地类型如(string,integer)等
<xs:minInclusive value="1"/>:值最小为1,包括1
<xs:maxInclusive value="100"/>:值最大为1,包括10
12.自定义myage类型:
<xs:simpleType name="mysex">
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
详解:
<xs:simpleType name="myage">:定义一个名为myage的简单数据类型
<xs:restriction base="xs:integer">:指定其基地类型如(string,integer)等
<xs:enumeration value="男"/>:指定其值为枚举值“男”
<xs:enumeration value="女"/>:指定其值为枚举值“女”
13.<xs:attributeGroup ref="stuGroup"/>:为stu节点引用一个名为“stuGroup”的属性组
14.我们找到名为stuGroup的属性组:
<xs:attributeGroup name="stuGroup">
<xs:attribute name="ID" type="xs:ID" use="required"/>
<xs:attribute name="婚否" type="myhf" use="optional"/>
</xs:attributeGroup>
详解:
<xs:attributeGroup name="stuGroup">:定义一个名为stuGroup 的属性组.
<xs:attribute name="ID" type="xs:ID" use="required"/>:为stuGroup 属性组中定义一个名为“ID”的属性,类型为ID,不能重复,use为指定此属性是否可选/必须,值有:required是必须值,optional是可选值,prohibited是无属性值。
<xs:attribute name="婚否" type="myhf" use="optional"/>:为stuGroup 属性组中定义一个名为“婚否”的属性,类型使用自定义枚举类型,只能为是/否,此属性为可选

  转自 

http://dang-java.iteye.com/blog/665167

  

XML中如何使用schema的更多相关文章

  1. Solr schema.xml中修改id的类型为int

    使用solr6的版本的时候(solr5不存在这个问题),在修改schema.xml的field时,想使用int做为id的数据类型,修改后重新加载配置的时候报错.原来schema.xml中field i ...

  2. xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊。

    1.xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊. 2.java编译器会下载xsd的指定链接文件,加在代码里,一起编译

  3. Spring中xml文档的schema约束

    最开始使用Spring框架的时候,对于其配置文件xml,只是网上得知其使用方法,而不明其意.最近想着寻根问底的探究一下.以下是本文主要内容: 1.配置文件示例.   <?xml version= ...

  4. XML中的DOCTYPE属性

    一.先来两个小例子 内部dtd将standalone设为真. <?xml version="1.0" standalone="yes"?> < ...

  5. solr5.5教程-solrconfig.xml,加载schema.xml

    布署完成后,接下来要更深入的研究solr的原理和使用. 首先进入testcore这个文件夹下面,发现这个core的conf里并没有schema.xml.那么数据格式是在哪里定义的呢? 打开 solr_ ...

  6. Spring xml中进行面向切面的配置

    Spring xml中进行面向切面的配置 XML: <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. Javaweb学习笔记——(六)——————xml中jaxp两种解析方式和dom4j运用

    1.xml的scheam约束 dtd的语法:<!ElEMENT 元素名称 约束> **schema符合xml的语法,xml语句 **一个xml中可以有多个schema,多个schema使用 ...

  8. Spring学习----- Spring配置文件xml文档的schema约束

    1.配置文件示例. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="htt ...

  9. [spring]Bean注入——在XML中配置

    Bean注入的方式有两种: 一.在XML中配置 属性注入 构造函数注入 工厂方法注入 二.使用注解的方式注入@Autowired,@Resource,@Required 本文首先讲解在XML中配置的注 ...

随机推荐

  1. webview的弹性布局之rem,em

    webview页面的自适应一般有两种方法,即一是JS的计算方法,二是通过css的media设置分档方式.在此主要介绍css的方式. html { font-size: 16px; } @media o ...

  2. [大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化

    6.4.6 优化数据序列化 如何存储和传输数据对性能有很大的影响.在这部分将介绍数据序列化的最佳实践,从Hadoop中榨出最大的性能. 压缩压缩是Hadoop优化的重要部分.通过压缩可以减少作业输出数 ...

  3. linux服务器修改ssh默认22端口方法

    1.登录服务器,打开sshd_config文件 # vim /etc/ssh/sshd_config 2.找到#Port 22,默认是注释掉的,先把前面的#号去掉,再插入一行设置成你想要的端口号,注意 ...

  4. Android:通过startActivityForResult方法来得到Activity的回传值

    在一些情况下,我们通过 A activity跳转到 B activity上,这时希望 A activtiy能从 B activity上得到一些返回值,这个时候我们就不能使用startActivity方 ...

  5. Mysql 正则获取字段的交集【转】

    问题描述 比如table1中有两条记录 name no a    2,9 b    8,10 然后有一串字符串,是0,1,2,3,4 然后通过一条sql,找出no为2,9的记录来``` 因为字符串中有 ...

  6. Eclipse下jad反编译之“类文件查看器”不能处理给定的输入错误解决

    Eclipse中的插件下载,安装和配置可以参考我的另一篇文章:MyEclipse反编译Class文件 下面重点讲解如何使用jad反编译 1.在DOS窗口中,到class所在目录,直接运行 >ja ...

  7. platform

    作者yuanlulu httpblogcsdnnetyuanlulu版权没有但是转载请保留此段声明 第1章platform驱动管理机制 platform_device 数据结构 注册流程 platfo ...

  8. tomcat 7 用mod_jk做 负载均衡

    在Win7中使用apache为tomcat做负载均衡,各组件及版本如下: 两个tomcat v 7.0.57 一个apache v 2.2.14 一个mod_jk v 1.2.33(for windo ...

  9. Team Homework #2

    王宇杰,北航计算机学院2011级本科生,学号11061180.本人没有什么特长,典型的死宅一个.学过一点c和java.对于第一次的个人作业就表示亚历山大,希望各位大神不吝分享自己的代码,并做好注释.希 ...

  10. Ubuntu实用快捷键

    ALT + TAB: 切换程序窗口Win+w: 显示所有的工作空间,可轻松进行切换 ===== Terminal终端 ===== CTRL + ALT + T: 打开终端 TAB: 自动补全命令或文件 ...