【发布时间】:2015-04-29 01:45:40
【问题描述】:
所以我正在编写一个新的 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 个未知名称的元素,但将它们作为类型字符串?
编辑
所以基本上我们可能有一个客户向我们传递以下内容
<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,除了它是所有问题的答案吗?基本上是从帽子里挑出来的。)
【问题讨论】:
-
你能添加一个可能的数据示例吗?
-
@FlorianSchmidinger 给我一分钟,我会举一个我可能期望的例子。
-
@FlorianSchmidinger 我添加了一些数据示例,希望对您有所帮助。我的印象是,如果您使用
element,则需要提供name属性。如果我错过了name属性,我可以传入任何元素名称吗? -
我不认为这可以在 XML Schema 1.0 中表示,但是如果您可以使用 1.1,那么您可以在不指定类型的情况下使用
xs:any,然后在complexType禁止extraInfo下的孙元素 -
我也无法做到这一点。我曾经很擅长这个,但那是前一段时间......
标签: xml xsd xsd-validation