科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道W3C XML Schema 与文档类型定义

W3C XML Schema 与文档类型定义

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

许多开发者都期待着 XML 模式能够很快取代 DTD 用于指定 XML 文档类型。尽管 David Mertz 相信 XML 模式在开发者宝库中是一种无价工具,但他对该模式将替代 DTD 持怀疑态度。

作者:中国IT实验室 来源:中国IT实验室 2007年9月22日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

出现约束


    除了强大的类型声明以外,XML 模式还在 DTD声明子元素模式的基数性能力的基础上进行了改进。不过,DTD用于表达每个出现约束(基数性)的方法比 XML模式总是笨拙许多。 

     在 DTD中,符号: ? 、 * 和 + 分别指定“零或一”、“零或多个”、“一个或多个”,其中一个量化了基数性。即,除了问号有能力说:“有或没有”以外,DTD语法中似乎没有可以限制给定模式出现次数的东西(无论是单一子标记还是嵌套的一系列)。因此如何表达上面模式示例中 1-5 个 prodName 的出现似乎是个问题。同样地,如果没有 XML 模式属性 minOccurs ,我们似乎就无法表达让某个事物出现特定次数的需求(而非“至少一次”)。实际上,DTD的最小量词虽然有时不是很讲究,但已经够好的了。下面是等价的约束: 

清单 3:“七到十二”个甜面圈的 XML模式语法 


<xsd:element name="donutorder">
 <xsd:complexType>
 <xsd:sequence>
 <xsd:element name="donut" type="xsd:string"
 minOccurs="7" maxOccurs="12" />
 </xsd:sequence>
 </xsd:complexType>
</xsd:element>


<!ELEMENT donut (#PCDATA)>
<!ELEMENT donutorder
 (donut,donut,donut,donut,donut,donut,donut,
 donut?,donut?,donut?,donut?,donut?)


当然,如果获得大笔订单,DTD看上去开始 真的很糟糕! 


枚举


无论是 DTD 还是 W3C XML Schema都允许在属性中使用枚举类型,但模式是非常了不起的进步,因为它们还可以在元素内容中允许使用枚举类型。我认为,DTD真正的缺点在于它缺乏这种能力。而且,模式的枚举方法非常全面而优秀。一个专门的 simpleType 可以包含一个枚举 面。这样的 simpleType 自动适合于属性或元素值类型。 

让我们举例说明每种语法:

清单 4:用于枚举属性的 XML模式语法 


<xsd:simpleType name="shoe_color">
 <xsd:restriction base="xsd:string">
 <xsd:enumeration value="red"/>
 <xsd:enumeration value="green"/>
 <xsd:enumeration value="blue"/>
 <xsd:enumeration value="yellow"/>
 </xsd:restriction>
</xsd:simpleType>
<xsd:element name="person" type="person_type">
 <xsd:attribute name="shoes" type="shoe_color"/>
</xsd:element>


<!ATTLIST person shoes (red | green | blue | yellow)>


    DTD属性声明看来还算不错(可能在简明性方面更好),但如果您的模型在元素内容中放入 shoe_color ,DTD 就变得很直截了当: 

清单 5:用于枚举元素的 XML模式语法 


    <xsd:element name="shoes" type="shoe_color">
W3C XML Schema 可以让 XML程序员表达一组新的对文档的声明性约束,而这是 DTD做得不够的地方。对许多程序员来说,在模式中使用 XML 实例语法还会对XML任务的不同部分产生更大的不一致性(当然,其他人不同意这种说法)。模式的目标当然是随着它们为人们逐步了解,以及开发者增强更多用于它们的工具,而在重要性和作用域方面得到增长。 

    一种在模式工作开始时得到飞跃的方法是将从现有 DTD 到 XML模式格式的转换自动化。很明显,自动转换无法对 XML模式本身添加新的表达能力;但自动化可以创建好的模板,从中指定人们希望施加的特定类型约束。 参考资料部分提供了到自动 DTD至模式转换工具的两个链接。 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章