zoukankan      html  css  js  c++  java
  • Schema

    XML Schema 是基于 XML 的 DTD 替代者。

    XML Schema 描述 XML 文档的结构。

    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)

    XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。

    XML 文档可对 DTD 或 XML Schema 进行引用。

    对 XML Schema 的引用

    <note

    xmlns="http://www.w3school.com.cn"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

     

    对 DTD 的引用

    此文件包含对 DTD 的引用:

    <?xml version="1.0"?>

    <!DOCTYPE note SYSTEM "http://www.w3school.com.cn/dtd/note.dtd">

     

    <schema> 元素是每一个 XML Schema 的根元素。

    <?xml version="1.0"?>

    <xs:schema>

    ……

    </xs:schema>

     

    XML Schema 可定义 XML 文件的元素。

    简易元素指那些只包含文本的元素。它不会包含任何其他的元素或属性。

    定义简易元素的语法:

    <xs:element name="xxx" type="yyy"/>

    此处 xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型。

    最常用的类型是:

    xs:string

    xs:decimal

    xs:integer

    xs:boolean

    xs:date

    xs:time

    简易元素的默认值和固定值

    <xs:element name="color" type="xs:string" default="red"/>

    <xs:element name="color" type="xs:string" fixed="red"/>

    简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。

    定义属性的语法是:

    <xs:attribute name="xxx" type="yyy"/>

    属性的默认值和固定值

    <xs:attribute name="lang" type="xs:string" default="EN"/>

    <xs:attribute name="lang" type="xs:string" fixed="EN"/>

    可选的和必需的属性

    在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 "use" 属性:

    <xs:attribute name="lang" type="xs:string" use="required"/>

    限定(restriction)用于为 XML 元素或者属性定义可接受的值。对 XML 元素的限定被称为 facet。

    对值的限定

    <xs:simpleType>

      <xs:restriction base="xs:integer">

        <xs:minInclusive value="0"/>

        <xs:maxInclusive value="120"/>

      </xs:restriction>

    </xs:simpleType>

    对一组值的限定

    <xs:simpleType>

      <xs:restriction base="xs:string">

        <xs:enumeration value="Audi"/>

        <xs:enumeration value="Golf"/>

        <xs:enumeration value="BMW"/>

      </xs:restriction>

    </xs:simpleType>

    对一系列值的限定

    <xs:simpleType>

      <xs:restriction base="xs:string">

        <xs:pattern value="[a-z]"/>

      </xs:restriction>

    </xs:simpleType>

    对空白字符的限定

    如需规定对空白字符(whitespace characters)的处理方式,我们需要使用 whiteSpace 限定。

    <xs:simpleType>

      <xs:restriction base="xs:string">

        <xs:whiteSpace value="preserve"/>

      </xs:restriction>

    </xs:simpleType>

    对长度的限定

    如需限制元素中值的长度,我们需要使用 length、maxLength 以及 minLength 限定。

    <xs:simpleType>

      <xs:restriction base="xs:string">

        <xs:length value="8"/>

      </xs:restriction>

    </xs:simpleType>

    数据类型的限定

    限定

    描述

    enumeration

    定义可接受值的一个列表

    fractionDigits

    定义所允许的最大的小数位数。必须大于等于0。

    length

    定义所允许的字符或者列表项目的精确数目。必须大于或等于0。

    maxExclusive

    定义数值的上限。所允许的值必须小于此值。

    maxInclusive

    定义数值的上限。所允许的值必须小于或等于此值。

    maxLength

    定义所允许的字符或者列表项目的最大数目。必须大于或等于0。

    minExclusive

    定义数值的下限。所允许的值必需大于此值。

    minInclusive

    定义数值的下限。所允许的值必需大于或等于此值。

    minLength

    定义所允许的字符或者列表项目的最小数目。必须大于或等于0。

    pattern

    定义可接受的字符的精确序列。

    totalDigits

    定义所允许的阿拉伯数字的精确位数。必须大于0。

    whiteSpace

    定义空白字符(换行、回车、空格以及制表符)的处理方式。

     

    复合元素包含了其他的元素及/或属性。

    有四种类型的复合元素:

    空元素

    包含其他元素的元素

    仅包含文本的元素

    包含元素和文本的元素

    两种方式来定义复合元素:

    1、

    <xs:element name="employee">

      <xs:complexType>

        <xs:sequence>

          <xs:element name="firstname" type="xs:string"/>

          <xs:element name="lastname" type="xs:string"/>

        </xs:sequence>

      </xs:complexType>

    </xs:element>

    "firstname" 以及 "lastname",被包围在指示器 <sequence>中。这意味着子元素必须以它们被声明的次序出现。

     

    2、

    "employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称:

    <xs:element name="employee" type="personinfo"/>

    <xs:complexType name="personinfo">

      <xs:sequence>

        <xs:element name="firstname" type="xs:string"/>

        <xs:element name="lastname" type="xs:string"/>

      </xs:sequence>

    </xs:complexType>

     

    已有的复合元素之上以某个复合元素为基础,然后添加一些元素,就像这样:

    <xs:element name="employee" type="fullpersoninfo"/>

     

    <xs:complexType name="personinfo">

      <xs:sequence>

        <xs:element name="firstname" type="xs:string"/>

        <xs:element name="lastname" type="xs:string"/>

      </xs:sequence>

    </xs:complexType>

     

    <xs:complexType name="fullpersoninfo">

      <xs:complexContent>

        <xs:extension base="personinfo">

          <xs:sequence>

            <xs:element name="address" type="xs:string"/>

            <xs:element name="city" type="xs:string"/>

            <xs:element name="country" type="xs:string"/>

          </xs:sequence>

        </xs:extension>

      </xs:complexContent>

    </xs:complexType>

    空的复合元素不能包含内容,只能含有属性。

    “仅含元素”的复合类型元素是只能包含其他元素的元素。

    复合类型仅包含元素

    <xs:element name="person">

      <xs:complexType>

        <xs:sequence>

          <xs:element name="firstname" type="xs:string"/>

          <xs:element name="lastname" type="xs:string"/>

        </xs:sequence>

      </xs:complexType>

    </xs:element>

    或者可以为 complexType 元素设定一个名称,并让 "person" 元素的 type 属性来引用此名称(如使用此方法,若干元素均可引用相同的复合类型):

    <xs:element name="person" type="persontype"/>

     

    <xs:complexType name="persontype">

      <xs:sequence>

        <xs:element name="firstname" type="xs:string"/>

        <xs:element name="lastname" type="xs:string"/>

      </xs:sequence>

    </xs:complexType>

     

    仅含文本的复合元素可包含文本和属性。

    类型仅包含简易的内容(文本和属性),因此我们要向此内容添加 simpleContent 元素。当使用简易内容时,我们就必须在 simpleContent 元素内定义扩展或限定,就像这样:

    <xs:element name="某个名称">

      <xs:complexType>

        <xs:simpleContent>

          <xs:extension base="basetype">

            ....

            ....

          </xs:extension>    

        </xs:simpleContent>

      </xs:complexType>

    </xs:element>

    或者:

    <xs:element name="某个名称">

      <xs:complexType>

        <xs:simpleContent>

          <xs:restriction base="basetype">

            ....

            ....

          </xs:restriction>    

        </xs:simpleContent>

      </xs:complexType>

    </xs:element>

    提示:请使用 extension 或 restriction 元素来扩展或限制元素的基本简易类型。

    <shoesize country="france">35</shoesize>

    下面这个例子声明了一个复合类型,其内容被定义为整数值,并且 "shoesize" 元素含有名为 "country" 的属性:

    <xs:element name="shoesize">

      <xs:complexType>

        <xs:simpleContent>

          <xs:extension base="xs:integer">

            <xs:attribute name="country" type="xs:string" />

          </xs:extension>

        </xs:simpleContent>

      </xs:complexType>

    </xs:element>

    也可为 complexType 元素设定一个名称,并让 "shoesize" 元素的 type 属性来引用此名称(通过使用此方法,若干元素均可引用相同的复合类型):

    <xs:element name="shoesize" type="shoetype"/>

     

    <xs:complexType name="shoetype">

      <xs:simpleContent>

        <xs:extension base="xs:integer">

          <xs:attribute name="country" type="xs:string" />

        </xs:extension>

      </xs:simpleContent>

    </xs:complexType>

     

    混合的复合类型可包含属性、元素以及文本。

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

    通过指示器,我们可以控制在文档中使用元素的方式。

    指示器

    有七种指示器:

    Order 指示器:

    All

    Choice

    Sequence

    Occurrence 指示器:

    maxOccurs

    minOccurs

    Group 指示器:

    Group name

    attributeGroup name

    Order 指示器

    Order 指示器用于定义元素的顺序。

    <all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次:

    <choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼):

    <sequence> 规定子元素必须按照特定的顺序出现

    Occurrence 指示器用于定义某个元素出现的频率。

    注释:对于所有的 "Order" 和 "Group" 指示器(any、all、choice、sequence、group name 以及 group reference),其中的 maxOccurs 以及 minOccurs 的默认值均为 1。

    <maxOccurs> 指示器可规定某个元素可出现的最大次数

    <minOccurs> 指示器可规定某个元素能够出现的最小次数

    Group 指示器用于定义相关的数批元素。

    元素组通过 group 声明进行定义:

    <xs:group name="组名称">

      ...

    </xs:group>

    属性组

    属性组通过 attributeGroup 声明来进行定义:

    <xs:attributeGroup name="组名称">

      ...

    </xs:attributeGroup>

    <any> 元素使我们有能力通过未被 schema 规定的元素来拓展 XML 文档

    <anyAttribute> 元素使我们有能力通过未被 schema 规定的属性来扩展 XML 文档!

    通过 XML Schema,一个元素可对另一个元素进行替换。

    <xs:element name="name" type="xs:string"/>

    <xs:element name="navn" substitutionGroup="name"/>

    阻止元素替换

    为防止其他的元素替换某个指定的元素,请使用 block 属性:

    <xs:element name="name" type="xs:string" block="substitution"/>

    使用 substitutionGroup

    可替换元素的类型必须和主元素相同,或者从主元素衍生而来。假如可替换元素的类型与主元素的类型相同,那么您就不必规定可替换元素的类型了。

    substitutionGroup 中的所有元素(主元素和可替换元素)必须被声明为全局元素,否则就无法工作!

    全局元素指 "schema" 元素的直接子元素!本地元素(Local elements)指嵌套在其他元素中的元素。

    字符串数据类型(String Data Type)

    字符串数据类型可包含字符、换行、回车以及制表符。

    规格化字符串数据类型源自于字符串数据类型。

    规格化字符串数据类型同样可包含字符,但是 XML 处理器会移除折行,回车以及制表符。

    ENTITIES

     

    ENTITY

     

    ID

    在 XML 中提交 ID 属性的字符串 (仅与 schema 属性一同使用)

    IDREF

    在 XML 中提交 IDREF 属性的字符串(仅与 schema 属性一同使用)

    IDREFS language

    包含合法的语言 id 的字符串

    Name

    包含合法 XML 名称的字符串

    NCName

     

    NMTOKEN

    在 XML 中提交 NMTOKEN 属性的字符串 (仅与 schema 属性一同使用)

    NMTOKENS

     

    normalizedString

    不包含换行符、回车或制表符的字符串

    QName

     

    string

    字符串

    token

    不包含换行符、回车或制表符、开头或结尾空格或者多个连续空格的字符串

    对字符串数据类型的限定(Restriction)

    可与字符串数据类型一同使用的限定:

    enumeration

    length

    maxLength

    minLength

    pattern (NMTOKENS、IDREFS 以及 ENTITIES 无法使用此约束)

    whiteSpace

    日期及时间数据类型用于包含日期和时间的值。

    日期数据类型(Date Data Type)

    日期数据类型用于定义日期。

    日期使用此格式进行定义:"YYYY-MM-DD",其中:

    YYYY 表示年份

    MM 表示月份

    DD 表示天数

    注释:所有的成分都是必需的!

    如需规定一个时区,您也可以通过在日期后加一个 "Z" 的方式,使用世界调整时间(UTC time)来输入一个日期 - 比如这样:

    <start>2002-09-24Z</start>

    或者也可以通过在日期后添加一个正的或负时间的方法,来规定以世界调整时间为准的偏移量 - 比如这样:

    <start>2002-09-24-06:00</start>

    或者:

    <start>2002-09-24+06:00</start>

    时间数据类型(Time Data Type)

    时间数据类型用于定义时间。

    时间使用下面的格式来定义:"hh:mm:ss",其中

    hh 表示小时

    mm 表示分钟

    ss 表示秒

    时区

    如需规定一个时区,您也可以通过在时间后加一个 "Z" 的方式,使用世界调整时间(UTC time)来输入一个时间 - 比如这样:

    <start>09:30:10Z</start>

    或者也可以通过在时间后添加一个正的或负时间的方法,来规定以世界调整时间为准的偏移量 - 比如这样:

    <start>09:30:10-06:00</start>

    或者:

    <start>09:30:10+06:00</start>

    日期时间数据类型(DateTime Data Type)

    日期时间数据类型用于定义日期和时间。

    日期时间使用下面的格式进行定义:"YYYY-MM-DDThh:mm:ss",其中:

    YYYY 表示年份

    MM 表示月份

    DD 表示日

    T 表示必需的时间部分的起始

    hh 表示小时

    mm 表示分钟

    ss 表示秒

    持续时间数据类型(Duration Data Type)

    持续时间数据类型用于规定时间间隔。

    时间间隔使用下面的格式来规定:"PnYnMnDTnHnMnS",其中:

    P 表示周期(必需)

    nY 表示年数

    nM 表示月数

    nD 表示天数

    T 表示时间部分的起始 (如果您打算规定小时、分钟和秒,则此选项为必需)

    nH 表示小时数

    nM 表示分钟数

    nS 表示秒数

    负的持续时间

    如需规定一个负的持续时间,请在 P 之前输入减号:

    名称

    描述

    date

    定义一个日期值

    dateTime

    定义一个日期和时间值

    duration

    定义一个时间间隔

    gDay

    定义日期的一个部分 - 天 (DD)

    gMonth

    定义日期的一个部分 - 月 (MM)

    gMonthDay

    定义日期的一个部分 - 月和天 (MM-DD)

    gYear

    定义日期的一个部分 - 年 (YYYY)

    gYearMonth

    定义日期的一个部分 - 年和月 (YYYY-MM)

    time

    定义一个时间值

    对日期数据类型的限定(Restriction)

    可与日期数据类型一同使用的限定:

    enumeration

    maxExclusive

    maxInclusive

    minExclusive

    minInclusive

    pattern

    whiteSpace

    十进制数据类型

    十进制数据类型用于规定一个数值。

    下面是一个关于某个 scheme 中十进制数声明的例子。

    <xs:element name="prize" type="xs:decimal"/>

    整数数据类型

    整数数据类型用于规定无小数成分的数值。

    下面是一个关于某个 scheme 中整数声明的例子。

    <xs:element name="prize" type="xs:integer"/>

    数值数据类型

    请注意,下面所有的数据类型均源自于十进制数据类型(除 decimal 本身以外)!

    名字

    秒数

    byte

    有正负的 8 位整数

    decimal

    十进制数

    int

    有正负的 32 位整数

    integer

    整数值

    long

    有正负的 64 位整数

    negativeInteger

    仅包含负值的整数 ( .., -2, -1.)

    nonNegativeInteger

    仅包含非负值的整数 (0, 1, 2, ..)

    nonPositiveInteger

    仅包含非正值的整数 (.., -2, -1, 0)

    positiveInteger

    仅包含正值的整数 (1, 2, ..)

    short

    有正负的 16 位整数

    unsignedLong

    无正负的 64 位整数

    unsignedInt

    无正负的 32 位整数

    unsignedShort

    无正负的 16 位整数

    unsignedByte

    无正负的 8 位整数

    对数值数据类型的限定(Restriction)

    可与数值数据类型一同使用的限定:

    enumeration

    fractionDigits

    maxExclusive

    maxInclusive

    minExclusive

    minInclusive

    pattern

    totalDigits

    whiteSpace

    逻辑数据类型(Boolean Data Type)

    逻辑数据性用于规定 true 或 false 值。

    <xs:attribute name="disabled" type="xs:boolean"/>

    二进制数据类型(Binary Data Types)

    二进制数据类型用于表达二进制形式的数据。

    我们可使用两种二进制数据类型:

    base64Binary (Base64 编码的二进制数据)

    hexBinary (十六进制编码的二进制数据)

    下面是一个关于某个 scheme 中 hexBinary 声明的例子:

    <xs:element name="blobsrc" type="xs:hexBinary"/>

    AnyURI 数据类型(AnyURI Data Type)

    anyURI 数据类型用于规定 URI。

    下面是一个关于某个 scheme 中 anyURI 声明的例子:

    <xs:attribute name="src" type="xs:anyURI"/>

    杂项数据类型(Miscellaneous Data Types)

    名称

    描述

    anyURI

     

    base64Binary

     

    boolean

     

    double

     

    float

     

    hexBinary

     

    NOTATION

     

    QName

     

    对杂项数据类型的限定(Restriction)

    可与杂项数据类型一同使用的限定:

    enumeration (布尔数据类型无法使用此约束*)

    length (布尔数据类型无法使用此约束)

    maxLength (布尔数据类型无法使用此约束)

    minLength (布尔数据类型无法使用此约束)

    pattern

    whiteSpace

    约束指 constraint。

    XSD 元素

    元素

    解释

    all

    规定子元素能够以任意顺序出现,每个子元素可出现零次或一次。

    annotation

    annotation 元素是一个顶层元素,规定 schema 的注释。

    any

    使创作者可以通过未被 schema 规定的元素来扩展 XML 文档。

    anyAttribute

    使创作者可以通过未被 schema 规定的属性来扩展 XML 文档。

    appInfo

    规定 annotation 元素中应用程序要使用的信息。

    attribute

    定义一个属性。

    attributeGroup

    定义在复杂类型定义中使用的属性组。

    choice

    仅允许在 <choice> 声明中包含一个元素出现在包含元素中。

    complexContent

    定义对复杂类型(包含混合内容或仅包含元素)的扩展或限制。

    complexType

    定义复杂类型。

    documentation

    定义 schema 中的文本注释。

    element

    定义元素。

    extension

    扩展已有的 simpleType 或 complexType 元素。

    field

    规定 XPath 表达式,该表达式规定用于定义标识约束的值。

    group

    定义在复杂类型定义中使用的元素组。

    import

    向一个文档添加带有不同目标命名空间的多个 schema。

    include

    向一个文档添加带有相同目标命名空间的多个 schema。

    key

    指定属性或元素值(或一组值)必须是指定范围内的键。

    keyref

    规定属性或元素值(或一组值)对应指定的 key 或 unique 元素的值。

    list

    把简单类型定义为指定数据类型的值的一个列表。

    notation

    描述 XML 文档中非 XML 数据的格式。

    redefine

    重新定义从外部架构文件中获取的简单和复杂类型、组和属性组。

    restriction

    定义对 simpleType、simpleContent 或 complexContent 的约束。

    schema

    定义 schema 的根元素。

    selector

    指定 XPath 表达式,该表达式为标识约束选择一组元素。

    sequence

    要求子元素必须按顺序出现。每个子元素可出现 0 到任意次数。

    simpleContent

    包含对 complexType 元素的扩展或限制且不包含任何元素。

    simpleType

    定义一个简单类型,规定约束以及关于属性或仅含文本的元素的值的信息。

    union

    定义多个 simpleType 定义的集合。

    unique

    指定属性或元素值(或者属性或元素值的组合)在指定范围内必须是唯一的。

    XSD Restrictions/Facets for Datatypes

    参阅 XSD 限定 / Facets

    限定

    描述

    enumeration

    定义可接受值的一个列表

    fractionDigits

    定义所允许的最大的小数位数。必须大于等于0。

    length

    定义所允许的字符或者列表项目的精确数目。必须大于或等于0。

    maxExclusive

    定义数值的上限。所允许的值必须小于此值。

    maxInclusive

    定义数值的上限。所允许的值必须小于或等于此值。

    maxLength

    定义所允许的字符或者列表项目的最大数目。必须大于或等于0。

    minExclusive

    定义数值的下限。所允许的值必需大于此值。

    minInclusive

    定义数值的下限。所允许的值必需大于或等于此值。

    minLength

    定义所允许的字符或者列表项目的最小数目。必须大于或等于0。

    pattern

    定义可接受的字符的精确序列。

    totalDigits

    定义所允许的阿拉伯数字的精确位数。必须大于0。

    whiteSpace

    定义空白字符(换行、回车、空格以及制表符)的处理方式。

     

     

     

     

  • 相关阅读:
    可变速率的语音变调效果
    低音增强
    低质量音频伪装高质量音频的检测方法
    离线版-端点检测代码重写
    检测带人声的音乐
    音乐流派分类初步结果
    音乐和人声自动判别小结
    梯度下降法[转]
    梳状滤波器滤除谐波
    项目管理实战之团队管理 对团队的管理需要重视以下几个方面 一个系统不仅需要优秀的分析和设计,更需要一个良好的过程将其从蓝图转化为实现。这个过程中最重要的是对团队的管理,也就是人的管理
  • 原文地址:https://www.cnblogs.com/selfimprove/p/4583822.html
Copyright © 2011-2022 走看看