W3C home > Mailing lists > Public > xmlschema-dev@w3.org > January 2002

FW: User issues with Namespaces in Schema -- {form} qualified vs. unqualified, was [RE: Getting acquainted with schema]

From: David Ezell <David_E3@Verifone.Com>
Date: Sat, 12 Jan 2002 14:04:26 -0500
Message-ID: <472E220BA79DD11186340060B06B38D905BD86A6@TPANTMAIL1.verifone.com>
To: "'xmlschema-dev@w3.org'" <xmlschema-dev@w3.org>
Cc: "'w3c-xml-schema-ig@w3.org'" <w3c-xml-schema-ig@w3.org>


>  -----Original Message-----
> From: 	David Ezell  
> Sent:	Friday, January 11, 2002 6:54 PM
> To:	'xerces-j-user@xml.apache.org'
> Subject:	RE: Getting acquainted with schema
> 
> Braden:
> Your question deserves a thoughtful answer.  I hope the following qualifies
> :-).
> 
> I believe that your issue is *really* an XML1.0 + Namespaces issue.  But I
> believe that you can use a schema attribute (at least on my parser) to work
> around the problem.
> 
> Further, I take this opportunity (at the end) to show what I think is a better
> way 
> to handle this situation.
> 
> But first, your example...
> 
> It seems that your example will work if you specify
> elementFormDefault="qualified"
> in your schema, e.g.
> 
> ...
>     <schema targetNamespace="http://lnk.com/test"
>             xmlns="http://www.w3.org/2001/XMLSchema"
>             xmlns:test="http://lnk.com/test"
>             elementFormDefault="qualified">
> ...
> 
> To understand why this works, please examine the following instance document,
> which also validates against the altered schema:
> 
> test
> ====
> <?xml version="1.0"?>
> <test:Product xmlns:test="http://lnk.com/test" 
>               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
>               xsi:noNamespaceSchemaLocation="/SapphireVM1/xml/test/t1.xsd">
> 	<test:Msg Type="SitRep"/>
> </test:Product>
> 
> I've removed the default namespace binding, and added prefixes to all the
> elements.  In effect, this is what the schema now says:  "all local elements
> (defined in this schema) are qualified."  Please see section 3.1 of [1].
> 
> The issue with your example is that there is a difference at the infoset level
> between being in the default namespace and being unqualified (in no
> namespace).  
> Binding the default namespace in an instance (xmlns="...") has the side effect
> 
> of making the difference between elements in the default namespace
> indistinguishable 
> visually from unqualified (in no namespace) elements.  My solution above makes
> local elements qualified, and avoids the conundrum. 
> 
> An alternative
> ==============
> Because this situation is far from desirable, I personally design my schemas
> and instance documents as follows.  (I note beforehand that this way of doing
> things goes against some people's published "best practices".)
> 
> schema
> ======
> <?xml version="1.0" encoding="UTF-8"?>
> <schema targetNamespace="http://lnk.com/test"
> xmlns="http://www.w3.org/2001/XMLSchema" 
>         xmlns:test="http://lnk.com/test" elementFormDefault="unqualified">
> 	<element name="Product" type="test:ProductType"/>
> 	<element name="GlobMsg" type="string"/>
> 	<complexType name="ProductType">
> 		<sequence>
> 			<element name="Msg" type="test:MsgType"/>
> 			<element ref="test:GlobMsg" minOccurs="0"/>
> 		</sequence>
> 	</complexType>
> 	<complexType name="MsgType">
> 		<attribute name="Type" type="string"/>
> 	</complexType>
> </schema>
> 
> instance
> ========
> <?xml version="1.0"?>
> <test:Product xmlns:test="http://lnk.com/test" 
>               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
>               xsi:schemaLocation="http://lnk.com/test
> /SapphireVM1/xml/test/t2.xsd">
> 	<Msg Type="SitRep"/>
> 	<test:GlobMsg>hello world</test:GlobMsg>
> </test:Product>
> 
> Note the following changes:  
> 1) elementFormDefault="unqualified" in the Schema (for clarity... it's the
> default).
> 2) "noNamespaceSchemaLocation" has been traded for "schemaLocation" in the
>    instance.
> 3) there is no xmlns="..." in the instance.
> 
> With those changes, elements defined in the "http://lnk.com/test" namespace
> are clearly identified in the instance.  Also, elements which are locally
> defined are clearly identified (they don't have a prefix).  I added an
> element (GlobMsg) to demonstrate the difference.  And you don't have the
> disturbing ambiguity evident in your original example.
> 
> N.B. this makes locally defined elements behave a *lot* like attributes with
> regard to namespaces.
> 
> I personally view the use of non-prefixed elements (i.e. setting xmlns="..."
> in an
> instance) to be a backward compatibility mechanism.  Others may disagree.
> 
> Hope this helps,
> David Ezell
> VeriFone, Inc.
> 
> 
> 	
> 
> 
> [1] http://www.w3.org/TR/xmlschema-0/
> 
> -----Original Message-----
> From: Braden McDaniel [mailto:braden@lnk.com]
> Sent: Friday, January 11, 2002 12:02 PM
> To: xerces-j-user@xml.apache.org
> Subject: Re: Getting acquainted with schema
> 
> 
> On Thu, 2002-01-10 at 17:29, John Utz wrote:
> > hello braden;
> > 
> > 'tis generally difficult to be helpful without a copy of your schema.
> 
> Here are pared-down versions of the schema and the document I'm trying
> to validate:
> 
>     test.xsd
>     --------
>     <?xml version="1.0" encoding="UTF-8"?>
>     
>     <schema targetNamespace="http://lnk.com/test"
>             xmlns="http://www.w3.org/2001/XMLSchema"
>             xmlns:test="http://lnk.com/test">
>     
>       <element name="Product" type="test:ProductType"/>
>       
>       <complexType name="ProductType">
>         <sequence>
>           <element name="Msg" type="test:MsgType"/>
>         </sequence>
>       </complexType>
>     
>       <complexType name="MsgType">
>         <attribute name="Type" type="string"/>
>       </complexType>
>     
>     </schema>
>     
>     
>     test.xml
>     --------
>     <?xml version="1.0"?>
>     
>     <Product xmlns="http://lnk.com/test"
>              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>              xsi:schemaLocation="http://lnk.com/test test.xsd">
>       <Msg Type="SitRep">
>       </Msg>
>     </Product>
>     
> 
> Again, here is the error message:
> 
>     [Error] test.xml:6:22: cvc-complex-type.2.4.a: Invalid content starting
> with element 'Msg'. The content must match '("":Msg)'.
> 
> I'm still thinking I'm doing something silly with namespace syntax; but
> I can't figure out what.
> 
> -- 
> Braden N. McDaniel
> Modeling/Simulation Engineer, SAIC Advanced Systems Group
> e-mail: braden.n.mcdaniel@saic.com
> telephone: (301) 927-3223 x113
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: xerces-j-user-unsubscribe@xml.apache.org
> For additional commands, e-mail: xerces-j-user-help@xml.apache.org
> 
> 
Received on Saturday, 12 January 2002 14:04:32 GMT

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