You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by Nicolas Tsokas <ts...@ekt.gr> on 2006/02/24 15:46:35 UTC

Attribute with default value not immediately replaced... ?

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.google.com/url?sa=D&q=http://www.w3.org/2001/XMLSchema>
http://www.w3.org/2001/XMLSchema" 
                        xmlns="
<http://www.google.com/url?sa=D&q=http://schema1> http://schema1" 
                        targetNamespace="
<http://www.google.com/url?sa=D&q=http://schema1> 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://www.google.com/url?sa=D&q=http://schema1>
http://schema1" 
                        xmlns:xsi="
<http://www.google.com/url?sa=D&q=http://www.w3.org/2001/XMLSchema-instance>
http://www.w3.org/2001/XMLSchema-instance" 
                        xsi:schemaLocation="
<http://www.google.com/url?sa=D&q=http://schema1> 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://www.google.com/url?sa=D&q=http://schema1> 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?... 

 

Is default-attribute re-instantiation only working for defaults specified in
DTDs?, not in schemas?

 

Any help would be GREATLY appreciated... 

Thanks in advance. 

 

Nicolas