W3C XML-схема и максимальное целое число для maxOccurs - PullRequest
2 голосов
/ 19 ноября 2008

Я работаю над XML-схемой W3C (не написано мной). Один инструмент, xmllint, отказывается использовать схему:

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 равен 2 ^ 32-1, поэтому xmllint, очевидно, реализует целые 32-битное число со знаком и этого недостаточно.

Прав ли xmllint? Стандарт видимо не ограничивает размер целые числа:

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

Пространство значений nonNegativeInteger бесконечное множество {0,1,2, ...}.

Итак, разработчики должны использовать бесконечные целые числа ...

Каковы лучшие практики?

Должны ли разработчики использовать bigints или подобные вещи? (В таком случае, xmllint не так.)

Должны ли авторы схемы ограничивать себя "разумными" значениями для MaxOccurs? (В этом случае я сообщу о проблеме в схему авторы.)

Ответы [ 2 ]

4 голосов
/ 19 ноября 2008

Хотя это и является «технически» правильным использованием атрибута maxOccurs, это использование не (IMO), как maxOccurs предназначено для использования.

Похоже, что создатель схемы имел в виду, что этот элемент может встречаться любое количество раз, и в этом случае правильное значение определения будет unbounded.

То, что подразумевает текущее определение, состоит в том, что системы, использующие эту схему, будут вести себя совершенно корректно при количестве элементов до 4294967295, но не будут работать для чего-либо большего.

Я полагаю, что это техническое требование, которое может иметь смысл - многие системы будут иметь int32, закодированную как максимальное количество элементов, поэтому в идеальном мире вы можете захотеть применить этот предел, но я не думаю, что это это действительно разумная или полезная вещь, которую можно попробовать запечатлеть в схеме в реальном мире.

Кроме того, если вы отправляете столько элементов, возможно, XML является неправильным форматом данных.

Я бы предложил, чтобы авторы схемы использовали значение атрибута unbounded или использовали значения, которые фактически соответствуют ограничениям и требованиям систем, использующих этот XML.

1 голос
/ 11 декабря 2008

Наконец, схема была изменена ее авторами. Он был опубликован в RFC 5388 и теперь содержит:

     <xs:element maxOccurs="2147483647" minOccurs="0"
                 name="Measurement">
       <xs:complexType>
         <xs:sequence>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...