2010-03-02 65 views
10

我试图让var1中变量的无序列表发生两次,而var2发生在无限次(我的项目中的用例不同)。该元素不允许我使用maxOccurs。XSD不允许我在所有指标中都有无界限

有什么解决我想要做的?

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="testcomment"> 
    <xs:complexType> 
     <xs:all> 
     <xs:element name="var1" type="xs:string" maxOccurs="2" /> 
     <xs:element name="var2" type="xs:integer" maxOccurs="unbounded" /> 
     </xs:all> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+2

http://stackoverflow.com/a/3827606/637142 – 2013-05-10 15:14:24

回答

1

什么你试图做听起来像你的列表中的元素的类型不读,提前可能是不明确的,在这种情况下,周围有没有工作XSD因为语言能形容的类。

你能发布你的XSD的相关部分吗?


更新:不,你不能用XSD来做到这一点。列出了有关<xs:all>元素的规则,例如here。该约束有一个名称 - UPA或唯一粒子归因约束。这一切都与模糊不清,微软网站有一个很好的解释为什么存在here

您可以更改文档布局以消除对此类声明的需求,也可以使用更具表现力的模式语言(如RelaxNG)。

+0

如何发布代码在stackoverflow ..我很新的这 – Vignesh 2010-03-02 10:27:21

+0

你做了,几分钟前。将它贴回来,突出显示它,然后单击编辑器上的小按钮(看起来像二进制文件(10101)),它会缩进您的XML,这会使其正确显示。 – Brabster 2010-03-02 10:31:23

+0

是的..谢谢..我已经发布了代码.. :) – Vignesh 2010-03-02 10:35:47

3

容易,只需使用<xs:choice maxOccurs="unbounded">代替<xs:all>。这会产生你正在寻找的效果。