Schema validation: Difference between revisions
Fixed link to Khronos |
|||
| (4 intermediate revisions by 3 users not shown) | |||
| Line 4: | Line 4: | ||
==Using xmllint== | ==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]. | <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 [ | 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/ | 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: | You could also copy the schema locally and use your local version: | ||
| Line 35: | Line 35: | ||
bool result = false; | bool result = false; | ||
if (xmlSchemaParserCtxt* schemaParser = | if (xmlSchemaParserCtxt* schemaParser = | ||
xmlSchemaNewParserCtxt("http://www.khronos.org/files/ | xmlSchemaNewParserCtxt("<nowiki>http://www.khronos.org/files/collada_schema_1_4_1.xsd</nowiki>")) { | ||
if (xmlSchema* schema = xmlSchemaParse(schemaParser)) { | if (xmlSchema* schema = xmlSchemaParse(schemaParser)) { | ||
if (xmlSchemaValidCtxt* validityContext = xmlSchemaNewValidCtxt(schema)) { | if (xmlSchemaValidCtxt* validityContext = xmlSchemaNewValidCtxt(schema)) { | ||
| Line 55: | Line 55: | ||
} | } | ||
[[Category: | [[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;
}