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

问题描述:

的XML允许可变数目后跟数字Q的属性,这样如何将XSD属性名称定义为正则表达式?

<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吗?

+0

http://*.com/questions/832542/xsd-attribute-and-element-validation – sreehari 2012-07-11 16:45:31

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> 
+0

这是我的后备计划.... – user1185461 2012-07-11 13:58:52

+0

您也可以使用自定义代码验证属性名称。例如,如果您正在使用Java,则可以设置一个自定义验证处理程序,以便为您的XML的每个元素调用。 – 2012-07-11 14:01:43

+0

属性可以验证。看到这个问题:http://*.com/questions/832542/xsd-attribute-and-element-validation – sreehari 2012-07-11 16:44:47

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