O XSD não me permite ter limites ilimitados dentro de todos os indicadores
-
23-09-2019 - |
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>
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.