频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

W3C XML Schema 与文档类型定义

来源: 作者: 出处:巧巧读书 2007-12-14 进入讨论组
上一页 1 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至模式转换工具的两个链接。 

打开: http://www.qqread.com/xml-soap/j291092.html 更多文章 更多内容请看XML详解专题,或进入讨论组讨论。
上一页 1 2 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章