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