Re: [xml] Inserting XML Schema default attributes

On Sun, May 31, 2009 at 03:02:16PM +0200, Stefan Behnel wrote:

as a quick follow-up: injecting default attributes works when applying the
schema *after* the parsing step, it does *not* work when validating inside
the parser using the SAX plug.

  Ah, okay, yes I think it makes sense, the SAX plug probably doesn't
expand the attribute list, it's not trivial I guess.


Stefan Behnel wrote:
I'm trying to inject default attributes into a document from an XML Schema
during parsing. I set up a validation context and set the
XML_SCHEMA_VAL_VC_I_CREATE option on it, which, if I understand the docs
correctly, tells the validator to create defaulted/fixed attributes if they
do not exist already. Then I inject the validation context into the parser
using "xmlSchemaSAXPlug()".

The schema document I use is

<xsd:schema xmlns:xsd="";>
  <xsd:element name="a" type="AType"/>
  <xsd:complexType name="AType">
    <xsd:sequence minOccurs="4" maxOccurs="4">
      <xsd:element name="b" type="BType" />
  <xsd:complexType name="BType">
    <xsd:attribute name="hardy" type="xsd:string" default="hey" />

The document I parse is

<a><b hardy="ho"/><b/><b hardy="ho"/><b/></a>

The document validates. However, no default attributes are inserted,
neither with my code nor with xmllint (which doesn't seem to support that
anyway). When I debug into the validator code in xmlschemas.c, I get to
line 25351 (libxml2 2.7.3):

    * Get the owner element; needed for creation of default attributes.
    * This fixes bug #341337, reported by David Grohmann.
    if (vctxt->options & XML_SCHEMA_VAL_VC_I_CREATE) {
        xmlSchemaNodeInfoPtr ielem = vctxt->elemInfos[vctxt->depth];
==>     if (ielem && ielem->node && ielem->node->doc)
            defAttrOwnerElem = ielem->node;

but "ielem->node" is NULL every time it gets there, so this doesn't fly.

Is there anything else I have to do to make this work?


xml mailing list, project page
xml gnome org
xml mailing list, project page
xml gnome org

Daniel Veillard      | libxml Gnome XML XSLT toolkit
daniel veillard com  | Rpmfind RPM search engine | virtualization library

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]