XML Schema(XSD)

XML Schema只是XMLSchema语言当中的一种。因为容易与XML相混淆,有些人叫WXS(W3C XML Schema),有些人叫XSD(XMLSchema Definition)。

XML Schema就是写一套规则来约束一个XML文档必须遵循的规范。但与其它Schema不同的是,XSD还会验证数据类型(datatypes)。验证后的这些反馈信息集对于XML文件处理软件来说非常有用,不过因为要进行数据类型验证也招来了批评,因为不是所有XML文件内容需要进行数据类型验证。

XML Schema文件的后缀是xsd,MIME是application/xml或text/xml。当一个XML文件需要通过xsd验证时,可以把这个schema作为参数传给validationengine,或者通过xsi:schemaLocation和xsi:noNamespaceSchemaLocation来告诉验证引擎去哪找。

Schema成份(components)

·        元素声明:包括元素名和目标命名空间。

·        属性声明(attributedeclaration):同样包含属性的名字和目标命名空间,属性的值可以有默认值,也可能是固定值。

·        简单和复杂类(simpleand complex types)

·        模型组(modelgroup)和属性组(attribute group):本质上是宏指令(macros):被命名的元素组和属性组可以在其它不同类型的定义中重用。

·        元素使用(attributeuse):指的是一个复杂类与一个属性声明的关系,指示某个attribute是强制的还是可选的。

·        基本粒子(elementparticle):代表一个复杂类与一个元素声明的关系,比如指示某个元素在内容中出现的最小和最大次数。可以使用通配符(wildcard,一般是*)。

类型(types)

XSD提供了19种基本数据类型:anyURI,base64Binary, Boolean, date, dateTime, decimal, double, float, duration,hexBinary, gDay, gMonth, gYear, gMonthDay, gYearMonth, NOTATION, QName, String,time。

另外还提供了三种机制来构造新的数据类型:

·        限制(restriction):指示只允许某些数据类型;

·        列表(list):允许一列值;

·        并集(union):允许不同类型的值;

通过这三个机制,XSD又衍生出了25种新的数据类型,这些新的数据类型也在XSD中,这些就是复杂类型。

验证信息集(post-schema-validationinfoset)

在做完XSD验证后,就可以用一些数据模型来表达一个XML文件的结构和内容了。XML的数据模型包括:

·        词表(元素和属性名)

·        内容模型(关系和结构)

·        数据类型

这些信息的集合就叫Post-Schema-ValidationInfoset(PSVI)。

示例

SampleAddress.xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Address">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Recipient" type="xs:string" />
        <xs:element name="House" type="xs:string" />
        <xs:element name="Street" type="xs:string" />
        <xs:element name="Town" type="xs:string" />
        <xs:element name="County" type="xs:string" minOccurs="0" />
        <xs:element name="PostCode" type="xs:string" />
        <xs:element name="Country" minOccurs="0">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="IN" />
              <xs:enumeration value="DE" />
              <xs:enumeration value="ES" />
              <xs:enumeration value="UK" />
              <xs:enumeration value="US" />
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
一些开发工具就可以用图形化的方式把这个Schema表示出来:

一个遵循该XSD的XML文档:

<?xml version="1.0" encoding="utf-8"?>
<Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="SimpleAddress.xsd">
  <Recipient>Mr. Walter C. Brown</Recipient>
  <House>49</House>
  <Street>Featherstone Street</Street>
  <Town>LONDON</Town>
  <PostCode>EC1Y 8SY</PostCode>
  <Country>UK</Country>
</Address>


你可能感兴趣的:(xml,schema,xsd)