Pergunta

Estou tentando fazer com que uma lista não ordenada de variáveis ​​​​em var1 ocorra duas vezes e var2 ocorra infinitas vezes (o caso de uso no meu projeto é diferente).O elemento não me permite usar maxOccurs.

Existe alguma solução alternativa para o que estou tentando fazer?

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="testcomment">
    <xs:complexType>
      <xs:all>
        <xs:element name="var1" type="xs:string" maxOccurs="2" />
        <xs:element name="var2" type="xs:integer" maxOccurs="unbounded" />
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>
Foi útil?

Solução

O que você está tentando fazer parece que o tipo de elemento em sua lista pode ser ambíguo sem a leitura antecipada; nesse caso, não há solução alternativa no XSD por causa das classes de idiomas que ele pode descrever.

Você pode postar a parte relevante do seu XSD?


Atualizar:Não, você não pode fazer isso com XSD.As regras sobre o que você pode colocar em um <xs:all> elemento estão listados, por exemplo aqui.Essa restrição tem um nome - restrição UPA ou Unique Particle Attribution.Tem tudo a ver com ambiguidade e o site da Microsoft tem uma boa explicação de por que isso existe aqui.

Você pode alterar o layout do seu documento para eliminar a necessidade desse tipo de declaração ou procurar uma linguagem de esquema mais expressiva como RelaxeNG.

Outras dicas

Me deparei com o mesmo problema e há uma solução!Confira esta resposta:

https://stackoverflow.com/a/3827606/637142

<xs:element name="A">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="B"/>
      <xs:element ref="C"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

fácil, basta usar<xs:choice maxOccurs="unbounded"> em vez de <xs:all>.Isso dará o efeito que você procura.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top