File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / include / libxml / schemasInternals.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 19:53:38 2014 UTC (10 years, 3 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, HEAD
libxml2 2.9.1

    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 garanteed 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,
   32:     XML_SCHEMAS_NORMSTRING,
   33:     XML_SCHEMAS_DECIMAL,
   34:     XML_SCHEMAS_TIME,
   35:     XML_SCHEMAS_GDAY,
   36:     XML_SCHEMAS_GMONTH,
   37:     XML_SCHEMAS_GMONTHDAY,
   38:     XML_SCHEMAS_GYEAR,
   39:     XML_SCHEMAS_GYEARMONTH,
   40:     XML_SCHEMAS_DATE,
   41:     XML_SCHEMAS_DATETIME,
   42:     XML_SCHEMAS_DURATION,
   43:     XML_SCHEMAS_FLOAT,
   44:     XML_SCHEMAS_DOUBLE,
   45:     XML_SCHEMAS_BOOLEAN,
   46:     XML_SCHEMAS_TOKEN,
   47:     XML_SCHEMAS_LANGUAGE,
   48:     XML_SCHEMAS_NMTOKEN,
   49:     XML_SCHEMAS_NMTOKENS,
   50:     XML_SCHEMAS_NAME,
   51:     XML_SCHEMAS_QNAME,
   52:     XML_SCHEMAS_NCNAME,
   53:     XML_SCHEMAS_ID,
   54:     XML_SCHEMAS_IDREF,
   55:     XML_SCHEMAS_IDREFS,
   56:     XML_SCHEMAS_ENTITY,
   57:     XML_SCHEMAS_ENTITIES,
   58:     XML_SCHEMAS_NOTATION,
   59:     XML_SCHEMAS_ANYURI,
   60:     XML_SCHEMAS_INTEGER,
   61:     XML_SCHEMAS_NPINTEGER,
   62:     XML_SCHEMAS_NINTEGER,
   63:     XML_SCHEMAS_NNINTEGER,
   64:     XML_SCHEMAS_PINTEGER,
   65:     XML_SCHEMAS_INT,
   66:     XML_SCHEMAS_UINT,
   67:     XML_SCHEMAS_LONG,
   68:     XML_SCHEMAS_ULONG,
   69:     XML_SCHEMAS_SHORT,
   70:     XML_SCHEMAS_USHORT,
   71:     XML_SCHEMAS_BYTE,
   72:     XML_SCHEMAS_UBYTE,
   73:     XML_SCHEMAS_HEXBINARY,
   74:     XML_SCHEMAS_BASE64BINARY,
   75:     XML_SCHEMAS_ANYTYPE,
   76:     XML_SCHEMAS_ANYSIMPLETYPE
   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__ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>