Re: Ways to declare an element without a type?

The XSD 1.0 spec says that the {type declaration} of an {element declaration} is:

The type definition corresponding to the <simpleType> or <complexType> element information item in the [children], if either is present, otherwise the type definition ·resolved· to by the ·actual value· of the type [attribute], otherwise the {type definition} of the element declaration ·resolved· to by the ·actual value· of the substitutionGroup [attribute], if present, otherwise the ·ur-type definition·.

So I don't know where you got @ref and @fixed from, and you've missed out @substitutionGroup.

Extracting schema information from raw XSD documents is quite tricky, and I usually advise against it: it's better generally to access the schema component model output by a schema processor.

There's also an edge case you have missed, inevitably: //xs:element will select an xs:element element appearing as a descendant of xs:annotation, but such an element does not constitute an element declaration.

Michael Kay
Saxonica

> On 19 Nov 2015, at 20:34, Costello, Roger L. <costello@mitre.org> wrote:
> 
> Hi Folks,
> 
> This element does not specify a type:
> 
>  <element name="foo" />
> 
> Consequently, in instance documents the content of <foo> can be any elements and any text.
> 
> I am trying to create an XPath expression that, when evaluated, returns all element declarations in a schema file that do not specify a type.
> 
> Here's the XPath expression that I created:
> 
>  //xs:element[ not(@type) and 
>    not(xs:simpleType) and 
>    not(xs:complexType) and 
>    not(@ref) and 
>    not(@fixed)]
> 
> Will that catch all the elements? Are there any "edge cases" that it misses?
> 
> /Roger
> 

Received on Thursday, 19 November 2015 21:20:01 UTC