Fixed attribute and multiple namespaces issue (Xerces-C 2.7.0)

Discussion in 'XML' started by Nicolas, Feb 22, 2006.

  1. Nicolas

    Nicolas Guest

    Hi everybody,

    I'm stuck for a couple of days now to the following issue, concerning
    fixed/default attributes and multiple namespaces. Any help would be
    greatly appreciated...

    I'm using Xerces C++ 2.7.0.

    Here are two XML Schemas:

    SCHEMA1.XSD
    -----------
    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:sch="http://schema2"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://schema1"
    targetNamespace="http://schema1"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">
    <xsd:import namespace="http://schema2" schemaLocation="schema2.xsd"/>
    <xsd:element name="myelement">
    <xsd:complexType>
    <xsd:choice maxOccurs="unbounded">
    <xsd:element name="mysubelement" type="subelementType"/>
    </xsd:choice>
    </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="subelementType">
    <xsd:attribute name="type" type="xsd:integer"/>
    <xsd:attributeGroup ref="sch:myattGroup"/>
    </xsd:complexType>
    </xsd:schema>

    SCHEMA2.XSD
    -----------
    <?xml version="1.0" encoding="UTF-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://schema2"
    elementFormDefault="qualified">
    <attributeGroup name="myattGroup">
    <attribute name="type" type="string" fixed="simple"
    form="qualified"/>
    </attributeGroup>
    </schema>


    And let's consider a simple document:

    <?xml version="1.0" encoding="UTF-8"?>
    <myelement xmlns="http://schema1"
    xmlns:sch="http://schema2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://schema1 schema1.xsd">
    <mysubelement type="34"/>
    </myelement>


    I open the document with XercesDOMPArser

    DOMXMLparser->setValidationScheme(XercesDOMParser::Val_Auto);
    DOMXMLparser->setDoNamespaces(true);
    DOMXMLparser->setDoSchema(true);
    DOMXMLparser->setValidationSchemaFullChecking(true);
    DOMXMLparser->parse(filename);

    and, as expected, there are two "type" attributes for element
    "mysubelement".
    One type="34" with NULL NamespaceURI, which corresponds to schema1,
    and one type="simple" with NamespaceURI="http://schema2" which
    corresponds
    to schema2 (the latter's value is fixed).

    Well, now I delete the type="34" attribute with:

    DOMNamedNodeMap* atts = parent->getAttributes(); // --> parent =
    mysubelement
    atts->removeNamedItemNS(NULL, attName); // --> attName = "type"

    Xerces deletes the type="34", but mysubelement still has 2 attributes
    (!!!) :
    Both attributes have the name "type", they both have the value "simple"
    and the one
    has NULL NamespaceURI and the other has "http://schema2" NamespaceURI.

    It's like Xerces added an attribute by itself with :
    name = "type"
    value = "simple"
    namespace = NULL Namespace.

    Am I missing something? Is this a known issue?...

    Thanks in advance...

    Nicolas
    Nicolas, Feb 22, 2006
    #1
    1. Advertising

  2. When default attribute values are defined in the DTD, the DOM is
    expected to reinstantiate them with the default value when an explicit
    setting is removed. As of DOM Level 3, a DOM may (but is not required
    to) do the same for schema-defined default attributes.

    http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-6D6AC0F9

    Basically, if there is a default defined in the DTD or Schema, it
    really is a default and you can't remove the attribute entirely. All you
    can do is override it to a different value.

    If that isn't what you wanted, you shouln't have defined it as a default.

    --
    () ASCII Ribbon Campaign | Joe Kesselman
    /\ Stamp out HTML e-mail! | System architexture and kinetic poetry
    Joe Kesselman, Feb 22, 2006
    #2
    1. Advertising

  3. Nicolas

    Nicolas Guest

    Joe thanks indeed for your answer...

    I know that DOM has to (or may) re-instantiate a fixed/default
    attribute if the latter
    is deleted.

    This is not the problem, though.

    As I described in my initial post, the problem
    is that Xerces instantiates an attribute with its fixed value EVEN
    THOUGH
    such an attribute already exists (was never deleted!!!). As a
    consequence,
    DOM ends up with two attributes of the same name, the same value
    (the fixed one) and different namespaces (one has NULL, the other has
    the
    correct one). Note that this attribute is defined as "form="qualified""
    in
    the Schema.

    Thanks again.

    Nicolas
    Nicolas, Feb 22, 2006
    #3
  4. Nicolas wrote:
    > DOM ends up with two attributes of the same name, the same value
    > (the fixed one) and different namespaces (one has NULL, the other has
    > the
    > correct one).


    Sorry; misread the problem description.

    If your description is accurate, that sounds like a bug in their
    implementation of this feature. Report a bug against Xerces-C.


    --
    Joe Kesselman / Beware the fury of a patient man. -- John Dryden
    Joseph Kesselman, Feb 22, 2006
    #4
    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. johnp
    Replies:
    4
    Views:
    3,666
    Toby Inkster
    May 23, 2005
  2. PA
    Replies:
    0
    Views:
    390
  3. cvissy
    Replies:
    0
    Views:
    604
    cvissy
    Nov 16, 2004
  4. Mark
    Replies:
    1
    Views:
    646
    Philippe Poulard
    Apr 6, 2005
  5. VanOrton
    Replies:
    2
    Views:
    2,548
    VanOrton
    Nov 30, 2005
Loading...

Share This Page