我正在尝试从提供的XSD生成数据协定。 pch2
向我抛出此错误:
在此上下文中不支持
Svcutil.exe
元素。“
在XSD中,类型'http://www.w3.org/2001/XMLSchema:any'
的元素出现了两次。这是它第一次出现。
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
中?还是无效?
答案 0 :(得分:2)
否,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遵守允许的内容模型。
是,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 。
答案 1 :(得分:0)
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列为禁止....。因此,我的XSD永远不会与svcutil.exe生成数据协定。