Attribute with default value not immediately replaced... !?

N

Nicolas

Hi everybody...

In Xerces 2.7.0 it is explicitly stated that, no matter how one removes
an attribute
(attList->removeNamedItem, attList->removeNamedItemNS,
domElement->removeAttributeNode, domElement->removeAttribute,
domElement->removeAttributeNS), if that attribute has a default value
it is immediately replaced.
However I cannot obtain that behaviour...

Check out the following schema and document:

SCHEMA
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schema1"
targetNamespace="http://schema1"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsd:element name="subelement" type="subelementType"/>
<xsd:element name="rootelement">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="subelement"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:attribute name="myat" type="xsd:string" default="123"/>
<xsd:complexType name="subelementType">
<xsd:attribute ref="myat"/>
</xsd:complexType>
</xsd:schema>

DOCUMENT
<?xml version="1.0" encoding="UTF-8"?>
<rootelement xmlns="http://schema1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schema1 schema.xsd">
<subelement/>
</rootelement>

I load the document to a DOM like this:

DOMParser->setDoNamespaces(true);
DOMParser->setDoSchema(true);
DOMParser->setValidationSchemaFullChecking(true);
DOMParser->parse(FileName);

In the DOM constructed, as expected, there is a "myat" attribute for
element "subelement"
having the value of "123". As the latter was declared as a global
attribute in the schema,
it is namespace-qualified (getNamespaceURI() GIVES "http://schema1")
even though
schema has attributeFormDefault="unqualified" (correct me if I'm
wrong...).

So far so good.

Now I'm trying to remove that attribute. No matter which of the above
methods I choose,
I cannot obtain the immediate replacement of this attribute, although
it has a default value.

removeNamedItem causes the creation of a "myat" element, but with no
namespace. All
other methods just remove the attribute and no replacement occurs.

What is going on? Am I missing something?...

Any help would be GREATLY appreciated...

Thanks in advance.

Nicolas
 
J

Joseph Kesselman

Traditionally, default-attribute reinstantiation only worked for
defaults specified in DTDs, not in schemas. As of DOM Level 3, that
*may* (not must) be supported for schemas too. I'd suggest talking to
the folks who wrote your DOM implementation -- the Xerces mailing list
at Apache -- to ask whether that's supported and whether there's a
switch you have to set to enable it.
 

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

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top