XSD: как ограничить количество символов в атрибуте строкового типа?

Есть много причин, по которым вы можете захотеть использовать ОСРВ. Они разнообразны & amp; Трудно сказать, в какой степени они относятся к вашей ситуации. (Примечание: я склонен думать так: RTOS подразумевает жесткое реальное время, которое подразумевает упреждающее ядро ​​...)

  • Оценить монотонный анализ (RMA) - если вы хотите использовать Оценить монотонный анализ , чтобы обеспечить соблюдение сроков, вы должны использовать упреждающий планировщик

  • Соблюдение сроков в реальном времени - даже без использования RMA с приоритетной ОСРВ на основе приоритетов ваш планировщик может помочь обеспечить соблюдение сроков. Как это ни парадоксально, ОСРВ обычно увеличивает задержку прерывания из-за критических секций в ядре, где прерывания обычно маскируются

  • Управление сложностью - определенно, RTOS (или большинство разновидностей ОС) может помочь с этим. Позволяя проекту быть разложенным на независимые потоки или процессы, и используя службы OS, такие как очереди сообщений, мьютексы, семафоры, флаги событий и т. Д., Для связи & amp; синхронизировать, ваш проект (по моему опыту и мнению) становится более управляемым. Я склонен работать над более крупными проектами, где большинство людей понимают концепцию защиты общих ресурсов, поэтому многие ошибки новичков не случаются. Но будьте осторожны, как только вы перейдете к многопоточному подходу, все может стать более сложным, пока вы не решите проблему.

  • Использование сторонних пакетов - многие ОСРВ предлагают другие программные компоненты, такие как стеки протоколов, файловые системы, драйверы устройств, пакеты графического интерфейса, загрузчики и другое промежуточное ПО, которое помогает вам создавать приложение быстрее, становясь почти «интегратором», чем магазин «Сделай сам».

  • Тестирование - да, определенно, вы можете думать о каждом потоке управления как о тестируемом компоненте с четко определенным интерфейсом, особенно если используется согласованный подход (такой как всегда блокировка в одно место в очереди сообщений). Конечно, это не является заменой для модульного, интеграционного, системного и т. Д. Тестирования.

  • Надежность / отказоустойчивость - ОСРВ также может обеспечивать поддержку MMU процессора (в вашем случае с PIC я не думаю, что это применимо). Это позволяет каждому потоку (или процессу) работать в своем собственном защищенном пространстве; потоки / процессы не могут «окунуться» в память друг друга и растоптать ее. Даже области устройства (MMIO) могут быть недоступны для некоторых (или всех) потоков. Строго говоря, вам не нужна ОСРВ, чтобы использовать MMU (или MPU) процессора, но эти два очень хорошо работают рука об руку.

Как правило, когда я могу разрабатывать с ОСРВ (или каким-либо типом упреждающего многозадачного режима), результат имеет тенденцию быть чище, более модульным, более корректным и более легким в обслуживании. Когда у меня есть возможность, я использую один.

Имейте в виду, что многопоточная разработка имеет некоторую кривую обучения. Если вы новичок в RTOS / многопоточной разработке, вас могут заинтересовать некоторые статьи Выбор RTOS , Опасности вытеснения и Введение в вытесняющую многозадачность .

И наконец, даже если вы не просили рекомендаций ... В дополнение ко многим многочисленным коммерческим ОСРВ, есть бесплатные предложения ( FreeRTOS является одним из самых популярных), и Квантовая платформа является управляемой событиями платформой, основанной на концепции активных объектов , которая включает упреждающее ядро. Существует множество вариантов , но я обнаружил, что наличие исходного кода (даже если ОСРВ не является бесплатной) является преимуществом, особенно. при отладке.

34
задан Gareth 27 February 2014 в 04:34
поделиться

3 ответа

Вам нужно создать такой простой тип:

  <xs:simpleType name="LimitedString">
    <xs:restriction base="xs:string">
      <xs:maxLength value="50" />
    </xs:restriction>
  </xs:simpleType>

, а затем использовать этот новый тип в своей схеме:

  <xs:complexType name="test">
    <xs:sequence>
      <xs:element name="abc" type="xs:String" />
    </xs:sequence>
    <xs:attribute type="LimitedString" name="myattr" />
  </xs:complexType>

Marc

63
ответ дан 18 November 2019 в 01:36
поделиться

Вы можете ограничить строку до количество таких символов:

<xs:simpleType name="threeCharString">
  <xs:annotation>
    <xs:documentation>3-char strings only</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:length value="3"/>
  </xs:restriction>
</xs:simpleType>

xs: length в приведенном выше примере ограничивает длину строки до ровно 3 символа. Вы также можете использовать xs: minLength и xs: maxlength или оба.

Вы можете предоставить такой шаблон:

<xs:simpleType name="fourCharAlphaString">
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z]{4}"/>
  </xs:restriction>
</xs:simpleType>

Выше сказано, 4 символа, любого из az, AZ. xs: pattern - это регулярное выражение, поэтому отправляйтесь с ним в город.

Вы можете ограничить строку определенным набором строк следующим образом:

<xs:simpleType name="iso3currency">
  <xs:annotation>
    <xs:documentation>ISO-4217 3-letter currency codes. Only a subset are defined here.</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:length value="3"/>
    <xs:enumeration value="AUD"/>
    <xs:enumeration value="BRL"/>
    <xs:enumeration value="CAD"/>
    <xs:enumeration value="CNY"/>
    <xs:enumeration value="EUR"/>
    <xs:enumeration value="GBP"/>
    <xs:enumeration value="INR"/>
    <xs:enumeration value="JPY"/>
    <xs:enumeration value="RUR"/>
    <xs:enumeration value="USD"/>
  </xs:restriction>
</xs:simpleType>
23
ответ дан 18 November 2019 в 01:36
поделиться

вы всегда можете определить максимальную длину строки в xsd. Просто добавьте атрибут manLength resp. minLength.

0
ответ дан 18 November 2019 в 01:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: