Annotation of embedaddon/libxml2/testSchemas.c, revision 1.1.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>