W3C home > Mailing lists > Public > xmlschema-dev@w3.org > November 2009

Re: Possible to restrict top-level xs:element names?

From: Kevin Braun <kbraun@obj-sys.com>
Date: Fri, 06 Nov 2009 14:30:11 -0500
Message-ID: <4AF47943.5070402@obj-sys.com>
To: kennardconsulting <richard@kennardconsulting.com>
CC: xmlschema-dev@w3.org
I'm not quite sure what you are asking.  Are you trying to restrict how 
your schema can be extended, or are you trying to restrict what is 
allowed in an instance document?  

Perhaps you have a conceptual misunderstanding?  Note that

<xs:schema ...>
   <xs:element name="foo"/>
   <xs:element name="bar"/>
</xs:schema>

is not the same as

<xs:schema ...>
   <xs:choice>
      <xs:element name="foo"/>
      <xs:element name="bar"/>
   </xs:choice>
</xs:schema>

(which isn't legal btw).

That is, the children of your <schema> element do not represent a model 
for your instance documents, which is perhaps how you are thinking of 
it?  Rather, they declare the elements, attributes, and types according 
to which an instance document may be validated.  (Note by the way, that 
there are different approaches to validating documents against schemas, 
see 
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#validation_outcome).

I don't believe you can prevent someone from including your schema 
document into theirs while at the same time adding more global elements, 
if that's what you are trying to avoid.

Kevin

-- 
Objective Systems, Inc.
REAL WORLD ASN.1 AND XML SOLUTIONS
Tel: +1 (484) 875-9841
Fax: +1 (484) 875-9830
Toll-free: (877) 307-6855 (USA only)
http://www.obj-sys.com



On 11/6/2009 1:58 AM, kennardconsulting wrote:
> Hi guys,
>
> I'm generating a bunch of XML Schemas that look roughly like:
>
> <xs:schema ...>
>    <xs:element name="foo"/>
>    <xs:element name="bar"/>
> </xs:schema>
>
> You can see the actual ones  http://metawidget.org/xsd here . My question
> is, this schema allows me to declare 'foo' and 'bar' in my XML document, but
> doesn't restrict me declaring, say, 'baz'. I was expecting something like...
>
> <xs:schema final="#all">
>
> ....so that I could 'close' the set of possible xs:element names. Or maybe
> that the set was closed by default and I'd need...
>
> <xs:schema ...>
>    <xs:element name="foo"/>
>    <xs:element name="bar"/>
>    <xs:any />
> </xs:schema>
>
> ....to make it open. But instead the set of top-level xs:element names
> appears 'open' by default and I can't find a way to close it? I have looked
> all over the specs and in this forum, sorry if I'm being dumb.
>
> Regards,
>
> Richard.
>   
Received on Friday, 6 November 2009 19:32:40 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:15:15 GMT