如何定义具有模式的XML模式ID属性?

时间:2010-10-05 03:51:04

标签: xml xsd definition

这个XML documentation似乎说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.

时出错

我是否正确定义了ID属性的架构?

1 个答案:

答案 0 :(得分:3)

如果您需要限制内置的简单数据类型,则应创建自己的simpleType。使用Derivation by Restriction。尝试这样的事情:

<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中的其他一些错误。