[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XML-Schemas: purpose of elementFormDefault?

  • From: ht@c... (Henry S. Thompson)
  • To: Roger Costello <costello@m...>
  • Date: 03 Jul 2000 14:30:31 +0100

elementformdefault
Roger Costello <costello@m...> writes:

> "Element items validated by a global declaration must be qualified with
> a namespace URI. Control over whether element items validated by a local
> declaration must be namespace-qualified or not is provided by the form
> [attribute], whose default is provided by the elementFormDefault
> [attribute] on the enclosing schema, via its determination of {target
> namespace}"
> 
> What I learned from this is best explained with an example. Here's a
> schema with one global element declaration and several local element
> declarations:
> 
> <?xml version="1.0"?>
> <!DOCTYPE schema SYSTEM "part1.dtd">
> <schema xmlns="http://www.w3.org/1999/XMLSchema"
>      
> targetNamespace="http://www.publishing.org/namespaces/BookCatalogue"
>       elementFormDefault="unqualified">
>     <element name="BookCatalogue">
>         <complexType>
>              <sequence>
>                  <element name="Book" minOccurs="0"
> maxOccurs="unbounded">
>                      <complexType>
>                          <sequence>
>                              <element name="Title" type="string" 
>                                       minOccurs="1" maxOccurs="1"/>
>                              <element name="Author" type="string" 
>                                       minOccurs="1" maxOccurs="1"/>
>                              <element name="Date" type="string" 
>                                       minOccurs="1" maxOccurs="1"/>
>                              <element name="ISBN" type="string" 
>                                       minOccurs="1" maxOccurs="1"/>
>                              <element name="Publisher" type="string" 
>                                       minOccurs="1" maxOccurs="1"/>
>                          </sequence>
>                      </complexType>
>                  </element>
>             </sequence>
>         </complexType>
>     </element>
> </schema>
> 
> My understanding is that since elementFormDefault is set to
> "unqualified" that means in the instance document I do not have to (must
> not?) qualify the local elements:

Must not.

> <?xml version="1.0"?>
> <b:BookCatalogue 
>         xmlns:b="http://www.publishing.org/namespaces/BookCatalogue"
>         xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
>         xsi:schemaLocation=
>                   "http://www.publishing.org/namespaces/BookCatalogue
>                    BookCatalogue2.xsd">
>         <Book>
>                 <Title>My Life and Times</Title>
>                 <Author>Paul McCartney</Author>
>                 <Date>1998</Date>
>                 <ISBN>94303-12021-43892</ISBN>
>                 <Publisher>McMillin Publishing</Publisher>
>         </Book>
>         ...
> </b:BookCatalogue>
> 
> Notice how I have qualified the global element (BookCatalogue) but not
> the local elements (Book, Title, Author, Date, ISBN, Publisher).
> 
> Now I can explain where I am confused:  
> 
> [1] Does this mean that only the global element (BookCatalogue) gets
> validated, and not the local elements (Book, Title, Author, Date, ISBN,
> Publisher)?  If so, why would you ever want to do that - what's the
> value of the schema in such a case?

Nope, everything is validated.

> [2] It seems to me that when you create the schema, and you give a value
> for targetNamespace, then all the elements declared in the schema (both
> global and local elements) are associated with that namespace.  Is this
> not true?  So, why would you not  want to associate the local elements
> with the namespace in the instance document? The Primer tries to justify
> why you might want to do this, but I found the explanation less than
> satisfying:

Associated with, yes.  Literally 'in', not clearly.  Consider
attributes.  They are 'associated' with the namespace of their parent, 
but they're not directly 'in' it, because there can be two or more
attributes with different parents but the same name which are clearly
different, with different declarations.  Just so locally declared
elements -- they are associated with a namespace via their ancestry,
but not directly 'in' it, for the same reason:  the potential of
multiple different declarations.

> To summarize, I can be a technician and blindly follow the rules - if
> the schema states elementFormDefault="unqualified" then just qualify the
> global elements in the instance document; if the schema states
> elementFormDefault="qualified" then qualify all elements in the instance
> document.  But I have no clue as to why I am doing this, when to do one
> versus the other, and what it means in terms of validation.  Can someone
> please enlighten me?

The intention is to allow the style of your _instances_, as regards
element qualification, to be independent of the style of your
_schemas_, as regards local vs top-level element declaration.

Without the control given by the 'form' attribute (and
'xxxFormDefault'), one of two situations would obtain in instances:

1) elements declared locally are like attributes: unqualified;
2) elements declared locally are like elements declared at the
   top-level: qualified (leaving the no-namespace-at-all case to one
   side).

There are clearly problems with (1), for instance because it means
that changing from a local to a global declaration for an element
will have an impact on the appearance of valid instances;

There are clearly problems with (2), because it violates the
parallelism between locally declarated elements and attributes, and
requires excessive prefixation in multi-namespace documents.

The current design is a compromise to allow experimentation with the
options.  You pays your money and you takes your choice.  There's no
difference with respect to validation:  schema-validation is attempted 
on everything declared, regardless of where/how.

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@c...
		     URL: http://www.ltg.ed.ac.uk/~ht/

***************************************************************************
This is xml-dev, the mailing list for XML developers.
To unsubscribe, mailto:majordomo@x...&BODY=unsubscribe%20xml-dev
List archives are available at http://xml.org/archives/xml-dev/
***************************************************************************

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.