XSD中的备用或可选标签

时间:2014-07-02 07:08:02

标签: java xml xml-parsing xsd

我有xsd用于XML的验证结构,它可以出现两种类型的相同标签。所以我必须在我的xsd中处理这两个scenerio。我搜索并发现备用和选择标签是为了完成我的要求,但无法插入适当的格式:

以下是标签的类型:

要么

<funcs>
<joint>
<functionName value=""/>
<indataType value=""/>
</joint>
</funcs>

<funcs path="myinfo.txt"/>

当我插入异常后发现的替代标签时:

Exception: s4s-elt-must-match.1: The content of 'funcs' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: alternative.

1 个答案:

答案 0 :(得分:0)

如果可以在您的案例中以不同方式命名'funcs'标签,我的回答会帮助您。

您可以使用此XSD:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xsd:element name="root">
        <xsd:complexType>
            <xsd:choice>
                <xsd:element ref="funcs_1"/>
                <xsd:element name="funcs_2" type="f2"/>
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="funcs_1">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="joint" type="f1" maxOccurs="1" minOccurs="1"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="f1">
        <xsd:sequence>
            <xsd:element name="functionName" type="f3">
            </xsd:element>
            <xsd:element name="indataType" type="f3">
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="f3">
        <xsd:attribute name="value" type="xsd:string" use="required"/>
    </xsd:complexType>
    <xsd:complexType name="f2">
        <xsd:attribute name="path" type="xsd:string" use="required"/>
    </xsd:complexType>
</xsd:schema>

要验证这两个XML,

XML1:

<root>
    <funcs_1>
        <joint>
            <functionName value=""/>
            <indataType value=""/>
        </joint>
    </funcs_1>
</root>

XML2:

<root>
    <funcs_2 path="myinfo.txt"/>
</root>