unbounded - xml structure
Esquema XML W3C y el entero máximo para maxOccurs (2)
Aunque quizás sea un uso "técnicamente" correcto del atributo maxOccurs
, este uso no es (IMO) cómo se pretende utilizar el maxOccurs
.
Parece que el autor del esquema pretendía indicar que este elemento puede aparecer varias veces, en cuyo caso el valor correcto de la definición sería unbounded
.
Lo que la definición actual implica es que los sistemas que consumen este esquema se comportarán perfectamente de manera correcta para los recuentos de elementos hasta 4294967295
pero fallarán para algo más grande.
Supongo que este es un requisito técnico que podría tener sentido: muchos sistemas se han codificado como int32
como el número máximo de elementos, por lo que en un mundo ideal es posible que desee aplicar este límite, pero no creo que sea realmente razonable o Lo útil es intentar capturar en un esquema en el mundo real.
Además, si está enviando tantos elementos, entonces XML probablemente sea el formato de datos incorrecto.
Sugeriría que los autores del esquema usen el valor de atributo unbounded
o que usen valores que realmente coincidan con las limitaciones y requisitos de los sistemas que consumen este XML.
Trabajo en un esquema XML W3C (no escrito por mí). Una herramienta, xmllint, se niega a usar el esquema:
traceroute.xsd:658: element element: Schemas parser error : Element
''{http://www.w3.org/2001/XMLSchema}element'', attribute ''maxOccurs'': The value
''4294967295'' is not valid. Expected is ''(xs:nonNegativeInteger | unbounded)''.
4294967295 es 2 ^ 32-1 entonces, claramente, xmllint implementa números enteros con un número de 32bits firmado y eso no es suficiente.
¿Está bien xmllint? El estándar aparentemente no limita el tamaño de los enteros:
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#p-max_occurs http://www.w3.org/TR/2004/REC-xmlschema-2-20041028 /datatypes.html#nonNegativeInteger
El espacio de valor de nonNegativeInteger es el conjunto infinito {0,1,2, ...}.
Entonces, los implementadores deben usar enteros infinitos ...
¿Cuáles son las mejores prácticas?
¿Los implementadores deberían usar bigints o cosas similares? (En ese caso, xmllint está mal).
¿Deberían los autores del esquema limitarse a valores "razonables" para maxOccurs? (En ese caso, informaré el problema a los autores del esquema).
Finalmente, el esquema ha sido modificado por sus autores. Se ha publicado en RFC 5388 y ahora contiene:
<xs:element maxOccurs="2147483647" minOccurs="0"
name="Measurement">
<xs:complexType>
<xs:sequence>