正在加载图片...
第七篇高级应用 DTD的语法不同于XML的语法,因而需要文档编写者另外的学习一套符号语言。而软件也 需要另外的一个解析器来对DTD文件进行解析 在DID中没有办法来定义能够从程序语言变量直接映射到ⅩML数据的数据类型和数 据格式。没有一组被人所熟知的基本的元素以供文档编写者选择。DTDs是ⅩML从其前辈 SGML那儿继承过来的(事实上,XML本身就是一种SGML的简化版本),这个相对比较 成熟的技术能够很快的让XML运行起来,并且能够让熟悉SGML的人对XML有更多的感 觉。然而,很快的人们就发现,XML需要一种更具表达能力的解决方案,而不仅仅是DTD。 定义元素需要指定元素的名称、元素的内容模式、元素的属性、以及内嵌的子元素 在 XML Schemas中,元素的内容模式是通过类型来定义的。一个服从于某个特定的 schema 的ⅹML文档只能按照 schema中定义的元素模式来编写,这同DTD的规则是一样的。元素 可以是简单类型的,也可以使复杂类型的。在 Schemas规范中定义了很多的简单类型,例 如: string, Integer和 decimal s简单类型的元素不能在包含子元素和属性,而复杂类型的 元素则能够嵌套子元素,并能够包含有属性。 我们来看看一个简单的定义元素的例子: element name="quantity"type="positive-integer"7> <element name="amount"type="decimal"/> 我们知道在面向对象的观点中,有聚集和继承的概念,可以在已有的类中衍生出新类。 在这儿 Schema借用了这些观点,用户也可以通过聚集和继承来在老元素的基础上定义新的 元素。聚集能够把一组已存在的元素组合成一个新的元素。继承则通过扩展已存在的元素来 定义一个新的元素,并且这个新的元素能够代表被继承的那个元素 比如,如果我们要从 decimal类型中派生一个新的 value元素,并让它有这样的内容模 式:< value unit=" Celsius">42</ value>,我们可以这样的定义: <element name="value> <complex Type base=&single; decimal&single; derived By=&single; extension&single <attribute name=&single, unit&single, type=&single, string &single; / element> 下面我们把time和vaue元素聚集到一个 measurement元素中,形成这样的内容模式: <time>2000-10-0812:00:00GMr<time <value unit="Celsius">42</value> 那么最终我们的 schema元素定义结果就应该是这样的: Element name=&single, measurement&single, type=&single, measurement&single; / <complex Type name=&single, measurement&single <element name=&single, time&single, type=&single, time&single; / <element name=&single, value&single; type=&single, value&single complex Type> 和上面的 schema等同DTD是: <!ELEMENT measurementtime, value)>第七篇 高级应用 DTD 的语法不同于 XML 的语法,因而需要文档编写者另外的学习一套符号语言。而软件也 需要另外的一个解析器来对 DTD 文件进行解析。 在 DTD 中没有办法来定义能够从程序语言变量直接映射到 XML 数据的数据类型和数 据格式。 没有一组被人所熟知的基本的元素以供文档编写者选择。DTDs 是 XML 从其前辈 SGML 那儿继承过来的(事实上,XML 本身就是一种 SGML 的简化版本),这个相对比较 成熟的技术能够很快的让 XML 运行起来,并且能够让熟悉 SGML 的人对 XML 有更多的感 觉。然而,很快的人们就发现,XML 需要一种更具表达能力的解决方案,而不仅仅是 DTD。 定义元素需要指定元素的名称、元素的内容模式、元素的属性、以及内嵌的子元素。 在 XML Schemas 中,元素的内容模式是通过类型来定义的。一个服从于某个特定的 schema 的 XML 文档只能按照 schema 中定义的元素模式来编写,这同 DTD 的规则是一样的。元素 可以是简单类型的,也可以使复杂类型的。在 Schemas 规范中定义了很多的简单类型,例 如: string,integer 和 decimal。简单类型的元素不能在包含子元素和属性,而复杂类型的 元素则能够嵌套子元素,并能够包含有属性。 我们来看看一个简单的定义元素的例子: <element name="quantity" type="positive-integer"/> <element name="amount" type="decimal"/> 我们知道在面向对象的观点中,有聚集和继承的概念,可以在已有的类中衍生出新类。 在这儿 Schema 借用了这些观点,用户也可以通过聚集和继承来在老元素的基础上定义新的 元素。聚集能够把一组已存在的元素组合成一个新的元素。继承则通过扩展已存在的元素来 定义一个新的元素,并且这个新的元素能够代表被继承的那个元素。 比如,如果我们要从 decimal 类型中派生一个新的 value 元素,并让它有这样的内容模 式:<value unit="Celsius">42</value>,我们可以这样的定义: <element name="value"> <complexType base=&single;decimal&single; derivedBy=&single;extension&single;> <attribute name=&single;unit&single; type=&single;string&single;/> </complexType> </element> 下面我们把 time 和 value 元素聚集到一个 measurement 元素中,形成这样的内容模式: <measurement> <time>2000-10-08 12:00:00 GMT<time/> <value unit="Celsius">42</value> 那么最终我们的 schema 元素定义结果就应该是这样的: <element name=&single;measurement&single; type=&single;measurement&single;/> <complexType name=&single;measurement&single;> <element name=&single;time&single; type=&single;time&single;/> <element name=&single;value&single; type=&single;value&single;/> </complexType> 和上面的 schema 等同 DTD 是: <!ELEMENT measurement (time, value)>
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有