(root)/
gettext-0.22.4/
libtextstyle/
lib/
libxml/
schemasInternals.in.h
       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__ */