Fwd: libxml2 does xmlSchemaValidateDoc() support xml schema extensions?

Does anyone know if libxml2 supports  http://www.w3.org/TR/xmlschema-0/#DerivExt   ?

thanks in advance

Andy

Begin forwarded message:

> From: Andy Davidson <andy_davidson@apple.com>
> Date: December 12, 2011 6:10:14 PM PST
> To: xml@gnome.org
> Subject: libxml2 does xmlSchemaValidateDoc() support xml schema extensions?
> 
> Hi
> 
> I am using libxml2. I use xmlSchemaValidateDoc() to make sure my xml is valid. Recently we started using Extension to define new complexTypes.
> 
> The description for extensions can be found at http://www.w3.org/TR/xmlschema-0/#DerivExt  
> 
> These instance do not validate using libxml2. I am able to validate these instance using java version "1.6.0_29"
> 
> 
> Attached is my test Zoo.xsd, and the instance I am trying to validate
> 
> 
> 
> 
>     <complexType name="Animal">
>         <sequence>
>             <element name="name" type="string" />
>         </sequence>
>     </complexType>
> 
>     <complexType name="Fish">
>         <complexContent>
>             <extension base="zoo:Animal">
>                 <sequence>
>                     <element name="numberOfFins" type="integer" />
>                 </sequence>
>             </extension>
>         </complexContent>
>     </complexType>
> 
> My xml instance is 
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <zoo:cageRequest xmlns:zoo="http://www.example.org/Zoo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>   <animal xsi:type="zoo:Fish">
>     <name>Blue Fin Tuna</name>
>     <numberOfFins>4</numberOfFins>
>   </animal>
> </zoo:cageRequest>
> 
> xmlSchemaValidateDoc() generates the following output
> element animal: Schemas validity error : Element 'animal', attribute 'xsi:type': The attribute 'xsi:type' is not allowed.
> element numberOfFins: Schemas validity error : Element 'numberOfFins': This element is not expected.
> 
> the error returned is  1871 for instance
> 
> xmlDebugDumpDocument() produces
> 
> DOCUMENT
> version=1.0
> standalone=true
>   ELEMENT zoo:cageRequest
>     namespace zoo href=http://www.example.org/Zoo
>     namespace xsi href=http://www.w3.org/2001/XMLSchema-instanc...
>     ELEMENT animal
>       ATTRIBUTE xsi:type
>         TEXT
>           content=zoo:Fish
>       ELEMENT name
>         TEXT
>           content=Blue Fin Tuna
>       ELEMENT numberOfFins
>         TEXT
>           content=4
> (gdb) 
> 
> 
> Do I need to tweak my validation code ? 
> 
> 
> (this is an ObjC listing)
> 
>     
>     
>     const char *schemaFileNameStr = [xmlSchemaFilePath cStringUsingEncoding: NSASCIIStringEncoding];
>     
>     // http://www.xmlsoft.org/html/libxml-parser.html#xmlReadFile
>     // second arg, null, is document encoding
>     // XML_PARSE_NONET option means "Forbid network access"
>     xmlDocPtr schemaDoc = xmlReadFile(schemaFileNameStr, NULL, XML_PARSE_NONET);
>     NSString *errorMsgRoot = @"**** ERROR: POSXMLSchemaValidator.m createAndAddValidatorFor:, ";
>     if (schemaDoc == NULL) {
>         /* the schema cannot be loaded or is not well-formed */
>         NSLog(@"%@ the schema: %s can not be loaded or is not well-formed", errorMsgRoot, schemaFileNameStr);
>         return ret;
>     }
>     
>     // http://www.xmlsoft.org/html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt
>     xmlSchemaParserCtxtPtr parserCtxt = xmlSchemaNewDocParserCtxt(schemaDoc);
>     if (parserCtxt == NULL) {
>         /* unable to create a parser context for the schema */
>         xmlFreeDoc(schemaDoc);
>         NSLog(@"%@ unable to create a parser context for schema %s", errorMsgRoot, schemaFileNameStr);
>         return ret;
>     }
>     
>     // http://www.xmlsoft.org/html/libxml-xmlschemas.html#xmlSchemaParse
>     xmlSchemaPtr schema = xmlSchemaParse(parserCtxt);
>     if (schema == NULL) {
>         /* the schema itself is not valid */
>         xmlSchemaFreeParserCtxt(parserCtxt);
>         xmlFreeDoc(schemaDoc);
>         NSLog(@"%@ the schema %s is not valid", errorMsgRoot, schemaFileNameStr);
>         return ret;
>     }
>     
>     // http://www.xmlsoft.org/html/libxml-xmlschemas.html#xmlSchemaNewValidCtxt
>     xmlSchemaValidCtxtPtr validCtxt = xmlSchemaNewValidCtxt(schema);
>     if (validCtxt == NULL) {
>         /* unable to create a validation context for the schema */
>         xmlSchemaFree(schema);
>         xmlSchemaFreeParserCtxt(parserCtxt);
>         xmlFreeDoc(schemaDoc);
>         NSLog(@"%@ unable to validation context for schema %s", errorMsgRoot, schemaFileNameStr);
>         return ret; 
>     }
>     
>     //xmlSchemaFree(schema); causes crash when we try to use validCtxt
>     xmlSchemaFreeParserCtxt(parserCtxt);
>     xmlFreeDoc(schemaDoc);
>     
>     // http://www.xmlsoft.org/html/libxml-xmlschemas.html#xmlSchemaValidateDoc
>     int error = xmlSchemaValidateDoc(validCtxt.validCtxt, doc);             
>     if (error == 0) {
>         NSLog(@"document is a valid instance of %@", schemaFileName);
>         ret = YES;
>     } 
>     
> 
> Is this a bug?
> 
> thanks in advance
> 
> Andy
> 

Received on Tuesday, 13 December 2011 02:13:18 UTC