这个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属性的架构?
答案 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中的其他一些错误。