blob: 855dbb295c0080885887f2312460e4ab98662c93 [file] [log] [blame]
/**
* @file validation_xml.c
* @author Radek Krejci <rkrejci@cesnet.cz>
* @brief performance test - validating YANG data via DSDL tools.
*
* Copyright (c) 2016 CESNET, z.s.p.o.
*
* This source code is licensed under BSD 3-Clause License (the "License").
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*/
#include <stdio.h>
#include <string.h>
#include <libxml/tree.h>
#include <libxml/parser.h>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
#include <libxml/relaxng.h>
#include <libxslt/transform.h>
#include <libxslt/xsltInternals.h>
int main(int argc, char *argv[])
{
xmlDocPtr sdoc, ddoc;
xmlDocPtr sch_result;
xmlRelaxNGParserCtxtPtr rng_ctxt;
xmlRelaxNGPtr rng_schema = NULL;
xmlRelaxNGValidCtxtPtr rng = NULL;
xsltStylesheetPtr sch = NULL;
if (argc < 5) {
fprintf(stderr, "Usage: %s model.yin data.xml model-config.rng model-schematron.xsl\n", argv[0]);
return 1;
}
/* schema */
sdoc = xmlReadFile(argv[1], NULL, 0);
if (!sdoc) {
fprintf(stderr, "Failed to load data model\n");
return 1;
}
/* data */
ddoc = xmlReadFile(argv[2], NULL, 0);
if (!sdoc) {
fprintf(stderr, "Failed to load data\n");
return 1;
}
/* validate */
rng_ctxt = xmlRelaxNGNewParserCtxt(argv[3]);
rng_schema = xmlRelaxNGParse(rng_ctxt);
rng = xmlRelaxNGNewValidCtxt(rng_schema);
sch = xsltParseStylesheetFile(BAD_CAST argv[4]);
xmlRelaxNGValidateDoc(rng, ddoc);
sch_result = xsltApplyStylesheet(sch, ddoc, NULL);
xmlRelaxNGFreeParserCtxt(rng_ctxt);
xmlRelaxNGFree(rng_schema);
xmlRelaxNGFreeValidCtxt(rng);
xsltFreeStylesheet(sch);
xmlFreeDoc(sch_result);
xmlFreeDoc(ddoc);
xmlFreeDoc(sdoc);
return 0;
}