codekingpro/portable-devtools
114k
1/*2 * Summary: internal interfaces for XML Schemas3 * Description: internal interfaces for the XML Schemas handling4 * and schema validity checking5 * 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 Veillard11 */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_ENABLED20 21#include <libxml/xmlregexp.h>22#include <libxml/hash.h>23#include <libxml/dict.h>24 25#ifdef __cplusplus26extern "C" {27#endif28 29typedef 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 = 4677} xmlSchemaValType;78 79/*80 * XML Schemas defines multiple type of types.81 */82typedef 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_PROHIB123} xmlSchemaTypeType;124 125typedef 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_ANY134} xmlSchemaContentType;135 136typedef struct _xmlSchemaVal xmlSchemaVal;137typedef xmlSchemaVal *xmlSchemaValPtr;138 139typedef struct _xmlSchemaType xmlSchemaType;140typedef xmlSchemaType *xmlSchemaTypePtr;141 142typedef struct _xmlSchemaFacet xmlSchemaFacet;143typedef xmlSchemaFacet *xmlSchemaFacetPtr;144 145/**146 * Annotation147 */148typedef struct _xmlSchemaAnnot xmlSchemaAnnot;149typedef xmlSchemaAnnot *xmlSchemaAnnotPtr;150struct _xmlSchemaAnnot {151 struct _xmlSchemaAnnot *next;152 xmlNodePtr content; /* the annotation */153};154 155/**156 * XML_SCHEMAS_ANYATTR_SKIP:157 *158 * Skip unknown attribute from validation159 * Obsolete, not used anymore.160 */161#define XML_SCHEMAS_ANYATTR_SKIP 1162/**163 * XML_SCHEMAS_ANYATTR_LAX:164 *165 * Ignore validation non definition on attributes166 * Obsolete, not used anymore.167 */168#define XML_SCHEMAS_ANYATTR_LAX 2169/**170 * XML_SCHEMAS_ANYATTR_STRICT:171 *172 * Apply strict validation rules on attributes173 * Obsolete, not used anymore.174 */175#define XML_SCHEMAS_ANYATTR_STRICT 3176/**177 * XML_SCHEMAS_ANY_SKIP:178 *179 * Skip unknown attribute from validation180 */181#define XML_SCHEMAS_ANY_SKIP 1182/**183 * XML_SCHEMAS_ANY_LAX:184 *185 * Used by wildcards.186 * Validate if type found, don't worry if not found187 */188#define XML_SCHEMAS_ANY_LAX 2189/**190 * XML_SCHEMAS_ANY_STRICT:191 *192 * Used by wildcards.193 * Apply strict validation rules194 */195#define XML_SCHEMAS_ANY_STRICT 3196/**197 * XML_SCHEMAS_ATTR_USE_PROHIBITED:198 *199 * Used by wildcards.200 * The attribute is prohibited.201 */202#define XML_SCHEMAS_ATTR_USE_PROHIBITED 0203/**204 * XML_SCHEMAS_ATTR_USE_REQUIRED:205 *206 * The attribute is required.207 */208#define XML_SCHEMAS_ATTR_USE_REQUIRED 1209/**210 * XML_SCHEMAS_ATTR_USE_OPTIONAL:211 *212 * The attribute is optional.213 */214#define XML_SCHEMAS_ATTR_USE_OPTIONAL 2215/**216 * XML_SCHEMAS_ATTR_GLOBAL:217 *218 * allow elements in no namespace219 */220#define XML_SCHEMAS_ATTR_GLOBAL 1 << 0221/**222 * XML_SCHEMAS_ATTR_NSDEFAULT:223 *224 * allow elements in no namespace225 */226#define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7227/**228 * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED:229 *230 * this is set when the "type" and "ref" references231 * have been resolved.232 */233#define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8234/**235 * XML_SCHEMAS_ATTR_FIXED:236 *237 * the attribute has a fixed value238 */239#define XML_SCHEMAS_ATTR_FIXED 1 << 9240 241/**242 * xmlSchemaAttribute:243 * An attribute definition.244 */245 246typedef struct _xmlSchemaAttribute xmlSchemaAttribute;247typedef xmlSchemaAttribute *xmlSchemaAttributePtr;248struct _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 */276typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink;277typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr;278struct _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 << 0289 290/**291 * xmlSchemaCharValueLink:292 * Used to build a list of namespaces on wildcards.293 */294typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs;295typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr;296struct _xmlSchemaWildcardNs {297 struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */298 const xmlChar *value;/* the value */299};300 301/**302 * xmlSchemaWildcard.303 * A wildcard.304 */305typedef struct _xmlSchemaWildcard xmlSchemaWildcard;306typedef xmlSchemaWildcard *xmlSchemaWildcardPtr;307struct _xmlSchemaWildcard {308 xmlSchemaTypeType type; /* The kind of type */309 const xmlChar *id; /* Deprecated; not used */310 xmlSchemaAnnotPtr annot;311 xmlNodePtr node;312 int minOccurs; /* Deprecated; not used */313 int maxOccurs; /* Deprecated; not used */314 int processContents;315 int any; /* Indicates if the ns constraint is of ##any */316 xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */317 xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */318 int flags;319};320 321/**322 * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED:323 *324 * The attribute wildcard has been built.325 */326#define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0327/**328 * XML_SCHEMAS_ATTRGROUP_GLOBAL:329 *330 * The attribute group has been defined.331 */332#define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1333/**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 << 2339 340/**341 * XML_SCHEMAS_ATTRGROUP_REDEFINED:342 *343 * The attr group was redefined.344 */345#define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3346/**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 << 4352 353/**354 * An attribute group definition.355 *356 * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures357 * must be kept similar358 */359typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;360typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr;361struct _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 of383 * simpleType with variety "union").384 */385typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink;386typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr;387struct _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 */396typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink;397typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr;398struct _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 mixed407 */408#define XML_SCHEMAS_TYPE_MIXED 1 << 0409/**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 << 1415/**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 << 2421/**422 * XML_SCHEMAS_TYPE_GLOBAL:423 *424 * the type is global425 */426#define XML_SCHEMAS_TYPE_GLOBAL 1 << 3427/**428 * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD:429 *430 * the complexType owns an attribute wildcard, i.e.431 * it can be freed by the complexType432 */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 if439 * none of the variety flags occur then it's440 * automatically absent.441 */442#define XML_SCHEMAS_TYPE_VARIETY_ABSENT 1 << 5443/**444 * XML_SCHEMAS_TYPE_VARIETY_LIST:445 *446 * the simpleType has a variety of "list".447 */448#define XML_SCHEMAS_TYPE_VARIETY_LIST 1 << 6449/**450 * XML_SCHEMAS_TYPE_VARIETY_UNION:451 *452 * the simpleType has a variety of "union".453 */454#define XML_SCHEMAS_TYPE_VARIETY_UNION 1 << 7455/**456 * XML_SCHEMAS_TYPE_VARIETY_ATOMIC:457 *458 * the simpleType has a variety of "union".459 */460#define XML_SCHEMAS_TYPE_VARIETY_ATOMIC 1 << 8461/**462 * XML_SCHEMAS_TYPE_FINAL_EXTENSION:463 *464 * the complexType has a final of "extension".465 */466#define XML_SCHEMAS_TYPE_FINAL_EXTENSION 1 << 9467/**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 << 10473/**474 * XML_SCHEMAS_TYPE_FINAL_LIST:475 *476 * the simpleType has a final of "list".477 */478#define XML_SCHEMAS_TYPE_FINAL_LIST 1 << 11479/**480 * XML_SCHEMAS_TYPE_FINAL_UNION:481 *482 * the simpleType has a final of "union".483 */484#define XML_SCHEMAS_TYPE_FINAL_UNION 1 << 12485/**486 * XML_SCHEMAS_TYPE_FINAL_DEFAULT:487 *488 * the simpleType has a final of "default".489 */490#define XML_SCHEMAS_TYPE_FINAL_DEFAULT 1 << 13491/**492 * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE:493 *494 * Marks the item as a builtin primitive.495 */496#define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE 1 << 14497/**498 * XML_SCHEMAS_TYPE_MARKED:499 *500 * Marks the item as marked; used for circular checks.501 */502#define XML_SCHEMAS_TYPE_MARKED 1 << 16503/**504 * XML_SCHEMAS_TYPE_BLOCK_DEFAULT:505 *506 * the complexType did not specify 'block' so use the default of the507 * <schema> item.508 */509#define XML_SCHEMAS_TYPE_BLOCK_DEFAULT 1 << 17510/**511 * XML_SCHEMAS_TYPE_BLOCK_EXTENSION:512 *513 * the complexType has a 'block' of "extension".514 */515#define XML_SCHEMAS_TYPE_BLOCK_EXTENSION 1 << 18516/**517 * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION:518 *519 * the complexType has a 'block' of "restriction".520 */521#define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION 1 << 19522/**523 * XML_SCHEMAS_TYPE_ABSTRACT:524 *525 * the simple/complexType is abstract.526 */527#define XML_SCHEMAS_TYPE_ABSTRACT 1 << 20528/**529 * XML_SCHEMAS_TYPE_FACETSNEEDVALUE:530 *531 * indicates if the facets need a computed value532 */533#define XML_SCHEMAS_TYPE_FACETSNEEDVALUE 1 << 21534/**535 * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED:536 *537 * indicates that the type was typefixed538 */539#define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED 1 << 22540/**541 * XML_SCHEMAS_TYPE_INTERNAL_INVALID:542 *543 * indicates that the type is invalid544 */545#define XML_SCHEMAS_TYPE_INTERNAL_INVALID 1 << 23546/**547 * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE:548 *549 * a whitespace-facet value of "preserve"550 */551#define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE 1 << 24552/**553 * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE:554 *555 * a whitespace-facet value of "replace"556 */557#define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE 1 << 25558/**559 * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE:560 *561 * a whitespace-facet value of "collapse"562 */563#define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE 1 << 26564/**565 * XML_SCHEMAS_TYPE_HAS_FACETS:566 *567 * has facets568 */569#define XML_SCHEMAS_TYPE_HAS_FACETS 1 << 27570/**571 * XML_SCHEMAS_TYPE_NORMVALUENEEDED:572 *573 * indicates if the facets (pattern) need a normalized value574 */575#define XML_SCHEMAS_TYPE_NORMVALUENEEDED 1 << 28576 577/**578 * XML_SCHEMAS_TYPE_FIXUP_1:579 *580 * First stage of fixup was done.581 */582#define XML_SCHEMAS_TYPE_FIXUP_1 1 << 29583 584/**585 * XML_SCHEMAS_TYPE_REDEFINED:586 *587 * The type was redefined.588 */589#define XML_SCHEMAS_TYPE_REDEFINED 1 << 30590/**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 */602struct _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 of642 * structures must be kept similar643 */644/**645 * XML_SCHEMAS_ELEM_NILLABLE:646 *647 * the element is nillable648 */649#define XML_SCHEMAS_ELEM_NILLABLE 1 << 0650/**651 * XML_SCHEMAS_ELEM_GLOBAL:652 *653 * the element is global654 */655#define XML_SCHEMAS_ELEM_GLOBAL 1 << 1656/**657 * XML_SCHEMAS_ELEM_DEFAULT:658 *659 * the element has a default value660 */661#define XML_SCHEMAS_ELEM_DEFAULT 1 << 2662/**663 * XML_SCHEMAS_ELEM_FIXED:664 *665 * the element has a fixed value666 */667#define XML_SCHEMAS_ELEM_FIXED 1 << 3668/**669 * XML_SCHEMAS_ELEM_ABSTRACT:670 *671 * the element is abstract672 */673#define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4674/**675 * XML_SCHEMAS_ELEM_TOPLEVEL:676 *677 * the element is top level678 * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead679 */680#define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5681/**682 * XML_SCHEMAS_ELEM_REF:683 *684 * the element is a reference to a type685 */686#define XML_SCHEMAS_ELEM_REF 1 << 6687/**688 * XML_SCHEMAS_ELEM_NSDEFAULT:689 *690 * allow elements in no namespace691 * Obsolete, not used anymore.692 */693#define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7694/**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 << 8701 /**702 * XML_SCHEMAS_ELEM_CIRCULAR:703 *704 * a helper flag for the search of circular references.705 */706#define XML_SCHEMAS_ELEM_CIRCULAR 1 << 9707/**708 * XML_SCHEMAS_ELEM_BLOCK_ABSENT:709 *710 * the "block" attribute is absent711 */712#define XML_SCHEMAS_ELEM_BLOCK_ABSENT 1 << 10713/**714 * XML_SCHEMAS_ELEM_BLOCK_EXTENSION:715 *716 * disallowed substitutions are absent717 */718#define XML_SCHEMAS_ELEM_BLOCK_EXTENSION 1 << 11719/**720 * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION:721 *722 * disallowed substitutions: "restriction"723 */724#define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION 1 << 12725/**726 * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION:727 *728 * disallowed substitutions: "substitution"729 */730#define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION 1 << 13731/**732 * XML_SCHEMAS_ELEM_FINAL_ABSENT:733 *734 * substitution group exclusions are absent735 */736#define XML_SCHEMAS_ELEM_FINAL_ABSENT 1 << 14737/**738 * XML_SCHEMAS_ELEM_FINAL_EXTENSION:739 *740 * substitution group exclusions: "extension"741 */742#define XML_SCHEMAS_ELEM_FINAL_EXTENSION 1 << 15743/**744 * XML_SCHEMAS_ELEM_FINAL_RESTRICTION:745 *746 * substitution group exclusions: "restriction"747 */748#define XML_SCHEMAS_ELEM_FINAL_RESTRICTION 1 << 16749/**750 * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD:751 *752 * the declaration is a substitution group head753 */754#define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD 1 << 17755/**756 * XML_SCHEMAS_ELEM_INTERNAL_CHECKED:757 *758 * this is set when the elem decl has been checked against759 * all constraints760 */761#define XML_SCHEMAS_ELEM_INTERNAL_CHECKED 1 << 18762 763typedef struct _xmlSchemaElement xmlSchemaElement;764typedef xmlSchemaElement *xmlSchemaElementPtr;765struct _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 the788 substitution group affiliation */789 xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */790 xmlSchemaContentType contentType;791 const xmlChar *refPrefix; /* Deprecated; not used */792 xmlSchemaValPtr defVal; /* The compiled value constraint. */793 void *idcs; /* The identity-constraint defs */794};795 796/*797 * XML_SCHEMAS_FACET_UNKNOWN:798 *799 * unknown facet handling800 */801#define XML_SCHEMAS_FACET_UNKNOWN 0802/*803 * XML_SCHEMAS_FACET_PRESERVE:804 *805 * preserve the type of the facet806 */807#define XML_SCHEMAS_FACET_PRESERVE 1808/*809 * XML_SCHEMAS_FACET_REPLACE:810 *811 * replace the type of the facet812 */813#define XML_SCHEMAS_FACET_REPLACE 2814/*815 * XML_SCHEMAS_FACET_COLLAPSE:816 *817 * collapse the types of the facet818 */819#define XML_SCHEMAS_FACET_COLLAPSE 3820/**821 * A facet definition.822 */823struct _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 */839typedef struct _xmlSchemaNotation xmlSchemaNotation;840typedef xmlSchemaNotation *xmlSchemaNotationPtr;841struct _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 sit851* on the schema parser context, since they are used only852* during parsing an XML schema document, and not available853* on the component level as per spec.854*/855/**856 * XML_SCHEMAS_QUALIF_ELEM:857 *858 * Reflects elementFormDefault == qualified in859 * an XML schema document.860 */861#define XML_SCHEMAS_QUALIF_ELEM 1 << 0862/**863 * XML_SCHEMAS_QUALIF_ATTR:864 *865 * Reflects attributeFormDefault == qualified in866 * an XML schema document.867 */868#define XML_SCHEMAS_QUALIF_ATTR 1 << 1869/**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 << 2875/**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 << 3881/**882 * XML_SCHEMAS_FINAL_DEFAULT_LIST:883 *884 * the schema has "list" in the set of finalDefault.885 */886#define XML_SCHEMAS_FINAL_DEFAULT_LIST 1 << 4887/**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 << 5893/**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 << 6899/**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 << 7905/**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 << 8911/**912 * XML_SCHEMAS_INCLUDING_CONVERT_NS:913 *914 * the schema is currently including an other schema with915 * no target namespace.916 */917#define XML_SCHEMAS_INCLUDING_CONVERT_NS 1 << 9918/**919 * _xmlSchema:920 *921 * A Schemas definition922 */923struct _xmlSchema {924 const xmlChar *name; /* schema name */925 const xmlChar *targetNamespace; /* the target namespace */926 const xmlChar *version;927 const xmlChar *id; /* Obsolete */928 xmlDocPtr doc;929 xmlSchemaAnnotPtr annot;930 int flags;931 932 xmlHashTablePtr typeDecl;933 xmlHashTablePtr attrDecl;934 xmlHashTablePtr attrgrpDecl;935 xmlHashTablePtr elemDecl;936 xmlHashTablePtr notaDecl;937 938 xmlHashTablePtr schemasImports;939 940 void *_private; /* unused by the library for users or bindings */941 xmlHashTablePtr groupDecl;942 xmlDictPtr dict;943 void *includes; /* the includes, this is opaque for now */944 int preserve; /* whether to free the document */945 int counter; /* used to give anonymous components unique names */946 xmlHashTablePtr idcDef; /* All identity-constraint defs. */947 void *volatiles; /* Obsolete */948};949 950XMLPUBFUN void xmlSchemaFreeType (xmlSchemaTypePtr type);951XMLPUBFUN void xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard);952 953#ifdef __cplusplus954}955#endif956 957#endif /* LIBXML_SCHEMAS_ENABLED */958#endif /* __XML_SCHEMA_INTERNALS_H__ */959 