Как определить атрибут идентификатора схемы XML с шаблоном? - PullRequest
2 голосов
/ 05 октября 2010

Эта XML документация , кажется, говорит о том, что производный тип ID поддерживает шаблон, но когда я пытаюсь определить его с помощью этого кода:

      <complexType name="CourseType">
          <attribute name="courseNumber" type="ID">
              <pattern value="[A-Z]{2}(\d{3}).(\d{3})" />
          </attribute>
          <attribute name="numOfCredits" type="university:CourseCredits" />
          <element name="course_name" type="university:MixedName" />
          <element name="course_professor" type="string" />
      </complexType>>


... Я получаю сообщение об ошибке в редакторе oXygen XML, в котором написано The content of 'courseNumber' must match (annotation?, (simpleType?)). A problem was found starting at: pattern.

Правильно ли я определяю свою схему для этого атрибута идентификатора?

1 Ответ

3 голосов
/ 05 октября 2010

Если вам нужно ограничить встроенный простой тип данных, вы должны создать свой собственный simpleType. Используйте Вывод по ограничению . Попробуйте что-то вроде этого:

<simpleType name='better-ID'>
  <restriction base='ID'>
    <pattern value='(\d{3}).(\d{3})'/>
  </restriction>
</simpleType>

<complexType name="CourseType">
      ...
      <attribute name="courseNumber" type="better-ID"/>
      <attribute name="numOfCredits" type="university:CourseCredits" />
</complexType>

Или вы можете просто вставить simpleType:

   <complexType name="CourseType">
          ...
          <attribute name="courseNumber">
              <simpleType>
                  <restriction base='ID'>
                     <pattern value='(\d{3}).(\d{3})'/>
                  </restriction>
              </simpleType>
          </attribute>
          <attribute name="numOfCredits" type="university:CourseCredits" />
    </complexType>

См. Также комментарии @jasso ниже, чтобы исправить некоторые другие ошибки в вашем XSD.

...