1.简介
XSD即XML结构定义, XML Schemas Definition。其本身就是用xml描述的, 且遵循xml语法规则。一份XML schema文件描述了XML文档的结构.
基本规则:
  .必须以 XML 声明开头
  .必须拥有唯一的根元素
  .标签必须与结束标签相匹配
  .元素对大小写敏感
  .所有的元素都必须关闭
  .所有的元素都必须正确地嵌套
  .必须对特殊字符使用实体
  
<!– 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”>
<xs:element name=”note”>
  <xs:complexType>
    <xs:sequence>
<xs:element name=”to” type=”xs:string”/>
<xs:element name=”from” type=”xs:string”/>
<xs:element name=”heading” type=”xs:string”/>
<xs:element name=”body” type=”xs:string”/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>
<!– 对应的xml一个例子 –>
<?xml version=”1.0”?>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don’t forget the meeting!</body>
</note>
2.定义一个元素
<xs:element name=”xxx” type=”yyy”/>
<xs:element表示定义一个元素
xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型
3.定义一个属性
<xs:attribute name=”xxx” type=”yyy”/>
xs:attribute 表示定义一个属性
xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型
4.自定义简单类型(用于复合元素)
<xs:simpleType name=”sinceType”>
  <xs:restriction base=”xs:int”>
      <xs:minInclusive value=”0”/>
      <xs:maxInclusive value=”100”/>
  </xs:restriction>
</xs:simpleType>
<xs:element name=”goal” type=”sinceType”/>
xs:simpleType 表示接下来是简单类型的定义. 而使用此类型的元素,一般被称作复合元素
5.自定义结构体(用于复合元素)
<xs:complexType name=”combinationType”>
  <xs:element name=”Name” type=”xs:string” />
  <xs:element name=”Age” type=”xs:string” />
</xs:complexType>
<xs:element name=”person” type=”combinationType”/>
xs:complexType 表示接下来是结构体的定义. 而使用此类型的元素,一般被称作复合元素.
6.混合内容的自定义类型元素
<xs:element name=”letter”>
<xs:complexType mixed=”true”>
  <xs:sequence>
    <xs:element name=”name” type=”xs:string”/>
    <xs:element name=”orderid” type=”xs:positiveInteger”/>
    <xs:element name=”shipdate” type=”xs:date”/>
  </xs:sequence>
</xs:complexType>
</xs:element>
xs:complexType mixed=”true” 指明了letter里边的内容是混合内容, 其可以是如下形式:
  <letter>
  Dear Mr.<name>John Smith</name>.
  Your order <orderid>1032</orderid>
  will be shipped on <shipdate>2001-07-13</shipdate>.
  </letter>
7.约束条件
<xs:element name=”age”>
<xs:simpleType>
  <xs:restriction base=”xs:int”>
      <xs:minInclusive value=”1”/>
      <xs:maxInclusive value=”100”/>
  </xs:restriction>
</xs:simpleType>
</xs:element>
xs:restriction 表示接下来是对元素/属性的约束
8.可选的和必需出现(属性)
<xs:attribute name=”lang” type=”xs:string” use=”required”/>
use 表示出现的要求,required/optional/prohibited, 分别是必须出现/可选/不出现
9.出现次数(元素)
<xs:element name=”child_name” type=”xs:string” maxOccurs=”10” minOccurs=”0”/>
minOccurs 表示最小出现的次数,并由数值/unbounded 来指定
maxOccurs 表示最大出现的次数,并由数值/unbounded 来指定
10.默认值和固定值(元素/属性)
<xs:element name=”pen” type=”xs:string” default=”minipen”/>
<xs:attribute name=”color” type=”xs:string” fixed=”red”/>
default 指定默认值, fixed 指定该元素值固定
11.数据类型限制(元素/属性)
<xs:element name=”Name”>
<xs:simpleType>
<xs:restriction base=”xs:string”>
      <xs:minLength value=”2” />
       <xs:maxLength value=”4” />
 </xs:restriction>
</xs:simpleType>
</xs:element>
xs:restriction 表示对元素/属性的限制.
限制种类有以下类别:
  .length        // 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
  .minLength    // 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
  .maxLength    // 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
  
  .minInclusive // 定义数值的下限。所允许的值必需大于或等于此值。 
  .maxInclusive // 定义数值的上限。所允许的值必须小于或等于此值。
  
  .minExclusive // 定义数值的下限。所允许的值必需大于此值。
  .maxExclusive // 定义数值的上限。所允许的值必须小于此值。
  
  .enumeration // 定义可接受值的一个列表
  .pattern    // 定义可接受的字符的精确序列(规则表达式)。
  .fractionDigits // 定义所允许的最大的小数位数。必须大于等于0
  .totalDigits // 定义所允许的阿拉伯数字的精确位数。必须大于0。
  .whiteSpace    // 定义空白字符(换行、回车、空格以及制表符)的处理方式。
  
12.空白字符的限制
<xs:element name=”address”>
<xs:simpleType>
<xs:restriction base=”xs:string”>
  <xs:whiteSpace value=”preserve”/>
</xs:restriction>
</xs:simpleType>
</xs:element> 
xs:whiteSpace 指明对空白字符的限制, 取值有preserve/collapse/replace, 一次是保留/只保留字符中间必须的空格,且多个合并为一个/全部去掉
13.子元素顺序
<xs:element name=”person”>
<xs:complexType>
  <xs:all>
    <xs:element name=”firstname” type=”xs:string”/>
    <xs:element name=”lastname” type=”xs:string”/>
  </xs:all>
</xs:complexType>
</xs:element>
子元素顺寻有:
  .xs:all         // 顺序不限, 每个子元素只准出现一次
  .xs:choice      // 顺序不限, 每个子元素出现次数不限
  .xs:sequence    // 顺序固定, 每个子元素出现次数不限
14.元素组
<xs:group name=”persongroup”>
<xs:sequence>
  <xs:element name=”firstname” type=”xs:string”/>
  <xs:element name=”lastname” type=”xs:string”/>
  <xs:element name=”birthday” type=”xs:date”/>
</xs:sequence>
</xs:group>
<xs:element name=”person” type=”personinfo”/>
<xs:complexType name=”personinfo”>
<xs:sequence>
  <xs:group ref=”persongroup”/>
  <xs:element name=”country” type=”xs:string”/>
</xs:sequence>
</xs:complexType>
xs:group 指明定义一个元素组或者引用一个已经定义的元素组. 这样可以减少不必要的重复书写.
15.属性组
<xs:attributeGroup name=”personattrgroup”>
<xs:attribute name=”firstname” type=”xs:string”/>
<xs:attribute name=”lastname” type=”xs:string”/>
<xs:attribute name=”birthday” type=”xs:date”/>
</xs:attributeGroup>
<xs:element name=”person”>
<xs:complexType>
  <xs:attributeGroup ref=”personattrgroup”/>
</xs:complexType>
</xs:element>
xs:attributeGroup 指明定义一个属性组或者引用一个已经定义的属性组. 这样可以减少不必要的重复书写.
16.不限定子元素
<xs:element name=”person”>
<xs:complexType>
  <xs:sequence>
    <xs:element name=”firstname” type=”xs:string”/>
    <xs:element name=”lastname” type=”xs:string”/>
    <xs:any minOccurs=”unbounded”/>
  </xs:sequence>
</xs:complexType>
</xs:element>
xs:any 指明可以包含一个不限定子元素. 如以下xml也是符合xsd的:
  <person>
      <firstname>David</firstname>
      <lastname>Smith</lastname>
      <children>
          <childname>mike</childname>
      </children>
  </person>
17.不限定属性
<xs:element name=”person”>
<xs:complexType>
  <xs:sequence>
    <xs:element name=”firstname” type=”xs:string”/>
    <xs:element name=”lastname” type=”xs:string”/>
    <xs:anyAttribute minOccurs=”unbounded”/>
  </xs:sequence>
</xs:complexType>
</xs:element>
anyAttribute 指明可以包含一个不限定属性
18.替换元素
<xs:element name=”name” type=”xs:string”/>
<xs:element name=”navn” substitutionGroup=”name”/>
substitutionGroup 指明本元素可以替换的元素. 可替换元素的类型必须和主元素相同,同时两者必须是全局元素。
如以下xml片段都是合法的:
  <customer>
    <name>John Smith</name>
  </customer>
  <customer>
    <navn>John Smith</navn>
  </customer>
19.阻止被替换
<xs:element name=”name” type=”xs:string” block=”substitution”/>
<xs:element name=”navn” substitutionGroup=”name”/>
block 指明阻止的内容,这里为被替换. 可替换元素的类型必须和主元素相同,同时两者必须是全局元素。
本例就阻止用任何来替换name的声明,以下xml片段是错误的:
  <customer>
    <navn>John Smith</navn>
  </customer>
20.全局元素/本地元素
全局元素指 “schema” 元素的直接子元素
本地元素(Local elements)指嵌套在其他元素中的元素
21.xsd内置数据类型
xs:byte                 // 字节型,8位二进制位长
xs:unsignedByte         // 无符号字节型
xs:short                // 短整型, 16位二进制位长
xs:unsignedShort        // 无符号短整型
xs:integer              // 整型, 32位二进制位长
xs:positiveInteger      // 只有正值的整型
xs:nonPositiveInteger   // 只有非正值的整型
xs:negativeInteger      // 只有负值的整型
xs:nonNegativeInteger   // 只有非负值的整型
xs:int                  // 整型, 32位二进制位长
xs:long                 // 长整型, 64位二进制位长
xs:unsignedLong         // 无符号长整型
xs:float                // 浮点数, 32位二进制位长
xs:double               // 双精度, 64位二进制位长
xs:string               // 字符串
xs:boolean              // 合法的布尔值是 true、false、1(表示 true) 以及 0(表示 false)
xs:hexBinary            // 十六进制编码的二进制数据
xs:base64Binary         // Base64 编码的二进制数据
xs:date                 // 日期
xs:decimal              // 货币类型
xs:anyURI               // 假如某个 URI 含有空格,请用替换它们
22.调用其他程序/xml外部类型
<xs:notation name=”gif” public=”image/gif” system=”view.exe”/>
xs:notation 表示此元素非xml类型, 可指定解析或执行的程序.
xml文档中的内容类似如下:
<image type=”gif”>demopic.gif</image>
23.注释
<xs:annotation>
  <xs:documentation xml:lang=”zh”>
  这是一份用于企业雇员信息描述的模式文档
  </xs:documentation>
</xs:annotation>
“<!–”和”–>”仍可以使用,但是为了方便其他读者和应用程序来理解模式文档,XML Schema提供了三个元素来为模式提供注解:
  .xs:annotation      // 作为documentation/appinfo的父元素
  .xs:documentation   // 放置适合人阅读的信息
  .xs:appinfo         // 工具、样式表和其他应用程序提供信息
24.命名空间
名称空间声明的一般形式为
  第一部分是一个关键字xmlns:
  第二部分是名称空间的前缀(标识符)
  第三部分是一个等号
  第四部分是双引号
  第五部分是名称空间标识URI
需要注意的是,名称空间的前缀不能为xml,因为在XML中这个字符串是保留作特殊用途的。
<?xml version=”1.0”?>
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
</xs:schema>
  
25.源命名空间
在Schema中的定义和声明也可以引用其他的命名空间,我们可以把这种命名空间取名为源命名空间(source namespaces)。每一个Schema可以有多个源命名空间。 
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
</xs:schema>
26.目标命名空间
每一个Schema可以有且只有一个目标命名空间。在一个给定的Schema中,每一个名称都是属于一个特定的名字空间的, 同时可以由targetNamespace来命名
<?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema” targetNamespace=“http://www.test.com/ns/ns_test“>
</xsd:schema>
xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace
其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找
27.引入xsd命名空间
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<import namespace=”http://www.PartnerStore.com/PartsCatalog” schemaLocation=”http://www.ProductStandards.org/repository/alpha.xsd”/> 
</schema>
import 必须指明使用xmlns:xsi,因为import/schemaLocation都是在xsi(xml schema instance)中定义.

xsd文件规则和语法相关推荐

  1. sublime后缀_在sublime text中如何设置某种扩展名文件的默认语法

    下面由sublime教程栏目给大家介绍在sublime text中设置某种扩展名文件的默认语法,希望对需要的朋友有所帮助! 对于正常扩展名(后缀)的文件,sublime text都能识别. 对于其他不 ...

  2. wireshark抓包后查看数据报时的过滤规则/过滤语法及举例说明

    wireshark抓包后查看数据报时的过滤规则/过滤语法及举例说明过滤器的区别捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中.需要在开始捕捉前设置.显示过滤器(Di ...

  3. xsd文件 -- 伤痛

    xsd XSD XML结构定义 ( XML Schemas Definition ) XML Schema 是DTD的替代品.XML Schema语言也就是XSD. XML Schema描述了XML文 ...

  4. XSD文件与xml 文件

    XSD是指XML结构定义 ( XML Schemas Definition ) XML Schema 是DTD的替代品.XML Schema语言也就是XSD. XML Schema描述了XML文档的结 ...

  5. java 加载 xsd文件_Spring中自定义xsd文件操作方式

    1 设置html文件的语法格式xsd文件 根据POJO的属性编写xsd文件. 例如 targetNamespace="http://www.zhangyh.com/schema/user&q ...

  6. 根据xml 文件生成 xsd文件 以及相关测试方法

    1.下载trang.jar 下载地址:  http://www.java2s.com/Code/Jar/t/Downloadtrang20091111jar.htm 2.用法介绍 将trang.jar ...

  7. IntelliJ IDEA 添加本地xsd文件

    File-->Settings-->Languages & Frameworks-->Schemas and DTDs,点击右上角的绿色加号 出现添加本地xsd文件弹窗,UR ...

  8. Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)...

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7596118 ,转载请注明出处! 有时候你会发现过去一直启动正常的系统,某天启动时会报出 ...

  9. IDEA中进行SpringBoot整合spring-ws开发webservice接口后期要修改xsd文件流程

    场景 SpringBoot整合spring-ws开发webservice接口(全流程详细教程) 参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl ...

  10. Webservice开发之xsd文件示例代码

    场景 SpringBoot整合spring-ws开发webservice接口(全流程详细教程)参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

最新文章

  1. 兄弟,用大白话告诉你小白都能看懂的Hadoop架构原理
  2. 解读微软开源MMLSpark:统一的大规模机器学习生态系统
  3. linux FTP配置详解
  4. HttpContext.Current.Request.Url 地址:获取域名
  5. 在SuSE10.1上安装Oracle10g
  6. 怎样在excel表格中画斜线并打字_一日一技丨Excel斜线表头如何制作?标题、表头的4个技巧...
  7. TestContainers和Spring Boot
  8. Coursera自动驾驶课程第3讲:Self-Driving Hardware and Software Architectures
  9. 能被计算机硬件理解的语言,(计算机原理综合练习一含答案.doc
  10. 9.腾讯微博Android客户端开发——发送微博
  11. jQuery事件委派与移除
  12. java常用单词及解释_Java常用英语单词
  13. 自动反冲洗过滤器直通式原理介绍(附工作原理图)
  14. Gson的基本介绍和使用
  15. 错误No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbala
  16. 短网址还原 php,PHP将微博短地址还原为实际网址
  17. 数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.mdf' 已存在。请选择其他数据库
  18. 郑州大学计算机系好请假吗,郑州大学网上信息
  19. springboot基础学习笔记
  20. 网络收集自我检测题库

热门文章

  1. 高手对中科院考博英语的体会
  2. 独立游戏人:像素风格游戏制作分享(转)
  3. 双人游戏根据胜负关系匹配
  4. Oracle BI系统排名?Oracle BI办公系统怎么选?什么是用户口碑最好的Oracle BI系统?
  5. 基于matlab的声波分析研究,基于MATLAB的声音信号分析与处理(共13页)
  6. 格雷码转换成二进制c语言程序,基于PLC程序实现格雷码转换成二进制码.pdf
  7. Java、JSP房屋租赁管理系统
  8. Go:Unresolved dependency
  9. esxi 环境 西数硬盘测试软件,总算基本完美的折腾好ESXI+群晖+NVME
  10. Tomcat8安装配置