java读取xml单个标签
W3C XML Schema由于其强大的数据键入和定义功能而已成为许多业务应用程序的核心。 但是数据模型并不总是静态的。 模式通常需要一些方法来允许随着时间的推移进行扩展,以适应新的信息和元素类型。 有几种方法可以根据需要扩展架构以包括新元素:本文介绍的六种策略提供了扩展单命名空间架构的技术。 使用多个名称空间扩展正在处理的数据需要其自己的文章。
注意:本文仅关注W3C XML Schema 1.0版。 W3C XML Schema工作组即将完成1.1版,但尚未批准,并且可能会更改。 此处的示例均基于当前规范。
通用元素
代码列表是随时间变化的数据的一个很好的例子。 代码列表是具有特定含义的唯一代码值的列表,例如产品描述符,常用术语以及国家或城市列表。 这些值通常存储在数据库行中,您可以随时间添加这些行,并用于在应用程序窗口中填充选择。
清单1中的简单颜色代码清单说明了如何在出现新数据选择时扩展模式。 它定义了一个简单的代码列表,其元素类型为color
,其中包含四个可能的元素,其中前三个被赋予了已知的颜色名称。 该组中的最后一个元素有时称为通用元素 ,旨在允许将任何值插入到name
属性中,从而使您可以随着时间的推移向列表中添加新颜色。 如果要在应用程序完成和部署后几个月选择新的颜色,则可以指定一种新的颜色(也许是紫色),并使用other
属性为name="purple"
元素。 验证后,允许<other>
元素,并且无需更改所需的架构即可继续工作。
清单1.定义可扩展颜色代码列表元素的示例模式
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="color">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="red" type="xs:string"/>
<xs:element name="blue" type="xs:string"/>
<xs:element name="green" type="xs:string"/>
<xs:element name="other">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
清单2是与使用通用元素扩展的与此模式相关联的有效数据的样本。
清单2.与颜色代码列表模式关联的有效数据实例
<color xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="color.xsd">
<red/>
<green/>
<other name="purple">cc00cc</other><!-- Extension data -->
<other name="orange">ee9944</other><!-- Extension data -->
</color>
如您所见,该架构并未定义名称为Purple或Orange的元素,但是由于使用了扩展技术,这些名称已包含在数据实例中并被解析为有效。 该技术在存在静态列表但不断添加新项目的地方有效。 数据的创建可能会稍微复杂一些,但是维护架构和相关应用程序会大大简化。 当然,此数据可以管理属性而不是元素中的所有颜色信息。
当数据实例中出现通用<other>
元素时,处理该数据需要进行特殊处理。 XQuery或XSLT样式表中的XPath语句可能会测试预定义的元素之一,并显示已知的颜色。 两种语言都可以选择已知元素名称之一进行相应处理,或者可以选择<other>
元素并读取name=
的属性值和颜色值的元素内容(在此以CSS样式值表示)相应的颜色)。
模块化架构组装
您可能出于多种原因将模式模块化,但是本节重点介绍使用模块化来扩展它们。 简而言之,创建几个模式模块并将其包含在基本模式中是扩展基本模式的一种形式。 清单3中的示例使用模式构造<xs:include>
引入模式模块。
清单3.使用xs:include引入模式模块
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Reference to External Module containing USaddress definiti