xs:any 可以在 XSD 中的 xs:all 元素中吗?

Can xs:any be in a xs:all element in XSD?

我正在尝试从提供的 XSD 生成数据合同。 Svcutil.exe 向我抛出这个错误:

The 'http://www.w3.org/2001/XMLSchema:any' element is not supported in this context."

在 XSD 中查找,any 类型的元素出现了两次。这是第一次出现。

 <xs:element minOccurs="0" maxOccurs="1" name="Markup">
        <xs:complexType>
          <xs:all>
            <xs:any processContents="lax" />
          </xs:all>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>

根据我对此的研究,xs:any 似乎不能在 xs:all 元素中。但我找不到明确说明这一点的规范或等效规范。

xs:any可以出现在xs:all中吗?还是无效?

xs:any是否可以出现在XSD中的xs:all类型下,我还是不知道。但我现在知道,根据 https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-contract-schema-reference,您不能使用 svcutil 从 XSD 生成数据合同。

xs:complexType 内容专门将 xs:all 列为 forbidden... 所以我的 XSDs' 永远不会生成与 svcutil.exe.

XSD 1.0

,xs:anycannot在XSD中xs:all:

<all
  id = ID
  maxOccurs = 1 : 1
  minOccurs = (0 | 1) : 1
  {any attributes with non-schema namespace . . .}>
  Content: (annotation?, element*)
</all>

但是xs:any可以在xs:choicexs:sequence中:

<choice
  id = ID
  maxOccurs = (nonNegativeInteger | unbounded)  : 1
  minOccurs = nonNegativeInteger : 1
  {any attributes with non-schema namespace . . .}>
  Content: (annotation?, (element | group | choice | sequence | any)*)
</choice>

<sequence
  id = ID
  maxOccurs = (nonNegativeInteger | unbounded)  : 1
  minOccurs = nonNegativeInteger : 1
  {any attributes with non-schema namespace . . .}>
  Content: (annotation?, (element | group | choice | sequence | any)*)
</sequence>

因此您可以将 xs:all 换成 xs:choicexs:sequence,例如:

  <xs:element minOccurs="0" maxOccurs="1" name="Markup">
    <xs:complexType>
      <xs:sequence>
        <xs:any processContents="lax" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

和您的 XSD 遵守允许的内容模型。

XSD 1.1

,xs:anycan在XSD中xs:all:

<all
  id = ID
  maxOccurs = (0 | 1) : 1
  minOccurs = (0 | 1) : 1
  {any attributes with non-schema namespace . . .}>
  Content: (annotation?, (element | any | group)*)
</all>

但是,请注意 XSD 处理器必须符合 XSD 1.1;您发布的错误表明您的工具仅支持 XSD 1.0.