[xml] Receiving RELAX NG validity error callbacks



Can anyone help me with registering RELAX NG validity error callback functions?
I'm using the C RELAX NG API with xmlTextReader. I'm trying to  
register error callback functions for validity errors encoundtered in  
my *instance* document. I seem to be able to register handlers for  
all types of errors when parsing my RNG schema, and also well- 
formedness errors in my instance document. I can't seem to register  
error callbacks for *validity* errors in my instance doc as mandated  
by my RNG schema.
What's weird is that I do see these errors being reported to the  
console! These are the errors I want to receive in my C callbacks,  
but I can't find any way to register for them. Can anyone help? I've  
tried scouring xmllint.c for examples, but I just don't see where  
this happens. Other than that, I can't find any examples online.
Here's what I'm doing:



        char *docfurl = ".../golf.xml";
        char *schemafurl = ".../golf.rng";
        
        // RELAX NG Parser Context
        xmlRelaxNGParserCtxtPtr ctxt = xmlRelaxNGNewParserCtxt(schemafurl);
        xmlRelaxNGSetParserErrors(ctxt,
                                                          (xmlRelaxNGValidityErrorFunc)rngErr,
                                                          (xmlRelaxNGValidityWarningFunc)rngWarn,
                                                          NULL);
        
        // Parse schema
        xmlRelaxNGPtr schema = xmlRelaxNGParse(ctxt);
        
        // create reader
        xmlTextReaderPtr reader = xmlNewTextReaderFilename(docfurl);
        
        // associtate schema with reader
        xmlTextReaderRelaxNGSetSchema(reader, schema);
                
        // register some callbacks (apparently not the right ones)
        // never seems to be called
xmlTextReaderSetErrorHandler(reader, (xmlTextReaderErrorFunc) readerErr, NULL);
        // handles well-formedness errors in instance document
xmlTextReaderSetStructuredErrorHandler(reader, (xmlStructuredErrorFunc)structErr, NULL);
        
        while (xmlTextReaderRead(reader))
                ;

        NSLog(@"done. isValid: %i", xmlTextReaderIsValid(reader));



The callbacks you see registered here are usually called for different things, but none for validity errors in the instance doc caused by non-adherence to my RNG.
The reader *does* correctly report whether it was valid or not at the  
end, which is good... but I want to receive the individual validity  
errors too.
Can anyone help?



Todd Ditchendorf

Scandalous Software - Cocoa Developer Tools
http://scan.dalo.us






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