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

N

Nicolas

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
 
J

Joe Kesselman

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.
 
N

Nicolas

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
 
J

Joseph Kesselman

Nicolas said:
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.
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,734
Messages
2,569,441
Members
44,832
Latest member
GlennSmall

Latest Threads

Top