Re: Simple question on elements constraints

Michael Anderson <michael@research.canon.com.au> writes:

> Adalbert Wysocki wrote:
> 
> > Hi all,
> > I have a very simple question but it better to ask experienced people
> > rather than write dirty thinks.
> > The context is the validation of XML documents using XMLSchema.
> > How can I specify that an element must have a fixed value and cannot
> > have an empty one.
> >
> > example:
> > -------
> > <?xml version="1.0"?>
> > <contract>
> >   <id></id>
> > </contract>
> >
> > This document is not valid because the element 'id' is empty whereas
> > it should be filled with a value and this value equals for example
> > '3000'.
> >
> > I tryed following:
> > .....
> > <xsd:element name="id" type="noEmptyElement" fixed="3000"/>
> > ....
> > <xsd:simpleType name="noEmptyElement">
> >   <xsd:restriction base="xsd:string">
> >     <minLength value="1"/>
> >   </xsd:restriction>
> > </xsd:simpleType>
> > ...
> 
> Quoting from Structures 3.3
> "If fixed is specified, then the element's content must either be empty,
> in which case fixed behaves as default, or it must match the supplied
> constraint string"
> 
> So IMO, it comes down to what is -
> <id></id>
> If this is an _empty_string_ but not an _empty_content_, then this
> instance should fail your schema and the validator should pick this up
> (as you want it to).  I believe that this is the case as in order to
> specify an _empty_content_ one should use the xsi:null="true" in the
> instance.  In which case, if you want to have instances being forced to
> write "3000" and not allowing _empty_content_, just have
> <xsd:element name="id" type="xsd:string" nullable="false" fixed="3000"/>
> 
> or, using defaults, just
> <xsd:element name="id" fixed="3000"/>
> 
> However, this is just my interpretation of the quote above "element's
> content must either be empty,".  There are a few ways this could be
> interpreted

Sorry, you're reading too much into this:  empty means no content,
that's all, so your example above is fine and will attract the
default, thereby defeating the stated intent of the author of the
original question.> 

> This analysis assumes that <id></id> is an empty string and not an empty
> content.

This distinction doesn't really exist in the way you're suggesting.

ht
-- 
  Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
          W3C Fellow 1999--2001, part-time member of W3C Team
     2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
	    Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
		     URL: http://www.ltg.ed.ac.uk/~ht/

Received on Wednesday, 24 January 2001 03:41:49 UTC