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

xsd文件规则和语法的更多相关文章

  1. XSD文件详解

    XSD (xml Schema Definition) Xml Schema的用途 1.  定义一个Xml文档中都有什么元素 2.  定义一个Xml文档中都会有什么属性 3.  定义某个节点的都有什么 ...

  2. 针对单个 js 文件禁用 ESLint 语法校验

    问题描述: 在 Vue-cli 创建的项目中,使用了 ESLint 规范代码的项目中 如何针对单个 js 文件禁用 ESLint 语法校验,但整个项目依然保留 ESLint 的校验规则? 解决方案: ...

  3. Destoon 模板存放规则 及 语法参考

    模板存放规则及语法参考 一.模板存放及调用规则 模板存放于系统 template 目录,template 目录下的一个目录例如 template/default/ 即为一套模板 模板文件以 .htm ...

  4. robot.txt 文件 作用和语法

    seo工作者应该不陌生,robots.txt文件是每一个搜索引擎蜘蛛到你的网站之后要寻找和访问的第一个文件,robots.txt是你对搜索引擎制定的一个如何索引你的网站的规则.通过该文件,搜索引擎就可 ...

  5. XSD文件生成C#VO实体类

    最近公司要做一个项目,需要和现有的其他项目对接,由于不知道他们的数据库,只有XSD文件.所以,我们在修改相应的程序时,就需要根据他们提供的XSD文件,来写我们的VO实体类,由于我写过根据Oracle数 ...

  6. XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...

  7. 如何将XSD文件以及引入import的文件生成相应的C#类。

    下将微软的 Sample Code Generator 1.4.2.1 如果链接不可以用,请到google上搜索,并安装. 拷贝要生成的XSD相关文件到安装目录,MS-DOS下进入安装目录. 执行命令 ...

  8. 为什么在Spring的配置里,最好不要配置xsd文件的版本号

    为什么dubbo启动没有问题? 原文链接:http://www.tuicool.com/articles/YRn67zM 这篇blog源于一个疑问: 我们公司使了阿里的dubbo,但是阿里的开源网站h ...

  9. C# 使用xsd文件验证XML 格式是否正确

    C# 使用xsd文件验证XML 格式是否正确 核心示例代码: //创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xm ...

随机推荐

  1. Java中的不同遍历方式

    已知一个Person类: public class Person implements Comparable<Person>{ String name; String id; public ...

  2. RBM:深度学习之Restricted Boltzmann Machine的BRBM学习+LR分类—Jason niu

    from __future__ import print_function print(__doc__) import numpy as np import matplotlib.pyplot as ...

  3. L - Ray in the tube Gym - 101911L (暴力)

    ---恢复内容开始--- You are given a tube which is reflective inside represented as two non-coinciding, but ...

  4. .net3.5 支持tuple

    添加下面引用即可: https://github.com/SaladLab/NetLegacySupport

  5. .NET控件名称缩写一览表 zz

    标准控件1 btn Button2 chk CheckBox3 ckl CheckedListBox4 cmb ComboBox5 dtp DateTimePicker6 lbl Label7 llb ...

  6. spring 空指针报错,Could not create connection to database server.

    驱动问题,换成最近版本的mysql驱动

  7. Victoria的舞会2——图的连通性及连通分量

    [Vijos1022]]Victoria的舞会2 Description Victoria是一位颇有成就的艺术家,他因油画作品<我爱北京天安门>闻名于世界.现在,他为了报答帮助他的同行们, ...

  8. MySql中的事务、JDBC事务、事务隔离级别

    一.MySql事务 之前在Oracle中已经学习过事务了,这个东西就是这个东西,但是在MySql中用法还是有一点不同,正好再次回顾一下. 先看看MySql中的事务,默认情况下,每执行一条SQL语句,都 ...

  9. [jzoj]1729.blockenemy

    Link https://jzoj.net/senior/#main/show/1729 Description 你在玩电子游戏的时候遇到了麻烦...... 你玩的游戏是在一个虚拟的城市里进行,这个城 ...

  10. Spring IOC基础使用

    先下载.导入核心jar包 编写Book类和CollectionUse类 package MyPackageOne; public class Book { private String title; ...