gpt4 book ai didi

xml - 为什么我不能放一个 xs :all inside a xs:sequence?

转载 作者:数据小太阳 更新时间:2023-10-29 02:38:56 27 4
gpt4 key购买 nike

我对 XML Schema 还是有点陌生​​,我正在尝试在 Relax NG Compact 中做一些看起来像这样的事情:

test = element test{
element A {text},
element B {text},
(element C {text}? &
element D {text}?)
}

这意味着在 test 元素中包含 A,然后是 B,然后是以任意顺序 C 和 D,它们都是可选的。

按照我的看法,我应该可以简单地说

<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element name="A"/>
<xs:element name="B"/>
<xs:all>
<xs:element name="C"/>
<xs:element name="D"/>
</xs:all>
</xs:sequence>
</xs:complexType>
</xs:element>

但它不允许我输入 <xs:all><xs:sequence> 里面.说

s4s-elt-must-match.1: The content of 'sequence' must match (annotation?, (element | group | choice | sequence | any)*). A problem was found starting at: all.

所以我试着服用 <xs:all>来自 <xs:sequence>像这样:

<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element name="A" />
<xs:element name="B"/>
</xs:sequence>
<xs:all>
<xs:element name="C"/>
<xs:element name="D"/>
</xs:all>
</xs:complexType>
</xs:element>

但是现在还是不行,说

s4s-elt-invalid-content.1: The content of '#AnonType_test' is invalid. Element 'all' is invalid, misplaced, or occurs too often

所以我很困惑,因为它看起来很简单,但我不知道该怎么做。

最佳答案

你的困惑是可以理解的。问题是XSD设计是不规则的,不规则的设计往往会违背我们的预期。

这是一个解决方法,不幸的是,它更加冗长并且对于要排列的大量元素也不切实际:

  <xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element name="A"/>
<xs:element name="B"/>
<xs:choice minOccurs="0">
<xs:sequence>
<xs:element name="C"/>
<xs:element name="D" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="D"/>
<xs:element name="C" minOccurs="0"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>

另一种解决方法是强制排序;允许任何顺序在实践中通常并不重要。

关于xml - 为什么我不能放一个 xs :all inside a xs:sequence?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44790183/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com