I'm trying to generate data contracts from supplied XSD's. Svcutil.exe
is throwing this error at me:
The
'http://www.w3.org/2001/XMLSchema:any'
element is not supported in this context."
Looking in the XSD, element of type any
appear twice. This is the first time it appears.
<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>
From my research on this, it seems like xs:any
can't be in an xs:all
element. But I can't find a specification or equivalent that definitively shows this.
Can xs:any
appear in an xs:all
? Or is it not valid?
No, xs:any
cannot be in a xs:all
in XSD:
<all
id = ID
maxOccurs = 1 : 1
minOccurs = (0 | 1) : 1
{any attributes with non-schema namespace . . .}>
Content: (annotation?, element*)
</all>
But xs:any
can be in a xs:choice
or 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>
So you can instead wrap your xs:all
in either xs:choice
or xs:sequence
, e.g:
<xs:element minOccurs="0" maxOccurs="1" name="Markup">
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" />
</xs:sequence>
</xs:complexType>
</xs:element>
and your XSD adhere to the allowed content models.
Yes, xs:any
can be in a xs:all
in XSD:
<all
id = ID
maxOccurs = (0 | 1) : 1
minOccurs = (0 | 1) : 1
{any attributes with non-schema namespace . . .}>
Content: (annotation?, (element | any | group)*)
</all>
However, note that the XSD processor must be XSD 1.1 conformant; the error you've posted suggests that your tool only supports XSD 1.0.