Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old February 22nd, 2006, 10:05 AM
Nicolas
Guest
 
Posts: n/a
Default Fixed attribute and multiple namespaces issue (Xerces-C 2.7.0)

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

  #2  
Old February 22nd, 2006, 01:25 PM
Joe Kesselman
Guest
 
Posts: n/a
Default Re: Fixed attribute and multiple namespaces issue (Xerces-C 2.7.0)

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
  #3  
Old February 22nd, 2006, 02:05 PM
Nicolas
Guest
 
Posts: n/a
Default Re: Fixed attribute and multiple namespaces issue (Xerces-C 2.7.0)

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

  #4  
Old February 22nd, 2006, 03:25 PM
Joseph Kesselman
Guest
 
Posts: n/a
Default Re: Fixed attribute and multiple namespaces issue (Xerces-C 2.7.0)

Nicolas wrote:[color=blue]
> 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).[/color]

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
 

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
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 Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles