/src/libxml2/include/libxml/schemasInternals.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Summary: internal interfaces for XML Schemas |
3 | | * Description: internal interfaces for the XML Schemas handling |
4 | | * and schema validity checking |
5 | | * The Schemas development is a Work In Progress. |
6 | | * Some of those interfaces are not guaranteed to be API or ABI stable ! |
7 | | * |
8 | | * Copy: See Copyright for the status of this software. |
9 | | * |
10 | | * Author: Daniel Veillard |
11 | | */ |
12 | | |
13 | | |
14 | | #ifndef __XML_SCHEMA_INTERNALS_H__ |
15 | | #define __XML_SCHEMA_INTERNALS_H__ |
16 | | |
17 | | #include <libxml/xmlversion.h> |
18 | | |
19 | | #ifdef LIBXML_SCHEMAS_ENABLED |
20 | | |
21 | | #include <libxml/xmlregexp.h> |
22 | | #include <libxml/hash.h> |
23 | | #include <libxml/dict.h> |
24 | | |
25 | | #ifdef __cplusplus |
26 | | extern "C" { |
27 | | #endif |
28 | | |
29 | | typedef enum { |
30 | | XML_SCHEMAS_UNKNOWN = 0, |
31 | | XML_SCHEMAS_STRING = 1, |
32 | | XML_SCHEMAS_NORMSTRING = 2, |
33 | | XML_SCHEMAS_DECIMAL = 3, |
34 | | XML_SCHEMAS_TIME = 4, |
35 | | XML_SCHEMAS_GDAY = 5, |
36 | | XML_SCHEMAS_GMONTH = 6, |
37 | | XML_SCHEMAS_GMONTHDAY = 7, |
38 | | XML_SCHEMAS_GYEAR = 8, |
39 | | XML_SCHEMAS_GYEARMONTH = 9, |
40 | | XML_SCHEMAS_DATE = 10, |
41 | | XML_SCHEMAS_DATETIME = 11, |
42 | | XML_SCHEMAS_DURATION = 12, |
43 | | XML_SCHEMAS_FLOAT = 13, |
44 | | XML_SCHEMAS_DOUBLE = 14, |
45 | | XML_SCHEMAS_BOOLEAN = 15, |
46 | | XML_SCHEMAS_TOKEN = 16, |
47 | | XML_SCHEMAS_LANGUAGE = 17, |
48 | | XML_SCHEMAS_NMTOKEN = 18, |
49 | | XML_SCHEMAS_NMTOKENS = 19, |
50 | | XML_SCHEMAS_NAME = 20, |
51 | | XML_SCHEMAS_QNAME = 21, |
52 | | XML_SCHEMAS_NCNAME = 22, |
53 | | XML_SCHEMAS_ID = 23, |
54 | | XML_SCHEMAS_IDREF = 24, |
55 | | XML_SCHEMAS_IDREFS = 25, |
56 | | XML_SCHEMAS_ENTITY = 26, |
57 | | XML_SCHEMAS_ENTITIES = 27, |
58 | | XML_SCHEMAS_NOTATION = 28, |
59 | | XML_SCHEMAS_ANYURI = 29, |
60 | | XML_SCHEMAS_INTEGER = 30, |
61 | | XML_SCHEMAS_NPINTEGER = 31, |
62 | | XML_SCHEMAS_NINTEGER = 32, |
63 | | XML_SCHEMAS_NNINTEGER = 33, |
64 | | XML_SCHEMAS_PINTEGER = 34, |
65 | | XML_SCHEMAS_INT = 35, |
66 | | XML_SCHEMAS_UINT = 36, |
67 | | XML_SCHEMAS_LONG = 37, |
68 | | XML_SCHEMAS_ULONG = 38, |
69 | | XML_SCHEMAS_SHORT = 39, |
70 | | XML_SCHEMAS_USHORT = 40, |
71 | | XML_SCHEMAS_BYTE = 41, |
72 | | XML_SCHEMAS_UBYTE = 42, |
73 | | XML_SCHEMAS_HEXBINARY = 43, |
74 | | XML_SCHEMAS_BASE64BINARY = 44, |
75 | | XML_SCHEMAS_ANYTYPE = 45, |
76 | | XML_SCHEMAS_ANYSIMPLETYPE = 46 |
77 | | } xmlSchemaValType; |
78 | | |
79 | | /* |
80 | | * XML Schemas defines multiple type of types. |
81 | | */ |
82 | | typedef enum { |
83 | | XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */ |
84 | | XML_SCHEMA_TYPE_ANY, |
85 | | XML_SCHEMA_TYPE_FACET, |
86 | | XML_SCHEMA_TYPE_SIMPLE, |
87 | | XML_SCHEMA_TYPE_COMPLEX, |
88 | | XML_SCHEMA_TYPE_SEQUENCE = 6, |
89 | | XML_SCHEMA_TYPE_CHOICE, |
90 | | XML_SCHEMA_TYPE_ALL, |
91 | | XML_SCHEMA_TYPE_SIMPLE_CONTENT, |
92 | | XML_SCHEMA_TYPE_COMPLEX_CONTENT, |
93 | | XML_SCHEMA_TYPE_UR, |
94 | | XML_SCHEMA_TYPE_RESTRICTION, |
95 | | XML_SCHEMA_TYPE_EXTENSION, |
96 | | XML_SCHEMA_TYPE_ELEMENT, |
97 | | XML_SCHEMA_TYPE_ATTRIBUTE, |
98 | | XML_SCHEMA_TYPE_ATTRIBUTEGROUP, |
99 | | XML_SCHEMA_TYPE_GROUP, |
100 | | XML_SCHEMA_TYPE_NOTATION, |
101 | | XML_SCHEMA_TYPE_LIST, |
102 | | XML_SCHEMA_TYPE_UNION, |
103 | | XML_SCHEMA_TYPE_ANY_ATTRIBUTE, |
104 | | XML_SCHEMA_TYPE_IDC_UNIQUE, |
105 | | XML_SCHEMA_TYPE_IDC_KEY, |
106 | | XML_SCHEMA_TYPE_IDC_KEYREF, |
107 | | XML_SCHEMA_TYPE_PARTICLE = 25, |
108 | | XML_SCHEMA_TYPE_ATTRIBUTE_USE, |
109 | | XML_SCHEMA_FACET_MININCLUSIVE = 1000, |
110 | | XML_SCHEMA_FACET_MINEXCLUSIVE, |
111 | | XML_SCHEMA_FACET_MAXINCLUSIVE, |
112 | | XML_SCHEMA_FACET_MAXEXCLUSIVE, |
113 | | XML_SCHEMA_FACET_TOTALDIGITS, |
114 | | XML_SCHEMA_FACET_FRACTIONDIGITS, |
115 | | XML_SCHEMA_FACET_PATTERN, |
116 | | XML_SCHEMA_FACET_ENUMERATION, |
117 | | XML_SCHEMA_FACET_WHITESPACE, |
118 | | XML_SCHEMA_FACET_LENGTH, |
119 | | XML_SCHEMA_FACET_MAXLENGTH, |
120 | | XML_SCHEMA_FACET_MINLENGTH, |
121 | | XML_SCHEMA_EXTRA_QNAMEREF = 2000, |
122 | | XML_SCHEMA_EXTRA_ATTR_USE_PROHIB |
123 | | } xmlSchemaTypeType; |
124 | | |
125 | | typedef enum { |
126 | | XML_SCHEMA_CONTENT_UNKNOWN = 0, |
127 | | XML_SCHEMA_CONTENT_EMPTY = 1, |
128 | | XML_SCHEMA_CONTENT_ELEMENTS, |
129 | | XML_SCHEMA_CONTENT_MIXED, |
130 | | XML_SCHEMA_CONTENT_SIMPLE, |
131 | | XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, /* Obsolete */ |
132 | | XML_SCHEMA_CONTENT_BASIC, |
133 | | XML_SCHEMA_CONTENT_ANY |
134 | | } xmlSchemaContentType; |
135 | | |
136 | | typedef struct _xmlSchemaVal xmlSchemaVal; |
137 | | typedef xmlSchemaVal *xmlSchemaValPtr; |
138 | | |
139 | | typedef struct _xmlSchemaType xmlSchemaType; |
140 | | typedef xmlSchemaType *xmlSchemaTypePtr; |
141 | | |
142 | | typedef struct _xmlSchemaFacet xmlSchemaFacet; |
143 | | typedef xmlSchemaFacet *xmlSchemaFacetPtr; |
144 | | |
145 | | /** |
146 | | * Annotation |
147 | | */ |
148 | | typedef struct _xmlSchemaAnnot xmlSchemaAnnot; |
149 | | typedef xmlSchemaAnnot *xmlSchemaAnnotPtr; |
150 | | struct _xmlSchemaAnnot { |
151 | | struct _xmlSchemaAnnot *next; |
152 | | xmlNodePtr content; /* the annotation */ |
153 | | }; |
154 | | |
155 | | /** |
156 | | * XML_SCHEMAS_ANYATTR_SKIP: |
157 | | * |
158 | | * Skip unknown attribute from validation |
159 | | * Obsolete, not used anymore. |
160 | | */ |
161 | | #define XML_SCHEMAS_ANYATTR_SKIP 1 |
162 | | /** |
163 | | * XML_SCHEMAS_ANYATTR_LAX: |
164 | | * |
165 | | * Ignore validation non definition on attributes |
166 | | * Obsolete, not used anymore. |
167 | | */ |
168 | | #define XML_SCHEMAS_ANYATTR_LAX 2 |
169 | | /** |
170 | | * XML_SCHEMAS_ANYATTR_STRICT: |
171 | | * |
172 | | * Apply strict validation rules on attributes |
173 | | * Obsolete, not used anymore. |
174 | | */ |
175 | | #define XML_SCHEMAS_ANYATTR_STRICT 3 |
176 | | /** |
177 | | * XML_SCHEMAS_ANY_SKIP: |
178 | | * |
179 | | * Skip unknown attribute from validation |
180 | | */ |
181 | 0 | #define XML_SCHEMAS_ANY_SKIP 1 |
182 | | /** |
183 | | * XML_SCHEMAS_ANY_LAX: |
184 | | * |
185 | | * Used by wildcards. |
186 | | * Validate if type found, don't worry if not found |
187 | | */ |
188 | 0 | #define XML_SCHEMAS_ANY_LAX 2 |
189 | | /** |
190 | | * XML_SCHEMAS_ANY_STRICT: |
191 | | * |
192 | | * Used by wildcards. |
193 | | * Apply strict validation rules |
194 | | */ |
195 | 0 | #define XML_SCHEMAS_ANY_STRICT 3 |
196 | | /** |
197 | | * XML_SCHEMAS_ATTR_USE_PROHIBITED: |
198 | | * |
199 | | * Used by wildcards. |
200 | | * The attribute is prohibited. |
201 | | */ |
202 | 0 | #define XML_SCHEMAS_ATTR_USE_PROHIBITED 0 |
203 | | /** |
204 | | * XML_SCHEMAS_ATTR_USE_REQUIRED: |
205 | | * |
206 | | * The attribute is required. |
207 | | */ |
208 | 0 | #define XML_SCHEMAS_ATTR_USE_REQUIRED 1 |
209 | | /** |
210 | | * XML_SCHEMAS_ATTR_USE_OPTIONAL: |
211 | | * |
212 | | * The attribute is optional. |
213 | | */ |
214 | 0 | #define XML_SCHEMAS_ATTR_USE_OPTIONAL 2 |
215 | | /** |
216 | | * XML_SCHEMAS_ATTR_GLOBAL: |
217 | | * |
218 | | * allow elements in no namespace |
219 | | */ |
220 | 0 | #define XML_SCHEMAS_ATTR_GLOBAL 1 << 0 |
221 | | /** |
222 | | * XML_SCHEMAS_ATTR_NSDEFAULT: |
223 | | * |
224 | | * allow elements in no namespace |
225 | | */ |
226 | | #define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7 |
227 | | /** |
228 | | * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED: |
229 | | * |
230 | | * this is set when the "type" and "ref" references |
231 | | * have been resolved. |
232 | | */ |
233 | 0 | #define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8 |
234 | | /** |
235 | | * XML_SCHEMAS_ATTR_FIXED: |
236 | | * |
237 | | * the attribute has a fixed value |
238 | | */ |
239 | 0 | #define XML_SCHEMAS_ATTR_FIXED 1 << 9 |
240 | | |
241 | | /** |
242 | | * xmlSchemaAttribute: |
243 | | * An attribute definition. |
244 | | */ |
245 | | |
246 | | typedef struct _xmlSchemaAttribute xmlSchemaAttribute; |
247 | | typedef xmlSchemaAttribute *xmlSchemaAttributePtr; |
248 | | struct _xmlSchemaAttribute { |
249 | | xmlSchemaTypeType type; |
250 | | struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */ |
251 | | const xmlChar *name; /* the name of the declaration */ |
252 | | const xmlChar *id; /* Deprecated; not used */ |
253 | | const xmlChar *ref; /* Deprecated; not used */ |
254 | | const xmlChar *refNs; /* Deprecated; not used */ |
255 | | const xmlChar *typeName; /* the local name of the type definition */ |
256 | | const xmlChar *typeNs; /* the ns URI of the type definition */ |
257 | | xmlSchemaAnnotPtr annot; |
258 | | |
259 | | xmlSchemaTypePtr base; /* Deprecated; not used */ |
260 | | int occurs; /* Deprecated; not used */ |
261 | | const xmlChar *defValue; /* The initial value of the value constraint */ |
262 | | xmlSchemaTypePtr subtypes; /* the type definition */ |
263 | | xmlNodePtr node; |
264 | | const xmlChar *targetNamespace; |
265 | | int flags; |
266 | | const xmlChar *refPrefix; /* Deprecated; not used */ |
267 | | xmlSchemaValPtr defVal; /* The compiled value constraint */ |
268 | | xmlSchemaAttributePtr refDecl; /* Deprecated; not used */ |
269 | | }; |
270 | | |
271 | | /** |
272 | | * xmlSchemaAttributeLink: |
273 | | * Used to build a list of attribute uses on complexType definitions. |
274 | | * WARNING: Deprecated; not used. |
275 | | */ |
276 | | typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink; |
277 | | typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr; |
278 | | struct _xmlSchemaAttributeLink { |
279 | | struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */ |
280 | | struct _xmlSchemaAttribute *attr;/* the linked attribute */ |
281 | | }; |
282 | | |
283 | | /** |
284 | | * XML_SCHEMAS_WILDCARD_COMPLETE: |
285 | | * |
286 | | * If the wildcard is complete. |
287 | | */ |
288 | | #define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0 |
289 | | |
290 | | /** |
291 | | * xmlSchemaCharValueLink: |
292 | | * Used to build a list of namespaces on wildcards. |
293 | | */ |
294 | | typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs; |
295 | | typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr; |
296 | | struct _xmlSchemaWildcardNs { |
297 | | struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */ |
298 | | const xmlChar *value;/* the value */ |
299 | | }; |
300 | | |
301 | | /** |
302 | | * xmlSchemaWildcard. |
303 | | * A wildcard. |
304 | | */ |
305 | | typedef struct _xmlSchemaWildcard xmlSchemaWildcard; |
306 | | typedef xmlSchemaWildcard *xmlSchemaWildcardPtr; |
307 | | struct _xmlSchemaWildcard { |
308 | | xmlSchemaTypeType type; /* The kind of type */ |
309 | | const xmlChar *id; /* Deprecated; not used */ |
310 | | xmlSchemaAnnotPtr annot; |
311 | | xmlNodePtr node; |
312 | | int minOccurs; /* Deprecated; not used */ |
313 | | int maxOccurs; /* Deprecated; not used */ |
314 | | int processContents; |
315 | | int any; /* Indicates if the ns constraint is of ##any */ |
316 | | xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */ |
317 | | xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */ |
318 | | int flags; |
319 | | }; |
320 | | |
321 | | /** |
322 | | * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED: |
323 | | * |
324 | | * The attribute wildcard has been built. |
325 | | */ |
326 | 0 | #define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0 |
327 | | /** |
328 | | * XML_SCHEMAS_ATTRGROUP_GLOBAL: |
329 | | * |
330 | | * The attribute group has been defined. |
331 | | */ |
332 | 0 | #define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1 |
333 | | /** |
334 | | * XML_SCHEMAS_ATTRGROUP_MARKED: |
335 | | * |
336 | | * Marks the attr group as marked; used for circular checks. |
337 | | */ |
338 | 0 | #define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2 |
339 | | |
340 | | /** |
341 | | * XML_SCHEMAS_ATTRGROUP_REDEFINED: |
342 | | * |
343 | | * The attr group was redefined. |
344 | | */ |
345 | 0 | #define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3 |
346 | | /** |
347 | | * XML_SCHEMAS_ATTRGROUP_HAS_REFS: |
348 | | * |
349 | | * Whether this attr. group contains attr. group references. |
350 | | */ |
351 | 0 | #define XML_SCHEMAS_ATTRGROUP_HAS_REFS 1 << 4 |
352 | | |
353 | | /** |
354 | | * An attribute group definition. |
355 | | * |
356 | | * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures |
357 | | * must be kept similar |
358 | | */ |
359 | | typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup; |
360 | | typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr; |
361 | | struct _xmlSchemaAttributeGroup { |
362 | | xmlSchemaTypeType type; /* The kind of type */ |
363 | | struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */ |
364 | | const xmlChar *name; |
365 | | const xmlChar *id; |
366 | | const xmlChar *ref; /* Deprecated; not used */ |
367 | | const xmlChar *refNs; /* Deprecated; not used */ |
368 | | xmlSchemaAnnotPtr annot; |
369 | | |
370 | | xmlSchemaAttributePtr attributes; /* Deprecated; not used */ |
371 | | xmlNodePtr node; |
372 | | int flags; |
373 | | xmlSchemaWildcardPtr attributeWildcard; |
374 | | const xmlChar *refPrefix; /* Deprecated; not used */ |
375 | | xmlSchemaAttributeGroupPtr refItem; /* Deprecated; not used */ |
376 | | const xmlChar *targetNamespace; |
377 | | void *attrUses; |
378 | | }; |
379 | | |
380 | | /** |
381 | | * xmlSchemaTypeLink: |
382 | | * Used to build a list of types (e.g. member types of |
383 | | * simpleType with variety "union"). |
384 | | */ |
385 | | typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink; |
386 | | typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr; |
387 | | struct _xmlSchemaTypeLink { |
388 | | struct _xmlSchemaTypeLink *next;/* the next type link ... */ |
389 | | xmlSchemaTypePtr type;/* the linked type */ |
390 | | }; |
391 | | |
392 | | /** |
393 | | * xmlSchemaFacetLink: |
394 | | * Used to build a list of facets. |
395 | | */ |
396 | | typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink; |
397 | | typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr; |
398 | | struct _xmlSchemaFacetLink { |
399 | | struct _xmlSchemaFacetLink *next;/* the next facet link ... */ |
400 | | xmlSchemaFacetPtr facet;/* the linked facet */ |
401 | | }; |
402 | | |
403 | | /** |
404 | | * XML_SCHEMAS_TYPE_MIXED: |
405 | | * |
406 | | * the element content type is mixed |
407 | | */ |
408 | 0 | #define XML_SCHEMAS_TYPE_MIXED 1 << 0 |
409 | | /** |
410 | | * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION: |
411 | | * |
412 | | * the simple or complex type has a derivation method of "extension". |
413 | | */ |
414 | 0 | #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION 1 << 1 |
415 | | /** |
416 | | * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION: |
417 | | * |
418 | | * the simple or complex type has a derivation method of "restriction". |
419 | | */ |
420 | 0 | #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION 1 << 2 |
421 | | /** |
422 | | * XML_SCHEMAS_TYPE_GLOBAL: |
423 | | * |
424 | | * the type is global |
425 | | */ |
426 | 0 | #define XML_SCHEMAS_TYPE_GLOBAL 1 << 3 |
427 | | /** |
428 | | * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD: |
429 | | * |
430 | | * the complexType owns an attribute wildcard, i.e. |
431 | | * it can be freed by the complexType |
432 | | */ |
433 | | #define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD 1 << 4 /* Obsolete. */ |
434 | | /** |
435 | | * XML_SCHEMAS_TYPE_VARIETY_ABSENT: |
436 | | * |
437 | | * the simpleType has a variety of "absent". |
438 | | * TODO: Actually not necessary :-/, since if |
439 | | * none of the variety flags occur then it's |
440 | | * automatically absent. |
441 | | */ |
442 | | #define XML_SCHEMAS_TYPE_VARIETY_ABSENT 1 << 5 |
443 | | /** |
444 | | * XML_SCHEMAS_TYPE_VARIETY_LIST: |
445 | | * |
446 | | * the simpleType has a variety of "list". |
447 | | */ |
448 | 0 | #define XML_SCHEMAS_TYPE_VARIETY_LIST 1 << 6 |
449 | | /** |
450 | | * XML_SCHEMAS_TYPE_VARIETY_UNION: |
451 | | * |
452 | | * the simpleType has a variety of "union". |
453 | | */ |
454 | 0 | #define XML_SCHEMAS_TYPE_VARIETY_UNION 1 << 7 |
455 | | /** |
456 | | * XML_SCHEMAS_TYPE_VARIETY_ATOMIC: |
457 | | * |
458 | | * the simpleType has a variety of "union". |
459 | | */ |
460 | 0 | #define XML_SCHEMAS_TYPE_VARIETY_ATOMIC 1 << 8 |
461 | | /** |
462 | | * XML_SCHEMAS_TYPE_FINAL_EXTENSION: |
463 | | * |
464 | | * the complexType has a final of "extension". |
465 | | */ |
466 | 0 | #define XML_SCHEMAS_TYPE_FINAL_EXTENSION 1 << 9 |
467 | | /** |
468 | | * XML_SCHEMAS_TYPE_FINAL_RESTRICTION: |
469 | | * |
470 | | * the simpleType/complexType has a final of "restriction". |
471 | | */ |
472 | 0 | #define XML_SCHEMAS_TYPE_FINAL_RESTRICTION 1 << 10 |
473 | | /** |
474 | | * XML_SCHEMAS_TYPE_FINAL_LIST: |
475 | | * |
476 | | * the simpleType has a final of "list". |
477 | | */ |
478 | 0 | #define XML_SCHEMAS_TYPE_FINAL_LIST 1 << 11 |
479 | | /** |
480 | | * XML_SCHEMAS_TYPE_FINAL_UNION: |
481 | | * |
482 | | * the simpleType has a final of "union". |
483 | | */ |
484 | 0 | #define XML_SCHEMAS_TYPE_FINAL_UNION 1 << 12 |
485 | | /** |
486 | | * XML_SCHEMAS_TYPE_FINAL_DEFAULT: |
487 | | * |
488 | | * the simpleType has a final of "default". |
489 | | */ |
490 | | #define XML_SCHEMAS_TYPE_FINAL_DEFAULT 1 << 13 |
491 | | /** |
492 | | * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE: |
493 | | * |
494 | | * Marks the item as a builtin primitive. |
495 | | */ |
496 | 0 | #define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE 1 << 14 |
497 | | /** |
498 | | * XML_SCHEMAS_TYPE_MARKED: |
499 | | * |
500 | | * Marks the item as marked; used for circular checks. |
501 | | */ |
502 | 0 | #define XML_SCHEMAS_TYPE_MARKED 1 << 16 |
503 | | /** |
504 | | * XML_SCHEMAS_TYPE_BLOCK_DEFAULT: |
505 | | * |
506 | | * the complexType did not specify 'block' so use the default of the |
507 | | * <schema> item. |
508 | | */ |
509 | | #define XML_SCHEMAS_TYPE_BLOCK_DEFAULT 1 << 17 |
510 | | /** |
511 | | * XML_SCHEMAS_TYPE_BLOCK_EXTENSION: |
512 | | * |
513 | | * the complexType has a 'block' of "extension". |
514 | | */ |
515 | 0 | #define XML_SCHEMAS_TYPE_BLOCK_EXTENSION 1 << 18 |
516 | | /** |
517 | | * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION: |
518 | | * |
519 | | * the complexType has a 'block' of "restriction". |
520 | | */ |
521 | 0 | #define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION 1 << 19 |
522 | | /** |
523 | | * XML_SCHEMAS_TYPE_ABSTRACT: |
524 | | * |
525 | | * the simple/complexType is abstract. |
526 | | */ |
527 | 0 | #define XML_SCHEMAS_TYPE_ABSTRACT 1 << 20 |
528 | | /** |
529 | | * XML_SCHEMAS_TYPE_FACETSNEEDVALUE: |
530 | | * |
531 | | * indicates if the facets need a computed value |
532 | | */ |
533 | 0 | #define XML_SCHEMAS_TYPE_FACETSNEEDVALUE 1 << 21 |
534 | | /** |
535 | | * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED: |
536 | | * |
537 | | * indicates that the type was typefixed |
538 | | */ |
539 | 0 | #define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED 1 << 22 |
540 | | /** |
541 | | * XML_SCHEMAS_TYPE_INTERNAL_INVALID: |
542 | | * |
543 | | * indicates that the type is invalid |
544 | | */ |
545 | 0 | #define XML_SCHEMAS_TYPE_INTERNAL_INVALID 1 << 23 |
546 | | /** |
547 | | * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE: |
548 | | * |
549 | | * a whitespace-facet value of "preserve" |
550 | | */ |
551 | 0 | #define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE 1 << 24 |
552 | | /** |
553 | | * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE: |
554 | | * |
555 | | * a whitespace-facet value of "replace" |
556 | | */ |
557 | 0 | #define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE 1 << 25 |
558 | | /** |
559 | | * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE: |
560 | | * |
561 | | * a whitespace-facet value of "collapse" |
562 | | */ |
563 | 0 | #define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE 1 << 26 |
564 | | /** |
565 | | * XML_SCHEMAS_TYPE_HAS_FACETS: |
566 | | * |
567 | | * has facets |
568 | | */ |
569 | 0 | #define XML_SCHEMAS_TYPE_HAS_FACETS 1 << 27 |
570 | | /** |
571 | | * XML_SCHEMAS_TYPE_NORMVALUENEEDED: |
572 | | * |
573 | | * indicates if the facets (pattern) need a normalized value |
574 | | */ |
575 | 0 | #define XML_SCHEMAS_TYPE_NORMVALUENEEDED 1 << 28 |
576 | | |
577 | | /** |
578 | | * XML_SCHEMAS_TYPE_FIXUP_1: |
579 | | * |
580 | | * First stage of fixup was done. |
581 | | */ |
582 | 0 | #define XML_SCHEMAS_TYPE_FIXUP_1 1 << 29 |
583 | | |
584 | | /** |
585 | | * XML_SCHEMAS_TYPE_REDEFINED: |
586 | | * |
587 | | * The type was redefined. |
588 | | */ |
589 | 0 | #define XML_SCHEMAS_TYPE_REDEFINED 1 << 30 |
590 | | /** |
591 | | * XML_SCHEMAS_TYPE_REDEFINING: |
592 | | * |
593 | | * The type redefines an other type. |
594 | | */ |
595 | | /* #define XML_SCHEMAS_TYPE_REDEFINING 1 << 31 */ |
596 | | |
597 | | /** |
598 | | * _xmlSchemaType: |
599 | | * |
600 | | * Schemas type definition. |
601 | | */ |
602 | | struct _xmlSchemaType { |
603 | | xmlSchemaTypeType type; /* The kind of type */ |
604 | | struct _xmlSchemaType *next; /* the next type if in a sequence ... */ |
605 | | const xmlChar *name; |
606 | | const xmlChar *id ; /* Deprecated; not used */ |
607 | | const xmlChar *ref; /* Deprecated; not used */ |
608 | | const xmlChar *refNs; /* Deprecated; not used */ |
609 | | xmlSchemaAnnotPtr annot; |
610 | | xmlSchemaTypePtr subtypes; |
611 | | xmlSchemaAttributePtr attributes; /* Deprecated; not used */ |
612 | | xmlNodePtr node; |
613 | | int minOccurs; /* Deprecated; not used */ |
614 | | int maxOccurs; /* Deprecated; not used */ |
615 | | |
616 | | int flags; |
617 | | xmlSchemaContentType contentType; |
618 | | const xmlChar *base; /* Base type's local name */ |
619 | | const xmlChar *baseNs; /* Base type's target namespace */ |
620 | | xmlSchemaTypePtr baseType; /* The base type component */ |
621 | | xmlSchemaFacetPtr facets; /* Local facets */ |
622 | | struct _xmlSchemaType *redef; /* Deprecated; not used */ |
623 | | int recurse; /* Obsolete */ |
624 | | xmlSchemaAttributeLinkPtr *attributeUses; /* Deprecated; not used */ |
625 | | xmlSchemaWildcardPtr attributeWildcard; |
626 | | int builtInType; /* Type of built-in types. */ |
627 | | xmlSchemaTypeLinkPtr memberTypes; /* member-types if a union type. */ |
628 | | xmlSchemaFacetLinkPtr facetSet; /* All facets (incl. inherited) */ |
629 | | const xmlChar *refPrefix; /* Deprecated; not used */ |
630 | | xmlSchemaTypePtr contentTypeDef; /* Used for the simple content of complex types. |
631 | | Could we use @subtypes for this? */ |
632 | | xmlRegexpPtr contModel; /* Holds the automaton of the content model */ |
633 | | const xmlChar *targetNamespace; |
634 | | void *attrUses; |
635 | | }; |
636 | | |
637 | | /* |
638 | | * xmlSchemaElement: |
639 | | * An element definition. |
640 | | * |
641 | | * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of |
642 | | * structures must be kept similar |
643 | | */ |
644 | | /** |
645 | | * XML_SCHEMAS_ELEM_NILLABLE: |
646 | | * |
647 | | * the element is nillable |
648 | | */ |
649 | 0 | #define XML_SCHEMAS_ELEM_NILLABLE 1 << 0 |
650 | | /** |
651 | | * XML_SCHEMAS_ELEM_GLOBAL: |
652 | | * |
653 | | * the element is global |
654 | | */ |
655 | 0 | #define XML_SCHEMAS_ELEM_GLOBAL 1 << 1 |
656 | | /** |
657 | | * XML_SCHEMAS_ELEM_DEFAULT: |
658 | | * |
659 | | * the element has a default value |
660 | | */ |
661 | 0 | #define XML_SCHEMAS_ELEM_DEFAULT 1 << 2 |
662 | | /** |
663 | | * XML_SCHEMAS_ELEM_FIXED: |
664 | | * |
665 | | * the element has a fixed value |
666 | | */ |
667 | 0 | #define XML_SCHEMAS_ELEM_FIXED 1 << 3 |
668 | | /** |
669 | | * XML_SCHEMAS_ELEM_ABSTRACT: |
670 | | * |
671 | | * the element is abstract |
672 | | */ |
673 | 0 | #define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4 |
674 | | /** |
675 | | * XML_SCHEMAS_ELEM_TOPLEVEL: |
676 | | * |
677 | | * the element is top level |
678 | | * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead |
679 | | */ |
680 | 0 | #define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5 |
681 | | /** |
682 | | * XML_SCHEMAS_ELEM_REF: |
683 | | * |
684 | | * the element is a reference to a type |
685 | | */ |
686 | | #define XML_SCHEMAS_ELEM_REF 1 << 6 |
687 | | /** |
688 | | * XML_SCHEMAS_ELEM_NSDEFAULT: |
689 | | * |
690 | | * allow elements in no namespace |
691 | | * Obsolete, not used anymore. |
692 | | */ |
693 | | #define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7 |
694 | | /** |
695 | | * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED: |
696 | | * |
697 | | * this is set when "type", "ref", "substitutionGroup" |
698 | | * references have been resolved. |
699 | | */ |
700 | 0 | #define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED 1 << 8 |
701 | | /** |
702 | | * XML_SCHEMAS_ELEM_CIRCULAR: |
703 | | * |
704 | | * a helper flag for the search of circular references. |
705 | | */ |
706 | 0 | #define XML_SCHEMAS_ELEM_CIRCULAR 1 << 9 |
707 | | /** |
708 | | * XML_SCHEMAS_ELEM_BLOCK_ABSENT: |
709 | | * |
710 | | * the "block" attribute is absent |
711 | | */ |
712 | | #define XML_SCHEMAS_ELEM_BLOCK_ABSENT 1 << 10 |
713 | | /** |
714 | | * XML_SCHEMAS_ELEM_BLOCK_EXTENSION: |
715 | | * |
716 | | * disallowed substitutions are absent |
717 | | */ |
718 | 0 | #define XML_SCHEMAS_ELEM_BLOCK_EXTENSION 1 << 11 |
719 | | /** |
720 | | * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION: |
721 | | * |
722 | | * disallowed substitutions: "restriction" |
723 | | */ |
724 | 0 | #define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION 1 << 12 |
725 | | /** |
726 | | * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION: |
727 | | * |
728 | | * disallowed substitutions: "substitution" |
729 | | */ |
730 | 0 | #define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION 1 << 13 |
731 | | /** |
732 | | * XML_SCHEMAS_ELEM_FINAL_ABSENT: |
733 | | * |
734 | | * substitution group exclusions are absent |
735 | | */ |
736 | | #define XML_SCHEMAS_ELEM_FINAL_ABSENT 1 << 14 |
737 | | /** |
738 | | * XML_SCHEMAS_ELEM_FINAL_EXTENSION: |
739 | | * |
740 | | * substitution group exclusions: "extension" |
741 | | */ |
742 | 0 | #define XML_SCHEMAS_ELEM_FINAL_EXTENSION 1 << 15 |
743 | | /** |
744 | | * XML_SCHEMAS_ELEM_FINAL_RESTRICTION: |
745 | | * |
746 | | * substitution group exclusions: "restriction" |
747 | | */ |
748 | 0 | #define XML_SCHEMAS_ELEM_FINAL_RESTRICTION 1 << 16 |
749 | | /** |
750 | | * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD: |
751 | | * |
752 | | * the declaration is a substitution group head |
753 | | */ |
754 | 0 | #define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD 1 << 17 |
755 | | /** |
756 | | * XML_SCHEMAS_ELEM_INTERNAL_CHECKED: |
757 | | * |
758 | | * this is set when the elem decl has been checked against |
759 | | * all constraints |
760 | | */ |
761 | 0 | #define XML_SCHEMAS_ELEM_INTERNAL_CHECKED 1 << 18 |
762 | | |
763 | | typedef struct _xmlSchemaElement xmlSchemaElement; |
764 | | typedef xmlSchemaElement *xmlSchemaElementPtr; |
765 | | struct _xmlSchemaElement { |
766 | | xmlSchemaTypeType type; /* The kind of type */ |
767 | | struct _xmlSchemaType *next; /* Not used? */ |
768 | | const xmlChar *name; |
769 | | const xmlChar *id; /* Deprecated; not used */ |
770 | | const xmlChar *ref; /* Deprecated; not used */ |
771 | | const xmlChar *refNs; /* Deprecated; not used */ |
772 | | xmlSchemaAnnotPtr annot; |
773 | | xmlSchemaTypePtr subtypes; /* the type definition */ |
774 | | xmlSchemaAttributePtr attributes; |
775 | | xmlNodePtr node; |
776 | | int minOccurs; /* Deprecated; not used */ |
777 | | int maxOccurs; /* Deprecated; not used */ |
778 | | |
779 | | int flags; |
780 | | const xmlChar *targetNamespace; |
781 | | const xmlChar *namedType; |
782 | | const xmlChar *namedTypeNs; |
783 | | const xmlChar *substGroup; |
784 | | const xmlChar *substGroupNs; |
785 | | const xmlChar *scope; |
786 | | const xmlChar *value; /* The original value of the value constraint. */ |
787 | | struct _xmlSchemaElement *refDecl; /* This will now be used for the |
788 | | substitution group affiliation */ |
789 | | xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */ |
790 | | xmlSchemaContentType contentType; |
791 | | const xmlChar *refPrefix; /* Deprecated; not used */ |
792 | | xmlSchemaValPtr defVal; /* The compiled value constraint. */ |
793 | | void *idcs; /* The identity-constraint defs */ |
794 | | }; |
795 | | |
796 | | /* |
797 | | * XML_SCHEMAS_FACET_UNKNOWN: |
798 | | * |
799 | | * unknown facet handling |
800 | | */ |
801 | | #define XML_SCHEMAS_FACET_UNKNOWN 0 |
802 | | /* |
803 | | * XML_SCHEMAS_FACET_PRESERVE: |
804 | | * |
805 | | * preserve the type of the facet |
806 | | */ |
807 | 0 | #define XML_SCHEMAS_FACET_PRESERVE 1 |
808 | | /* |
809 | | * XML_SCHEMAS_FACET_REPLACE: |
810 | | * |
811 | | * replace the type of the facet |
812 | | */ |
813 | 0 | #define XML_SCHEMAS_FACET_REPLACE 2 |
814 | | /* |
815 | | * XML_SCHEMAS_FACET_COLLAPSE: |
816 | | * |
817 | | * collapse the types of the facet |
818 | | */ |
819 | 0 | #define XML_SCHEMAS_FACET_COLLAPSE 3 |
820 | | /** |
821 | | * A facet definition. |
822 | | */ |
823 | | struct _xmlSchemaFacet { |
824 | | xmlSchemaTypeType type; /* The kind of type */ |
825 | | struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */ |
826 | | const xmlChar *value; /* The original value */ |
827 | | const xmlChar *id; /* Obsolete */ |
828 | | xmlSchemaAnnotPtr annot; |
829 | | xmlNodePtr node; |
830 | | int fixed; /* XML_SCHEMAS_FACET_PRESERVE, etc. */ |
831 | | int whitespace; |
832 | | xmlSchemaValPtr val; /* The compiled value */ |
833 | | xmlRegexpPtr regexp; /* The regex for patterns */ |
834 | | }; |
835 | | |
836 | | /** |
837 | | * A notation definition. |
838 | | */ |
839 | | typedef struct _xmlSchemaNotation xmlSchemaNotation; |
840 | | typedef xmlSchemaNotation *xmlSchemaNotationPtr; |
841 | | struct _xmlSchemaNotation { |
842 | | xmlSchemaTypeType type; /* The kind of type */ |
843 | | const xmlChar *name; |
844 | | xmlSchemaAnnotPtr annot; |
845 | | const xmlChar *identifier; |
846 | | const xmlChar *targetNamespace; |
847 | | }; |
848 | | |
849 | | /* |
850 | | * TODO: Actually all those flags used for the schema should sit |
851 | | * on the schema parser context, since they are used only |
852 | | * during parsing an XML schema document, and not available |
853 | | * on the component level as per spec. |
854 | | */ |
855 | | /** |
856 | | * XML_SCHEMAS_QUALIF_ELEM: |
857 | | * |
858 | | * Reflects elementFormDefault == qualified in |
859 | | * an XML schema document. |
860 | | */ |
861 | 0 | #define XML_SCHEMAS_QUALIF_ELEM 1 << 0 |
862 | | /** |
863 | | * XML_SCHEMAS_QUALIF_ATTR: |
864 | | * |
865 | | * Reflects attributeFormDefault == qualified in |
866 | | * an XML schema document. |
867 | | */ |
868 | 0 | #define XML_SCHEMAS_QUALIF_ATTR 1 << 1 |
869 | | /** |
870 | | * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION: |
871 | | * |
872 | | * the schema has "extension" in the set of finalDefault. |
873 | | */ |
874 | 0 | #define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION 1 << 2 |
875 | | /** |
876 | | * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION: |
877 | | * |
878 | | * the schema has "restriction" in the set of finalDefault. |
879 | | */ |
880 | 0 | #define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION 1 << 3 |
881 | | /** |
882 | | * XML_SCHEMAS_FINAL_DEFAULT_LIST: |
883 | | * |
884 | | * the schema has "list" in the set of finalDefault. |
885 | | */ |
886 | 0 | #define XML_SCHEMAS_FINAL_DEFAULT_LIST 1 << 4 |
887 | | /** |
888 | | * XML_SCHEMAS_FINAL_DEFAULT_UNION: |
889 | | * |
890 | | * the schema has "union" in the set of finalDefault. |
891 | | */ |
892 | 0 | #define XML_SCHEMAS_FINAL_DEFAULT_UNION 1 << 5 |
893 | | /** |
894 | | * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION: |
895 | | * |
896 | | * the schema has "extension" in the set of blockDefault. |
897 | | */ |
898 | 0 | #define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION 1 << 6 |
899 | | /** |
900 | | * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION: |
901 | | * |
902 | | * the schema has "restriction" in the set of blockDefault. |
903 | | */ |
904 | 0 | #define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION 1 << 7 |
905 | | /** |
906 | | * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION: |
907 | | * |
908 | | * the schema has "substitution" in the set of blockDefault. |
909 | | */ |
910 | 0 | #define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION 1 << 8 |
911 | | /** |
912 | | * XML_SCHEMAS_INCLUDING_CONVERT_NS: |
913 | | * |
914 | | * the schema is currently including an other schema with |
915 | | * no target namespace. |
916 | | */ |
917 | 0 | #define XML_SCHEMAS_INCLUDING_CONVERT_NS 1 << 9 |
918 | | /** |
919 | | * _xmlSchema: |
920 | | * |
921 | | * A Schemas definition |
922 | | */ |
923 | | struct _xmlSchema { |
924 | | const xmlChar *name; /* schema name */ |
925 | | const xmlChar *targetNamespace; /* the target namespace */ |
926 | | const xmlChar *version; |
927 | | const xmlChar *id; /* Obsolete */ |
928 | | xmlDocPtr doc; |
929 | | xmlSchemaAnnotPtr annot; |
930 | | int flags; |
931 | | |
932 | | xmlHashTablePtr typeDecl; |
933 | | xmlHashTablePtr attrDecl; |
934 | | xmlHashTablePtr attrgrpDecl; |
935 | | xmlHashTablePtr elemDecl; |
936 | | xmlHashTablePtr notaDecl; |
937 | | |
938 | | xmlHashTablePtr schemasImports; |
939 | | |
940 | | void *_private; /* unused by the library for users or bindings */ |
941 | | xmlHashTablePtr groupDecl; |
942 | | xmlDictPtr dict; |
943 | | void *includes; /* the includes, this is opaque for now */ |
944 | | int preserve; /* whether to free the document */ |
945 | | int counter; /* used to give anonymous components unique names */ |
946 | | xmlHashTablePtr idcDef; /* All identity-constraint defs. */ |
947 | | void *volatiles; /* Obsolete */ |
948 | | }; |
949 | | |
950 | | XMLPUBFUN void xmlSchemaFreeType (xmlSchemaTypePtr type); |
951 | | XMLPUBFUN void xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard); |
952 | | |
953 | | #ifdef __cplusplus |
954 | | } |
955 | | #endif |
956 | | |
957 | | #endif /* LIBXML_SCHEMAS_ENABLED */ |
958 | | #endif /* __XML_SCHEMA_INTERNALS_H__ */ |