什么是XML Schema? XML Schema是一个基于XML的语法或schema规范,用来定义XML文档的标记方式。XML Sc hema是一个由Microsoft建议的schema规范,它与文档类型定义(DTD)相比具有很大的 优势,而DTD是最初用来定义XML模型的schema规范。DTD存在很多缺点,包括使用非XML 语法,不支持数据类型定义,不具有扩展性等。例如,DTD不允许把元素内容定义为另外 一个元素,或字符串。想了解更多有关DTD的内容,可以参考W3C XML建议书。 XML Sch ema从几个方面改善了DTD,包括使用XML语法,支持数据类型定义和名域。例如,XML S chema允许你把一个元素说明为一个integer, float,Boolean, URL等类型。 在Internet Explorer 5中的XML解析器可以解析使用DTD或XML Schema的XML文档。 如何建立XML Schema? 请在下面的XML文档中找一找每个节点的schema声明。 <class xmlns="x-schema:classSchema.xml"> <student studentID="13429"> <name>Jane Smith</name> <GPA>3.8</GPA> </student> </class> 你会注意到在上面文档中默认的名域是“x-schema:classSchema.xml”。这告诉解析器 根据URL(“classSchema.xml”)上的schema(x-schema)来解析整个文档。 下面是上面那个文档的完整的schema。注意schema的根元素中的名域声明。第一个(xml ns=”urn:schemas-microsoft-com:xml-data”)表明这个XML文档是一个XML Schema。第 二个(xmlns:dt=”urn:schemas-microsoft-com:datatypes”)允许schema处理者在Elem entType和AttributeType声明中的type属性前加dt前缀来说明元素的类型和内容的特征 。 <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-mi crosoft-com:datatypes"> <AttributeType name='studentID' dt:type='string' required='yes'/> <ElementType name='name' content='textOnly'> <ElementType name='GPA' content='textOnly' dt:type='float'/> <ElementType name='student' content='mixed'> <attribute type='studentID'/> <element type='name'/> <element type='GPA'/> </ElementType> <ElementType name='class' content='eltOnly'> <element type='student'/> </ElementType> </Schema> 用来定义元素和属性的声明元素如下所示: 元 素 说 明 ElementType 把类型和条件赋给一个元素,可以包含子元素 AttributeType 把类型和条件赋给一个属性 attribute 声明以前定义过的属性类型可以出现在名为ElementType的元素的作用域中 element 声明以前定义过的元素类型可以出现在名为ElementType的元素的作用域中 Schema的内容以最深层的元素的“AttributeType”和“ElementType”声明开头。 <AttributeType name='studentID' dt:type='string' required='yes'/> <ElementType name='name' content='textOnly'> <ElementType name='GPA' content='textOnly' dt:type='float'/> ElementType声明后接着就是它的属性和子元素,如果一个元素有属性或子元素,必须把 这种方法包含在它的ElementType声明中,或者是必须在它们自己的 ElementType 或 A ttributeType声明中进行前导声明。 <ElementType name='student' content='mixed'> <attribute type='studentID'/> <element type='name'/> <element type='GPA'/> </ElementType> 不同于DTDs,XML Schema允许有一个开放的内容模式,你可以进行定义数据类型、使用 默认值等等操作而不必限定内容。 在下面的schema中,<GPA> 元素的类型被定义并有一个默认值,但在 <student> 元素中 没有其他节点被声明。 <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-mic rosoft-com:datatypes"> <AttributeType name="scale" default="4.0"/> <ElementType name="GPA" content="textOnly" dt:type="float"> <attribute type="scale"/> </ElementType> <AttributeType name="studentID"/> <ElementType name="student" content="eltOnly" model="open" order="many "> <attribute type="studentID"/> <element type="GPA"/> </ElementType> </Schema> 上面的schema允许你只验证你所关心的区域,这使你对文档的验证级别有更多的控制, 并允许你使用schema提供的一些特性而不必严格确认。 尝试一下! 试着处理一下下面的XML文档的schema。 <order> <customer> <name>Fidelma McGinn</name> <phone_number>425-655-3393</phone_number> </customer> <item> <number>5523918</number> <description>shovel</description> <price>39.99<price> </item> <date_of_purchase>1998-10-23</date_of_purchase> <date_of_delivery>1998-11-03</date_of_delivery> </order> 如果你处理完schema,在XML Validator中运行 . 下载MSDN Online的区域中提供了一套 XML sample files, 包括一个有相关schema的XM L文档。下载这些示例程序可以与XML文档和schema一起运行。如果你想要根据一个sche ma来测试XML的有效性,可以从XML Validator 处下载文档或查看Mime Type Viewer中的 XML文件。 一些说明: ElementType和 AttributeType 声明必须放在attribute和element内容声明之前。例如 ,在上面的schema中,<GPA>元素的ElementType声明必须放在<student>元素的Element Type声明之前。 order属性的默认值是建立在content属性的值上的。当content值为“eltOnly”时,or der默认值是seq。当content值为“mixed”时,order默认值是“many”。see 如果想了 解有关这些缺省值的信息,可以查看 XML Schema Reference。
|
关键词: XML简明图文详细教程第6课 运用XML Schema