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:any
cannot在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:choice
或xs: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:choice
或 xs: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:any
can在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.
我正在尝试从提供的 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:any
cannot在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:choice
或xs: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:choice
或 xs: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:any
can在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.