仅将 xsd:any 的类型限制为 xsd:string?

Restrict type of xsd:any to xsd:string only?

所以我正在写一个新的 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: Attribute 'type' cannot appear in element '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,除了它是所有问题的答案?基本上是从帽子里挑出来的。)

XSD 1.1

请参阅评论中关于断言 extraInfo 的子元素下不存在任何孙元素的评论中的@IanRoberts 好的建议。

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"/>

<extraInfo
    headerText="Hello World"
    footerText="Goodbye World"/>

考虑到您希望仅允许字符串值,这很自然。

元素(根据评论中的 OP 问题更新)

如果 max of 42 约束对你很重要,你可以使用

这样的结构
<extraInfo>
    <item name="logoUrl" value="http://www.google.com/logo.png"/>
    <item name="cssUrl" value="http://www.google.com/main.css"/>
</extraInfo>

然后您可以通过 @maxOccurs.

在 XSD 1.0 中简单地限制 item 元素的数量