Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > Fixed attribute and multiple namespaces issue (Xerces-C 2.7.0)

Reply
Thread Tools

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

 
 
Nicolas
Guest
Posts: n/a
 
      02-22-2006
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"
xmlnssd="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"
xmlnssi="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

 
Reply With Quote
 
 
 
 
Joe Kesselman
Guest
Posts: n/a
 
      02-22-2006
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-Le...ml#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
 
Reply With Quote
 
 
 
 
Nicolas
Guest
Posts: n/a
 
      02-22-2006
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

 
Reply With Quote
 
Joseph Kesselman
Guest
Posts: n/a
 
      02-22-2006
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
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
#FIXED DTD attribute Joe Kesselman XML 5 06-23-2006 12:24 PM
Free Fixed-Width/Fixed-Pitch fonts? johnp HTML 4 05-23-2005 06:14 AM
xsl schema and Namespaces issue william_hulse@hotmail.com XML 3 01-29-2005 12:10 PM
writing schema for multiple prefix multiple namespaces PA XML 0 05-17-2004 12:04 PM
#FIXED vs. default attribute value Stephan Melchior XML 1 11-21-2003 11:56 AM



Advertisments