Annotation of embedaddon/libxml2/testSchemas.c, revision 1.1
1.1 ! misho 1: /*
! 2: * testSchemas.c : a small tester program for Schema validation
! 3: *
! 4: * See Copyright for the status of this software.
! 5: *
! 6: * Daniel.Veillard@w3.org
! 7: */
! 8:
! 9: #include "libxml.h"
! 10: #ifdef LIBXML_SCHEMAS_ENABLED
! 11:
! 12: #include <libxml/xmlversion.h>
! 13: #include <libxml/parser.h>
! 14:
! 15: #include <stdio.h>
! 16: #include <string.h>
! 17: #include <stdarg.h>
! 18:
! 19:
! 20: #ifdef HAVE_SYS_TYPES_H
! 21: #include <sys/types.h>
! 22: #endif
! 23: #ifdef HAVE_SYS_STAT_H
! 24: #include <sys/stat.h>
! 25: #endif
! 26: #ifdef HAVE_FCNTL_H
! 27: #include <fcntl.h>
! 28: #endif
! 29: #ifdef HAVE_UNISTD_H
! 30: #include <unistd.h>
! 31: #endif
! 32: #ifdef HAVE_STDLIB_H
! 33: #include <stdlib.h>
! 34: #endif
! 35: #ifdef HAVE_SYS_MMAN_H
! 36: #include <sys/mman.h>
! 37: /* seems needed for Solaris */
! 38: #ifndef MAP_FAILED
! 39: #define MAP_FAILED ((void *) -1)
! 40: #endif
! 41: #endif
! 42:
! 43: #include <libxml/xmlmemory.h>
! 44: #include <libxml/debugXML.h>
! 45: #include <libxml/xmlschemas.h>
! 46: #include <libxml/xmlschemastypes.h>
! 47:
! 48: #ifdef LIBXML_DEBUG_ENABLED
! 49: static int debug = 0;
! 50: #endif
! 51: static int noout = 0;
! 52: #ifdef HAVE_SYS_MMAN_H
! 53: static int memory = 0;
! 54: #endif
! 55:
! 56:
! 57: int main(int argc, char **argv) {
! 58: int i;
! 59: int files = 0;
! 60: xmlSchemaPtr schema = NULL;
! 61:
! 62: for (i = 1; i < argc ; i++) {
! 63: #ifdef LIBXML_DEBUG_ENABLED
! 64: if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
! 65: debug++;
! 66: else
! 67: #endif
! 68: #ifdef HAVE_SYS_MMAN_H
! 69: if ((!strcmp(argv[i], "-memory")) || (!strcmp(argv[i], "--memory"))) {
! 70: memory++;
! 71: } else
! 72: #endif
! 73: if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) {
! 74: noout++;
! 75: }
! 76: }
! 77: xmlLineNumbersDefault(1);
! 78: for (i = 1; i < argc ; i++) {
! 79: if (argv[i][0] != '-') {
! 80: if (schema == NULL) {
! 81: xmlSchemaParserCtxtPtr ctxt;
! 82:
! 83: #ifdef HAVE_SYS_MMAN_H
! 84: if (memory) {
! 85: int fd;
! 86: struct stat info;
! 87: const char *base;
! 88: if (stat(argv[i], &info) < 0)
! 89: break;
! 90: if ((fd = open(argv[i], O_RDONLY)) < 0)
! 91: break;
! 92: base = mmap(NULL, info.st_size, PROT_READ,
! 93: MAP_SHARED, fd, 0) ;
! 94: if (base == (void *) MAP_FAILED)
! 95: break;
! 96:
! 97: ctxt = xmlSchemaNewMemParserCtxt((char *)base,info.st_size);
! 98:
! 99: xmlSchemaSetParserErrors(ctxt,
! 100: (xmlSchemaValidityErrorFunc) fprintf,
! 101: (xmlSchemaValidityWarningFunc) fprintf,
! 102: stderr);
! 103: schema = xmlSchemaParse(ctxt);
! 104: xmlSchemaFreeParserCtxt(ctxt);
! 105: munmap((char *) base, info.st_size);
! 106: } else
! 107: #endif
! 108: {
! 109: ctxt = xmlSchemaNewParserCtxt(argv[i]);
! 110: xmlSchemaSetParserErrors(ctxt,
! 111: (xmlSchemaValidityErrorFunc) fprintf,
! 112: (xmlSchemaValidityWarningFunc) fprintf,
! 113: stderr);
! 114: schema = xmlSchemaParse(ctxt);
! 115: xmlSchemaFreeParserCtxt(ctxt);
! 116: }
! 117: #ifdef LIBXML_OUTPUT_ENABLED
! 118: #ifdef LIBXML_DEBUG_ENABLED
! 119: if (debug)
! 120: xmlSchemaDump(stdout, schema);
! 121: #endif
! 122: #endif /* LIBXML_OUTPUT_ENABLED */
! 123: if (schema == NULL)
! 124: goto failed_schemas;
! 125: } else {
! 126: xmlDocPtr doc;
! 127:
! 128: doc = xmlReadFile(argv[i],NULL,0);
! 129:
! 130: if (doc == NULL) {
! 131: fprintf(stderr, "Could not parse %s\n", argv[i]);
! 132: } else {
! 133: xmlSchemaValidCtxtPtr ctxt;
! 134: int ret;
! 135:
! 136: ctxt = xmlSchemaNewValidCtxt(schema);
! 137: xmlSchemaSetValidErrors(ctxt,
! 138: (xmlSchemaValidityErrorFunc) fprintf,
! 139: (xmlSchemaValidityWarningFunc) fprintf,
! 140: stderr);
! 141: ret = xmlSchemaValidateDoc(ctxt, doc);
! 142: if (ret == 0) {
! 143: printf("%s validates\n", argv[i]);
! 144: } else if (ret > 0) {
! 145: printf("%s fails to validate\n", argv[i]);
! 146: } else {
! 147: printf("%s validation generated an internal error\n",
! 148: argv[i]);
! 149: }
! 150: xmlSchemaFreeValidCtxt(ctxt);
! 151: xmlFreeDoc(doc);
! 152: }
! 153: }
! 154: files ++;
! 155: }
! 156: }
! 157: if (schema != NULL)
! 158: xmlSchemaFree(schema);
! 159: if (files == 0) {
! 160: printf("Usage : %s [--debug] [--noout] schemas XMLfiles ...\n",
! 161: argv[0]);
! 162: printf("\tParse the HTML files and output the result of the parsing\n");
! 163: #ifdef LIBXML_DEBUG_ENABLED
! 164: printf("\t--debug : dump a debug tree of the in-memory document\n");
! 165: #endif
! 166: printf("\t--noout : do not print the result\n");
! 167: #ifdef HAVE_SYS_MMAN_H
! 168: printf("\t--memory : test the schemas in memory parsing\n");
! 169: #endif
! 170: }
! 171: failed_schemas:
! 172: xmlSchemaCleanupTypes();
! 173: xmlCleanupParser();
! 174: xmlMemoryDump();
! 175:
! 176: return(0);
! 177: }
! 178:
! 179: #else
! 180: #include <stdio.h>
! 181: int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
! 182: printf("%s : Schemas support not compiled in\n", argv[0]);
! 183: return(0);
! 184: }
! 185: #endif /* LIBXML_SCHEMAS_ENABLED */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>