Altova XMLSpy 2023 Professional Edition

条件类型分配是XSD 1.1的一项功能,用于根据XML文档的内容确定元素的类型,更具体地说,通过元素的特性值或特性的存在与否。假设XML文档具有以下元素:

 

<publication kind="magazine">

...

</publication>

 

在Schema中,publication元素的类型可以被指定为根据其@kind特性值而变化。在Schema中,这可以通过使用alternative元素来实现,这是XSD 1.1中的新元素。指定多种类型,每种都在一个alternative元素中。

 

在下方截图中,Publication元素声明有三个alternative子元素,其中两个有test特性(@kind eq 'magazine'@kind eq 'book’)。第三个alternative元素没有test特性,而是有一个xs:error的简单类型分配(此分配在“详细信息”输入助手中完成,图表中未显示)。一旦触发该类型,将返回XML验证错误。

CTAAlternatives01

上述的代码片段如下:

 

<xs:complexType name="PublicationType">

  <xs:sequence>

 <xs:element name="Title" type="xs:string"/>

 <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>

 <xs:element name="Date" type="xs:gYear"/>

  </xs:sequence>

  <xs:attribute name="kind" type="xs:string"/>

</xs:complexType>

 

<xs:complexType name="MagazineType">

  <xs:complexContent>

 <xs:restriction base="PublicationType">

            <xs:sequence>

         <xs:element name="Title" type="xs:string"/>

         <xs:element name="Date" type="xs:gYear"/>

    </xs:sequence>

 </xs:restriction>

  </xs:complexContent>

</xs:complexType>

 

<xs:element name="Publication" type="PublicationType">

  <xs:alternative test="@kind eq 'magazine'" type="MagazineType"/>

  <xs:alternative test="@kind eq 'book'">

 <xs:complexType>

            <xs:complexContent>

         <xs:extension base="PublicationType">

              <xs:sequence>

                 <xs:element name="ISBN" type="xs:string"/>

                 <xs:element name="Publisher" type="xs:string"/>

            </xs:sequence>

         </xs:extension>

    </xs:complexContent>

 </xs:complexType>

  </xs:alternative>

  <xs:alternative type="xs:error"/>

</xs:element>

 

请注意以下几点:

 

alternative元素中第一个计算结果为true的alternative元素被选中。因此,alternative元素的顺序起着重要的作用。在内容模型视图中,可以通过将alternative元素框拖动至所需顺序来更改排序。

请注意,Publication元素有一个类型(PublicationType)。如果没有使用任何alternative元素,则此类型将用作默认类型。但是,在上方示例中,如果前面的alternative元素条件都返回false,则将使用类型为xs:erroralternative元素。

如果未满足alternative元素条件且元素没有默认类型,则为该元素分配anyType类型。在这种情况下,该元素可以有任何格式正确的XML内容。

alternative元素和简单类型xs:error都是XSD 1.1中的新功能。

 

内容模型视图编辑

您可以通过元素的上下文菜单(参见上方截图中的内容模型)将替代类型作为子级添加到元素声明中。

 

可以在“详细信息”输入助手中定义Alternative元素的类型。如果它是复杂类型,则会显示在alternative元素的扩展矩形中,并可以在那里进一步编辑(参见下方截图)。简单类型不会显示在图表中,但可以在“详细信息”输入助手的“简单类型”选项卡中定义。

CTABoxExpandedCTADetailsEH
注意:您可以通过“详细信息”输入助手中的xpathDefaultNamespace特性为XPath表达式指定命名空间。有关XPath默认命名空间的更多信息,请参见以下部分。

 

使用xpathDefaultNamespace

在XML Schema文档中声明的默认命名空间就是该XML Schema文档的默认命名空间。它适用于Schema文档中无前缀的元素名称,但不适用于Schema文档中XPath表达式中的无前缀的元素名称。

 

xpathDefaultNamespace特性(XSD 1.1中的一个新功能)用于指定XPath表达式中无前缀的元素名称所属的命名空间。Xpath默认命名空间的范围在声明它们的XML Schema元素中。xpathDefaultNamespace特性可以出现在以下XML Schema 1.1元素中:

 

xs:schema

xs:assertxs:assertion

xs:alternative

xs:selectorxs:field(在标识约束中)

 

xs:schemaxpathDefaultNamespace在XSD 1.1模式下的“Schema设置”对话框中((Schema设计 | Schema设置)定义。对于上方列出的其他元素,xpathDefaultNamespace特性是在其各自的“详细信息”输入助手中设置的(参见下方截图中的示例)。

AssertEHDetails02XPDNS

xs:schema声明XPath默认命名空间会为整个Schema范围声明XPath默认命名空间。您可以在允许使用xpathDefaultNamespace特性的元素上覆盖此声明(参见上方列表)。

 

xpathDefaultNamespace特性包含以下三个关键词之一,而不是包含实际的命名空间:

 

##targetNamespace:XPath默认命名空间将与Schema的目标命名空间相同

##defaultNamespace:XPath默认命名空间将与Schema的默认命名空间相同

##local:没有XPath默认命名空间

 

如果文档中没有声明XPath默认命名空间,则XPath表达式中的无前缀元素将不在任何命名空间中。

 

提示:XPath默认命名空间声明不适用于特性。

 

 

© 2017-2023 Altova GmbH