最新考研英语词汇xml
传统数据库专家对XML的最大批评之一是事实,即其层次结构性质会鼓励通过关系规范化来消除这种重复性。 这无疑是一个正确的抱怨,而XML成功的关键在于其灵活性和便利性胜过这种失败。 (当然,数据库纯粹主义者说XML的优势似乎比不那么严格要胜于它的问题。)在本文中,我提供了一些技巧,在某些情况下可以提供帮助。 但是,它不是XML层次结构限制问题的通用解决方案。
宁兴市粘贴
有时,当可以重用数据时会出现重复数据,但是不需要重用。 一个很好的例子是业务伙伴的帐单和送货地址。 清单1是包含此类地址的样本客户记录。
清单1.客户记录样本
<customer>
<name>Bards, Inc.</name>
<billing-address>1000 Lay Way, Burgh, UK</billing-address>
<shipping-address>1000 Lay Way, Burgh, UK</shipping-address>
<phone>606-217-8899</phone>
<email>bards@angles.co.uk</email>
</customer>
在这种情况下, billing-address
和shipping-address
是相同的字符串。 想象一下,该文件是填写表格的结果。 即使数据具有相同的值,也可以将其输入两个单独的字段中-这是数据不一致错误的众所周知的配方。 因此,许多此类表格都提供了一个复选框,因此您可以仅输入账单地址,然后将送货地址与账单地址自动匹配。 如果词汇表允许,则可以在XML数据中执行相同的操作。 XML 1.0通过使用ID类型使之成为可能。 清单2提供了一个示例。
清单2.使用ID类型来避免重复的客户记录格式
<!DOCTYPE customer [
<!ELEMENT customer (name, billing-address, shipping-address,
phone, email
)>
<!ELEMENT billing-address (#PCDATA)>
<!ATTLIST billing-address id ID #IMPLIED>
<!ELEMENT shipping-address (#PCDATA)>
<!ATTLIST shipping-address ref IDREF #IMPLIED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT email (#PCDATA)>
]>
<customer>
<name>Bards, Inc.</name>
<billing-address id="x">1000 Lay Way, Burgh, UK</billing-address>
<shipping-address ref="x"/>
<phone>606-217-8899</phone>
<email>bards@angles.co.uk</email>
</customer>
在这种情况下,通过允许billing-address
元素具有可选的属性id
来扩充词汇表,该属性被定义为唯一的ID类型。 shipping-address
元素还获得一个可选属性ref
,该属性定义为对唯一ID类型的引用。 出于本示例的目的,我将声明这些属性类型所需的DTD放入了内部子集。 然后,处理代码需要知道如何处理特殊属性,并正确推断送货地址的值。
另一种方法是使用XPath引用目标值,如清单3所示 。
清单3.使用XPath避免重复的客户记录格式
<customer>
<name>Bards, Inc.</name>
<billing-address>1000 Lay Way, Burgh, UK</billing-address>
<shipping-address>
<xpath-ref select="../billing-address"/>
</shipping-address>
<phone>606-217-8899</phone>
<email>bards@angles.co.uk</email>
</customer>
这次,我在词汇表中添加了一个特殊元素xpath-ref
,其中包含一个XPath表达式,该表达式将以其父元素作为上下文节点进行求值。 在此示例中,它选择文档的billing-address
元素元素节点名,然后将其转换为字符串。 再次,处理器将必须实现此引用,但是此XPath方法提供了更大的灵活性。 一方面,可以使用XPath函数和其他表达式工具来选择更复杂的值。
结语
您应谨慎使用此类内部引用。 使用ID方法,请确保维护文档的有效性;使用XPath方法,请注意修改导致XPath无法选择预期结果的情况。
设计XML词汇表时,请尽可能尝试减少重复。 您可以通过多种方式进行操作,内部引用可以成为一种便捷的工具。
翻译自: https://www.ibm.com/developerworks/xml/library/x-tipvocab/index.html
最新考研英语词汇xml