Schema validation: Difference between revisions
No edit summary |
Fixed link to Khronos |
||
(12 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{tutorials}} | |||
[[Category: | The [[COLLADA]] format is defined by a W3C schema. If a document doesn't conform to the schema then it isn't valid COLLADA data. This tutorial explains a few different ways to '''validate a [[COLLADA document]] against the [[COLLADA schema]]'''. | ||
==Using xmllint== | |||
<code>xmllint</code> is a command-line application that can be used to validate an XML document against a W3C schema. <code>xmllint</code> is distributed as part of <code>[http://xmlsoft.org/ libxml]</code>. You can find binaries for Windows [http://www.zlatkovic.com/libxml.en.html here]. Mac OS X and most Linux distributions come with <code>libxml</code> already installed. | |||
To validate the COLLADA document <code>duck.dae</code> against the latest COLLADA 1.4 schema available from [https://www.khronos.org/collada Khronos], run the following command: | |||
xmllint --noout --schema <nowiki>http://www.khronos.org/files/collada_schema_1_4_1.xsd</nowiki> duck.dae | |||
You could also copy the schema locally and use your local version: | |||
xmllint --noout --schema colladaSchema.xsd duck.dae | |||
The <code>--noout</code> option prevents superfluous output. If the COLLADA document violates the schema, <code>xmllint</code> outputs an error message. | |||
==Using libxml from a C/C++ Application== | |||
Using <code>libxml</code>, you can validate a COLLADA document against the schema from a C/C++ application. The following code illustrates how it works. | |||
#include "libxml/xmlschemas.h" | |||
// libxml error handler | |||
void schemaErrorCallback(void*, const char* message, ...) { | |||
va_list varArgs; | |||
va_start(varArgs, message); | |||
vfprintf(stdout, message, varArgs); | |||
va_end(varArgs); | |||
} | |||
// libxml warning handler | |||
void schemaWarningCallback(void* callbackData, const char* message, ...) { | |||
} | |||
// Returns true if file validated successfully, false otherwise | |||
bool validate(const string& uri) { | |||
bool result = false; | |||
if (xmlSchemaParserCtxt* schemaParser = | |||
xmlSchemaNewParserCtxt("<nowiki>http://www.khronos.org/files/collada_schema_1_4_1.xsd</nowiki>")) { | |||
if (xmlSchema* schema = xmlSchemaParse(schemaParser)) { | |||
if (xmlSchemaValidCtxt* validityContext = xmlSchemaNewValidCtxt(schema)) { | |||
xmlSchemaSetValidErrors(validityContext, | |||
schemaErrorCallback, | |||
schemaWarningCallback, | |||
/* callback data */ 0); | |||
// Returns 0 if validation succeeded | |||
result = xmlSchemaValidateFile(validityContext, uri.c_str(), 0) == 0; | |||
xmlSchemaFreeValidCtxt(validityContext); | |||
} | |||
xmlSchemaFree(schema); | |||
} | |||
xmlSchemaFreeParserCtxt(schemaParser); | |||
} | |||
return result; | |||
} | |||
[[Category:COLLADA tutorials]] |
Latest revision as of 15:23, 26 July 2012
Tutorials |
---|
This article is one several tutorials, guides, and annotated examples available in this wiki. |
Multipage tutorials: • COLLADA DOM user guide Shorter how-tos: • Using accessors • Schema validation • Using URIs • Various annotated examples Instructions for adding a tutorial |
[[Category: ]]
The COLLADA format is defined by a W3C schema. If a document doesn't conform to the schema then it isn't valid COLLADA data. This tutorial explains a few different ways to validate a COLLADA document against the COLLADA schema.
Using xmllint
xmllint
is a command-line application that can be used to validate an XML document against a W3C schema. xmllint
is distributed as part of libxml
. You can find binaries for Windows here. Mac OS X and most Linux distributions come with libxml
already installed.
To validate the COLLADA document duck.dae
against the latest COLLADA 1.4 schema available from Khronos, run the following command:
xmllint --noout --schema http://www.khronos.org/files/collada_schema_1_4_1.xsd duck.dae
You could also copy the schema locally and use your local version:
xmllint --noout --schema colladaSchema.xsd duck.dae
The --noout
option prevents superfluous output. If the COLLADA document violates the schema, xmllint
outputs an error message.
Using libxml from a C/C++ Application
Using libxml
, you can validate a COLLADA document against the schema from a C/C++ application. The following code illustrates how it works.
#include "libxml/xmlschemas.h" // libxml error handler void schemaErrorCallback(void*, const char* message, ...) { va_list varArgs; va_start(varArgs, message); vfprintf(stdout, message, varArgs); va_end(varArgs); } // libxml warning handler void schemaWarningCallback(void* callbackData, const char* message, ...) { } // Returns true if file validated successfully, false otherwise bool validate(const string& uri) { bool result = false; if (xmlSchemaParserCtxt* schemaParser = xmlSchemaNewParserCtxt("http://www.khronos.org/files/collada_schema_1_4_1.xsd")) { if (xmlSchema* schema = xmlSchemaParse(schemaParser)) { if (xmlSchemaValidCtxt* validityContext = xmlSchemaNewValidCtxt(schema)) { xmlSchemaSetValidErrors(validityContext, schemaErrorCallback, schemaWarningCallback, /* callback data */ 0); // Returns 0 if validation succeeded result = xmlSchemaValidateFile(validityContext, uri.c_str(), 0) == 0; xmlSchemaFreeValidCtxt(validityContext); } xmlSchemaFree(schema); } xmlSchemaFreeParserCtxt(schemaParser); } return result; }