qualified and unqualified local elements (was: My schema validation is not working?)

Discussion in 'XML' started by C. M. Sperberg-McQueen, Jul 31, 2003.

  1. wooks () wrote:

    > <?xml version='1.0'?>
    > <userlogin xmlns="urn:faster:userlogin"
    > xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
    > <login>mick</login>
    > <password>brown</password>
    > </userlogin>


    > Above is my schema instance.


    Check.

    > Here is my schema as you can see it does 2 includes .


    > <?xml version="1.0"?>
    > <xsd:schema targetNamespace="urn:faster:userlogin"
    > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    > xmlns="urn:faster:userlogin">
    > <xsd:include schemaLocation="C:\Faster\App\Demo\DataTypes\login.xsd"
    > />
    > <xsd:include schemaLocation="C:\Faster\App\Demo\DataTypes\password.xsd"
    > />
    > <xsd:complexType name="userloginType">
    > <xsd:all>
    > <xsd:element name='login' type='login' />
    > <xsd:element name='password' type='password' />
    > </xsd:all>
    > </xsd:complexType>
    > <xsd:element name="userlogin" type="userloginType" />
    > </xsd:schema>
    >
    > Here are the 2 included schemas
    >
    > <?xml version="1.0"?>
    > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    > <xsd:simpleType name="login">
    > <xsd:restriction base="xsd:NCName">
    > <xsd:enumeration value="tom"/>
    > <xsd:enumeration value="dick"/>
    > <xsd:enumeration value="harry"/>
    > <xsd:minLength value="3"/>
    > </xsd:restriction>
    > </xsd:simpleType>
    > </xsd:schema>
    >
    > <?xml version="1.0"?>
    > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    > <xsd:simpleType name="password">
    > <xsd:restriction base="xsd:NCName">
    > <xsd:enumeration value="cruise"/>
    > <xsd:enumeration value="cheney"/>
    > <xsd:enumeration value="truman"/>
    > <xsd:minLength value="6"/>
    > </xsd:restriction>
    > </xsd:simpleType>
    > </xsd:schema>


    > The schema always seems to flag an error on the login field
    > regardless of the validation rules.


    > Can anyone help?


    I think the problem relates to the way the 'login' and 'password'
    elements are declared. When I validate the example using these schema
    documents, XSV gives me the following error message:

    file:///D:/schema/exx/wooks/di2.xml:4:4:
    Invalid per cvc-complex-type.1.2.4:
    element {urn:faster:userlogin}:login not allowed here (1)
    in element {urn:faster:userlogin}:userlogin,
    expecting [{None}:login,{None}:password]

    As well as (later on):

    file:///D:/schema/exx/wooks/di2.xml:4:4: Invalid per src-resolve:
    undeclared element {urn:faster:userlogin}:login

    file:///D:/schema/exx/wooks/di2.xml:5:4: Invalid per src-resolve:
    undeclared element {urn:faster:userlogin}:password

    From the first error message, we know that the schema processor is
    expecting the 'login' and 'password' elements to be unqualified (to
    be, as some people say, 'in the anonymous namespace'). We also know
    that the 'login' and 'password' elements in the instance are in the
    namespace urn:faster:userlogin -- both because the document instance
    has a default namespace declaration for that namespace, and because
    the schema processor tells us ("element {urn:faster:userlogin}:login
    not allowed here", as well as the later error messages) that what it
    found was indeed a 'login' element in namespace urn:faster:userlogin
    -- for which it found no declaration.

    The local elements are unqualified because the main schema document
    shown above has (by default) elementFormDefault="unqualified", which
    means that elements declared local to a complex type (here, 'login'
    and 'password') are not namespace-qualified. Some schema authors
    prefer this, reasoning by analogy with attributes with are local to an
    element and which are similarly namespace-unqualified; other schema
    authors prefer to set elementFormDefault="qualified" and associate all
    the elements declared in a given schema document with the target
    namespace given in the targetNamespace attribute of the schema
    element. Each kind of schema author tends not only to be appalled at
    the other kind's preference, but to be distressed to discover that
    anyone on earth could be so perverse as to think namespaces should
    work "that way". The XML Schema WG argued about this for a long time,
    and eventually we all agreed to take our hands off each others'
    throats and leave the decision to the schema author.

    So there are two ways to make your document instance work:

    (1) don't namespace-qualify the local elements in the instance. Make
    your instance be

    <?xml version='1.0'?>
    <ul:userlogin xmlns:ul="urn:faster:userlogin"
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
    <login>mick</login>
    <password>brown</password>
    </ul:userlogin>

    or

    <?xml version='1.0'?>
    <userlogin xmlns="urn:faster:userlogin"
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
    <login xmlns="">mick</login>
    <password xmlns="">brown</password>
    </userlogin>

    (2) do namespace-qualify the local elements in the schema. Make
    the schema element read

    <xsd:schema targetNamespace="urn:faster:userlogin"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="urn:faster:userlogin"
    elementFormDefault="qualified"
    >

    ...
    </xsl:schema>

    You can also specify that the 'login' and 'password' elements
    are namespace qualified without changing the default, thus:

    <xsd:complexType name="userloginType">
    <xsd:all>
    <xsd:element name="login" type="login" form="qualified"/>
    <xsd:element name='password' type='password' form="qualified"/>
    </xsd:all>
    </xsd:complexType>

    although I don't recommend it, since having some local elements be
    qualified and some be unqualified is a good recipe for confusion.

    I hope this helps.

    -C. M. Sperberg-McQueen
     
    C. M. Sperberg-McQueen, Jul 31, 2003
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Markus
    Replies:
    1
    Views:
    1,660
    Markus
    Nov 23, 2005
  2. qualified and unqualified types

    , Jul 8, 2005, in forum: C Programming
    Replies:
    1
    Views:
    340
    Suman
    Jul 8, 2005
  3. Wayne Shu
    Replies:
    4
    Views:
    786
  4. George2

    qualified name and unqualified name

    George2, Mar 7, 2008, in forum: C Programming
    Replies:
    0
    Views:
    398
    George2
    Mar 7, 2008
  5. Szabolcs Borsanyi

    Pointer to qualified poitner to qualified object

    Szabolcs Borsanyi, May 30, 2008, in forum: C Programming
    Replies:
    13
    Views:
    588
    Keith Thompson
    Jun 8, 2008
Loading...

Share This Page