如何定义具有模式的XML模式ID属性?
这个XML似乎表示ID派生类型支持一个模式,但当我试图用以下代码定义一个模式时:如何定义具有模式的XML模式ID属性?,xml,xsd,definition,Xml,Xsd,Definition,这个XML似乎表示ID派生类型支持一个模式,但当我试图用以下代码定义一个模式时: > …我在oXygen XML编辑器中发现一个错误,该错误表示“courseNumber”的内容必须匹配(注释?,(simpleType?)。从:pattern开始发现问题。 我是否为该ID属性正确定义了模式?如果需要限制内置的简单数据类型,则应创建自己的simpleType。使用。试着这样做: <simpleType name='better-ID'> <restriction ba
>
…我在oXygen XML编辑器中发现一个错误,该错误表示“courseNumber”的内容必须匹配(注释?,(simpleType?)。从:pattern开始发现问题。
我是否为该ID属性正确定义了模式?如果需要限制内置的简单数据类型,则应创建自己的
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>
另请参见下面的@jasso注释,以修复XSD中的其他一些错误。这个想法是正确的,但此解决方案存在一些问题
complexType
不能包含作为直接子级的元素。所有元素
都需要是单个所有
、选项
、组
或序列
元素的后代。属性也需要在元素容器后面定义。@kchau,@Shcheklein:OP指定的ID模式似乎也很奇怪。IIRC\d表示十进制数,因此可以包含一个点。因此,ID仅包含数字和1-3个点。但是它应该是一个有效的xs:ID
,但是ID
s必须是有效的NCNames,所以不能以数字开头!要么是我弄错了,要么是你的作业中有个“错误”。@jasso:谢谢你的更正。我无法修复我答案中的代码,因为我不知道@kchau到底想要什么-序列、组、选择。但是,修复了我的回答,提到了您的评论。\d在本例中没有为我选择小数点:,但我认为您已经指出了我做错的地方。我想保留匿名类型,但我定义错了。是的,我也省略了元素的分组。而且,是的,我修改了我的ID模式以包含一个两个字母的前缀,这样一个有效的ID看起来像“CS605.444”。谢谢你们的帮助。
<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>
<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>