在使用第一个元素时,在XSD上创建第二个元素

时间:2010-08-22 20:55:08

标签: xml xsd

我有一个简单的XML文件,有3个基本元素。第一个是必需的(minOccurs = 1),第二个和第三个是可选的。但是,如果使用第二个元素,那么我希望make第三个元素。他是XML:

<?xml version="1.0" encoding="utf-8" ?>
<resultado>
        <consulta fonte="1" origem="Origem">0</consulta>
        <status resultado="REGULAR">0</status>
        <informacoes>
                <informacao tipo="CPF" dado="23340058865"></informacao>
                <informacao tipo="Nome" dado="Nome Titular CPF"></informacao>
                <informacao tipo="Endereco" dado="Rua Sem Fim, 48"></informacao>
                <informacao tipo="Cidade" dado="Fim do Mundo"></informacao>
                <informacao tipo="Estado" dado="TO"></informacao>
                <informacao tipo="Cep" dado="93847832"></informacao>
                <informacao tipo="Fone" dado="5938476354"></informacao>
        </informacoes>
</resultado>

如果status元素已通过,则informacoes成为必需元素 以下是我的XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="codigoresultado">
        <xs:restriction base="xs:unsignedByte">
            <xs:enumeration value="0"/>
            <xs:enumeration value="1"/>
            <xs:enumeration value="2"/>
            <xs:enumeration value="3"/>
            <xs:enumeration value="4"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="resultadoconsulta">
        <xs:restriction base="xs:unsignedByte">
            <xs:enumeration value="0"/>
            <xs:enumeration value="1"/>
            <xs:enumeration value="2"/>
            <xs:enumeration value="3"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="resultado">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="consulta" minOccurs="1" maxOccurs="1">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="resultadoconsulta">
                                <xs:attribute name="fonte" type="xs:integer" use="required" />
                                <xs:attribute name="origem" type="xs:string" use="required" />
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="status" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="codigoresultado">
                                <xs:attribute name="resultado" type="xs:string" use="required" />
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="informacoes" minOccurs="0" >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element minOccurs="1" maxOccurs="unbounded" name="informacao">
                                <xs:complexType>
                                    <xs:attribute name="tipo" type="xs:string" use="required" />
                                    <xs:attribute name="dado" type="xs:string" use="required" />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

这可能吗?如果是的话,怎么样? 谢谢!

1 个答案:

答案 0 :(得分:1)

我唯一能看到的方法是将这两个元素捆绑成一个自己的<xs:sequence>,这是可选的。

如果存在,则必须存在两个元素(或者两者都可以省略)。