/ libxml2 / include / libxml / schemasInternals.h
schemasInternals.h
  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  #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  #define XML_SCHEMAS_ANY_LAX                2
189  /**
190   * XML_SCHEMAS_ANY_STRICT:
191   *
192   * Used by wildcards.
193   * Apply strict validation rules
194   */
195  #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  #define XML_SCHEMAS_ATTR_USE_PROHIBITED 0
203  /**
204   * XML_SCHEMAS_ATTR_USE_REQUIRED:
205   *
206   * The attribute is required.
207   */
208  #define XML_SCHEMAS_ATTR_USE_REQUIRED 1
209  /**
210   * XML_SCHEMAS_ATTR_USE_OPTIONAL:
211   *
212   * The attribute is optional.
213   */
214  #define XML_SCHEMAS_ATTR_USE_OPTIONAL 2
215  /**
216   * XML_SCHEMAS_ATTR_GLOBAL:
217   *
218   * allow elements in no namespace
219   */
220  #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  #define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED        1 << 8
234  /**
235   * XML_SCHEMAS_ATTR_FIXED:
236   *
237   * the attribute has a fixed value
238   */
239  #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 already builded.
325   */
326  #define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0
327  /**
328   * XML_SCHEMAS_ATTRGROUP_GLOBAL:
329   *
330   * The attribute wildcard has been already builded.
331   */
332  #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  #define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2
339  
340  /**
341   * XML_SCHEMAS_ATTRGROUP_REDEFINED:
342   *
343   * The attr group was redefined.
344   */
345  #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  #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  #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  #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  #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION                1 << 2
421  /**
422   * XML_SCHEMAS_TYPE_GLOBAL:
423   *
424   * the type is global
425   */
426  #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  #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  #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  #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  #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  #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  #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  #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  #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  #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  #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  #define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION    1 << 19
522  /**
523   * XML_SCHEMAS_TYPE_ABSTRACT:
524   *
525   * the simple/complexType is abstract.
526   */
527  #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  #define XML_SCHEMAS_TYPE_FACETSNEEDVALUE    1 << 21
534  /**
535   * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED:
536   *
537   * indicates that the type was typefixed
538   */
539  #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  #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  #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  #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  #define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE    1 << 26
564  /**
565   * XML_SCHEMAS_TYPE_HAS_FACETS:
566   *
567   * has facets
568   */
569  #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  #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  #define XML_SCHEMAS_TYPE_FIXUP_1    1 << 29
583  
584  /**
585   * XML_SCHEMAS_TYPE_REDEFINED:
586   *
587   * The type was redefined.
588   */
589  #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  #define XML_SCHEMAS_ELEM_NILLABLE        1 << 0
650  /**
651   * XML_SCHEMAS_ELEM_GLOBAL:
652   *
653   * the element is global
654   */
655  #define XML_SCHEMAS_ELEM_GLOBAL                1 << 1
656  /**
657   * XML_SCHEMAS_ELEM_DEFAULT:
658   *
659   * the element has a default value
660   */
661  #define XML_SCHEMAS_ELEM_DEFAULT        1 << 2
662  /**
663   * XML_SCHEMAS_ELEM_FIXED:
664   *
665   * the element has a fixed value
666   */
667  #define XML_SCHEMAS_ELEM_FIXED                1 << 3
668  /**
669   * XML_SCHEMAS_ELEM_ABSTRACT:
670   *
671   * the element is abstract
672   */
673  #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  #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  #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  #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  #define XML_SCHEMAS_ELEM_BLOCK_EXTENSION        1 << 11
719  /**
720   * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION:
721   *
722   * disallowed substitutions: "restriction"
723   */
724  #define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION        1 << 12
725  /**
726   * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION:
727   *
728   * disallowed substitutions: "substituion"
729   */
730  #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  #define XML_SCHEMAS_ELEM_FINAL_EXTENSION        1 << 15
743  /**
744   * XML_SCHEMAS_ELEM_FINAL_RESTRICTION:
745   *
746   * substitution group exclusions: "restriction"
747   */
748  #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  #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  #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 contraint. */
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  #define XML_SCHEMAS_FACET_PRESERVE        1
808  /*
809   * XML_SCHEMAS_FACET_REPLACE:
810   *
811   * replace the type of the facet
812   */
813  #define XML_SCHEMAS_FACET_REPLACE        2
814  /*
815   * XML_SCHEMAS_FACET_COLLAPSE:
816   *
817   * collapse the types of the facet
818   */
819  #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  #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  #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  #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  #define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION            1 << 3
881  /**
882   * XML_SCHEMAS_FINAL_DEFAULT_LIST:
883   *
884   * the cshema has "list" in the set of finalDefault.
885   */
886  #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  #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  #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  #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  #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  #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 ononymous components unique names */
946      xmlHashTablePtr idcDef; /* All identity-constraint defs. */
947      void *volatiles; /* Obsolete */
948  };
949  
950  XMLPUBFUN void XMLCALL         xmlSchemaFreeType        (xmlSchemaTypePtr type);
951  XMLPUBFUN void XMLCALL         xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard);
952  
953  #ifdef __cplusplus
954  }
955  #endif
956  
957  #endif /* LIBXML_SCHEMAS_ENABLED */
958  #endif /* __XML_SCHEMA_INTERNALS_H__ */