所以我正在编写一个新的 XSD,但遇到了一个小问题。现在我承认我在这些方面并不是最好的,但我本以为我所做的应该有效,但事实并非如此。
我所追求的是我有一个名为extraInfo
该元素最多可以有 42 个子元素,其名称任意,但只能是字符串类型。这是我所拥有的:
<xsd:element name="extraInfo" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="42" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
我本以为只要我传递类型为xsd:string
它应该只接受这些元素中的这种类型,但元素名称可以随意命名。但是我在下面收到错误type
的属性
s4s-att-not-allowed:属性“type”不能出现在元素“any”中。
我怎样才能得到它,以便我可以传入 42 个名称未知的元素,但将它们作为字符串类型?
Edit
所以基本上我们可能会有一个客户向我们传递以下内容
<extraInfo>
<logoUrl>http://www.google.com/logo.png</logoUrl>
<cssUrl>http://www.google.com/main.css</cssUrl>
</extraInfo>
但另一个客户超过了我们
<extraInfo>
<headerText>Hello World</headerText>
<footerText>Goodbye World</footerText>
</extraInfo>
我们无法保证元素名称的名称。我们所能保证的就是类型,即字符串,并且我们最多允许传入 42 个元素。(没有理由选择 42 个元素,除了它是所有问题的答案,对吗?基本上是凭空挑选出来的。)
XSD 1.1
请参阅评论中的 @IanRoberts 关于断言以下子元素不存在孙子元素的很好建议extraInfo
.
XSD 1.0
如果您想更好地控制类型extraInfo
子元素,您必须先指定它们的名称。
属性
或者,为什么不利用这样一个事实:属性值已被限制为不具有子元素并使用xsd:anyAttribute
反而:
<xsd:element name="extraInfo">
<xsd:complexType>
<xsd:anyAttribute processContents="skip" />
</xsd:complexType>
</xsd:element>
然后用户可以添加extraInfo
沿着这些思路:
<extraInfo
logoUrl="http://www.google.com/logo.png"
cssUrl="http://www.google.com/main.css"/>
and
<extraInfo
headerText="Hello World"
footerText="Goodbye World"/>
鉴于您希望仅允许字符串值,这是很自然的。
Elements(评论中每个OP问题的更新)
如果 42 的最大值约束对您很重要,您可以采用如下结构
<extraInfo>
<item name="logoUrl" value="http://www.google.com/logo.png"/>
<item name="cssUrl" value="http://www.google.com/main.css"/>
</extraInfo>
然后你可以限制数量item
XSD 1.0 中的元素很简单,通过@maxOccurs
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)