2008-11-18 8 views
2

Je travaille sur un schéma XML W3C (non écrit par moi). Un outil, xmllint, refuse d'utiliser le schéma:W3C XML Schema et l'entier maximum pour maxOccurs

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 est 2^32-1 donc, clairement, xmllint implémente des entiers avec nombre 32bits signé et cela ne suffit pas.

Est-ce que xmllint a raison? La norme ne semble pas limiter la taille des entiers:

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

L'espace de valeur de nonNegativeInteger est l'ensemble infini {0,1,2, ...}.

Ainsi, les développeurs sont censés utiliser des entiers infinis ...

Quelles sont les meilleures pratiques?

Les réalisateurs devraient-ils utiliser des bigints ou des objets similaires? (Dans ce cas, xmllint est erroné.)

auteurs de schémas devraient se limiter à des valeurs « raisonnables » pour maxOccurs? (Dans ce cas, je vais signaler le problème au schéma auteurs.)

Répondre

4

Tout en étant peut-être un bon « techniquement » l'utilisation de l'attribut maxOccurs, cet usage n'est pas (OMI) comment le maxOccurs est destiné à être utilisé.

Il semble que l'éditeur de schéma ait voulu que cet élément puisse apparaître un nombre quelconque de fois, auquel cas la valeur correcte de la définition serait unbounded. Ce que la définition actuelle implique est que les systèmes consommant ce schéma se comporteront parfaitement correctement pour les nombres d'éléments jusqu'à 4294967295 mais échoueront pour n'importe quoi de plus grand.

Je suppose que c'est une exigence technique qui pourrait avoir du sens - beaucoup de systèmes auront int32 codés comme le nombre maximum d'éléments donc dans un monde idéal, vous pourriez vouloir appliquer cette limite, mais je ne pense pas qu'il soit vraiment une chose raisonnable ou utile pour essayer de capturer dans un schéma dans le monde réel. En outre, si vous envoyez autant d'éléments, XML est probablement le mauvais format de données.

Je suggère que les auteurs de schéma utilisent la valeur d'attribut unbounded ou utilisent des valeurs qui correspondent réellement aux limitations et aux exigences des systèmes consommant ce code XML.

1

Enfin, le schéma a été modifié par ses auteurs. Il a été publié dans RFC 5388 et il contient maintenant:

 <xs:element maxOccurs="2147483647" minOccurs="0" 
       name="Measurement"> 
     <xs:complexType> 
     <xs:sequence> 
+0

Alors est-_ « 2147483647 » _ la valeur maximale que maxOccurs peut gérer? Quelle est la valeur maximale que maxOccurs peut gérer? @bortzmeyer – javaPlease42

Questions connexes