如何将XSD属性名称定义为正则表达式?

时间:2012-07-11 13:47:41

标签: xml regex xsd

XML允许Q的可变数量的属性后跟一个数字,比如

<recognitionPattern Q0="12.5" Q1="12.5" Q2="12.5" Q3="12.5" Q4="12.5" Q5="12.5" Q6="12.5" Q7="12.5"/>

我目前的解决方案如下:

<xs:complexType name="PerQuarterDoubleHack"> <!-- YUCK! /> -->
<xs:attribute name="Q0"                 type="xs:double"       />
<xs:attribute name="Q1"                 type="xs:double"       />
<xs:attribute name="Q2"                 type="xs:double"       />
<xs:attribute name="Q3"                 type="xs:double"       />
<xs:attribute name="Q4"                 type="xs:double"       />
<xs:attribute name="Q5"                 type="xs:double"       />
<xs:attribute name="Q6"                 type="xs:double"       />
<xs:attribute name="Q7"                 type="xs:double"       />
</xs:complexType>

我已经看到很多正则表达式应用于该值,但从未使用过属性名称。 我有什么选择,而不是更改XML吗?

2 个答案:

答案 0 :(得分:1)

XML Schema不允许您对属性名称应用任何验证,只允许其。最好的办法是尽可能将XML更改为以下内容:

<recognitionPattern>
    <quarter id="0">12.55</quarter> <!-- equivalent to Q0 -->
    <quarter id="1">12.55</quarter> <!-- equivalent to Q1 -->
    <quarter id="2">12.55</quarter> <!-- equivalent to Q2 -->
    <quarter id="3">12.55</quarter> <!-- equivalent to Q3 -->
</recognitionPattern>

答案 1 :(得分:0)

这是一个非常糟糕的XML设计。通常,XML处理工具假定应用程序静态地知道所有元素和属性名称,如果不是这样,编写应用程序将很困难。如果有机会,请更改设计。