- From: Andy Davidson <andy_davidson@apple.com>
- Date: Mon, 12 Dec 2011 18:12:48 -0800
- To: xmlschema-dev@w3.org
- Message-id: <03454E0B-3D71-495D-959A-EAF3D968A61B@apple.com>
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 >
Attachments
- text/html attachment: stored
- application/octet-stream attachment: ZooRequest.xsd
- text/html attachment: stored
Received on Tuesday, 13 December 2011 02:13:18 UTC