Как установить минимальную длину целого числа в схеме XML?

Я занимаюсь созданием схемы 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>

Вы имеете в виду, что хотите заполнить нулями слева, то есть от 0000, 0001 до 9999?

Greg 18.11.2008 23:25

Если заполнение не требуется, я просто добавил предложение «фиксированного» атрибута.

VonC 18.11.2008 23:26

Можем ли мы действительно назначить регулярное выражение, используя схему xml?

Sangram Nandkhile 24.02.2011 15:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
3
12 071
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как насчет ценностей в качестве дополнительного ограничения?

(minInclusive - maxInclusive)

Например ?

<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" />

Почему не отвечает на вопрос?

David Norman 18.11.2008 23:30

Первый комментарий был написан в то время, когда я еще не добавил «фиксированное» предложение к элементу totalDigits ;-)

VonC 18.11.2008 23:32

Древний вопрос ... но либо я не понимаю, либо "исправлено" не совсем означает то, что вы думаете. Моя интерпретация такова, что он не фиксирует его ровно до 4 цифр, но гарантирует, что любой тип, основанный на этом типе, не может указывать ничего, кроме 4.

Ian1971 17.03.2015 18:22

@ Ian1971, что возможно (6+ лет спустя, я немного не уверен в этой теме). У вас есть ссылка на документацию, которая может помочь?

VonC 17.03.2015 18:47

На самом деле в вашем ответе уже есть все, включая цитату и ссылку. Я просто думаю, что это было неправильно истолковано. Я заметил, потому что я использовал фиксированный, чтобы попытаться сделать то, что звучит так, как будто он делает, то есть исправить количество цифр, но моя схема проверялась как нормальная с таким количеством цифр или меньше.

Ian1971 24.03.2015 14:57

@ Ian1971 хорошо, что бы вы предложили, чтобы ответ на нет неверно истолковал как "исправленный"?

VonC 24.03.2015 15:14

Я думаю, что только ограничение minInclusive / maxInclusive или шаблон решает эту конкретную проблему, хотя было бы лучше иметь возможность сказать «ровно 4 цифры» через ограничение totalDigits.

Ian1971 24.03.2015 19:46

Я бы использовал базовый тип xs: gYear с дополнительными ограничивающими фасетами, если это необходимо. Для получения дополнительной информации может помочь это.

Другие вопросы по теме