Я занимаюсь созданием схемы XML, и одно из моих значений - год. Таким образом, я хотел бы убедиться, что все значения содержат ровно 4 символа. Для этого я использую следующий синтаксис:
<xs:element name = "publish_year" maxOccurs = "1">
<xs:simpleType>
<xs:restriction base = "xs:positiveInteger">
<xs:totalDigits value = "4"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Если я правильно понимаю «totalDigits», кто-то может передать значение «publish_year», равное «2008» или «200». Оба будут действительными. Таким образом, как я могу структурировать свой XSD, чтобы гарантировать, что требуются 4 цифры? На первый взгляд, я предполагаю, что я бы использовал регулярное выражение, но я хотел бы знать, не упускаю ли я что-то, что уже есть (например, "totalDigits")
ОБНОВИТЬ:
Я выбрал следующее решение. Это может показаться излишним, но в этом есть смысл:
<xs:simpleType>
<xs:restriction base = "xs:positiveInteger">
<xs:totalDigits value = "4" fixed = "true"/>
<xs:minInclusive value = "1900"/>
<xs:pattern value = "^([1][9]\d\d|[2]\d\d\d)$"/>
</xs:restriction>
</xs:simpleType>
Если заполнение не требуется, я просто добавил предложение «фиксированного» атрибута.
Можем ли мы действительно назначить регулярное выражение, используя схему xml?





Как насчет ценностей в качестве дополнительного ограничения?
Например ?
<xs:minInclusive value = "1900"/> et <xs:maxInclusive value = "2008"/>
Но возвращаясь к ограничению totalDigits, почему вы не устанавливаете атрибут fixed в значение true?
If {fixed} is true, then types for which the current type is the {base type definition} cannot specify a value for totalDigits other than {value}.
<xs:totalDigits value = "4" fixed = "true" />
Почему не отвечает на вопрос?
Первый комментарий был написан в то время, когда я еще не добавил «фиксированное» предложение к элементу totalDigits ;-)
Древний вопрос ... но либо я не понимаю, либо "исправлено" не совсем означает то, что вы думаете. Моя интерпретация такова, что он не фиксирует его ровно до 4 цифр, но гарантирует, что любой тип, основанный на этом типе, не может указывать ничего, кроме 4.
@ Ian1971, что возможно (6+ лет спустя, я немного не уверен в этой теме). У вас есть ссылка на документацию, которая может помочь?
На самом деле в вашем ответе уже есть все, включая цитату и ссылку. Я просто думаю, что это было неправильно истолковано. Я заметил, потому что я использовал фиксированный, чтобы попытаться сделать то, что звучит так, как будто он делает, то есть исправить количество цифр, но моя схема проверялась как нормальная с таким количеством цифр или меньше.
@ Ian1971 хорошо, что бы вы предложили, чтобы ответ на нет неверно истолковал как "исправленный"?
Я думаю, что только ограничение minInclusive / maxInclusive или шаблон решает эту конкретную проблему, хотя было бы лучше иметь возможность сказать «ровно 4 цифры» через ограничение totalDigits.
Я бы использовал базовый тип xs: gYear с дополнительными ограничивающими фасетами, если это необходимо. Для получения дополнительной информации может помочь это.
Вы имеете в виду, что хотите заполнить нулями слева, то есть от 0000, 0001 до 9999?