1/* 2 * Summary: internal interfaces for XML Schemas 3 * Description: internal interfaces for the XML Schemas handling 4 * and schema validity checking 5 * The Schemas development is a Work In Progress. 6 * Some of those interfaces are not guaranteed to be API or ABI stable ! 7 * 8 * Copy: See Copyright for the status of this software. 9 * 10 * Author: Daniel Veillard 11 */ 12 13 14#ifndef __XML_SCHEMA_INTERNALS_H__ 15#define __XML_SCHEMA_INTERNALS_H__ 16 17#include <libxml/xmlversion.h> 18 19#ifdef LIBXML_SCHEMAS_ENABLED 20 21#include <libxml/xmlregexp.h> 22#include <libxml/hash.h> 23#include <libxml/dict.h> 24 25#ifdef __cplusplus 26extern "C" { 27#endif 28 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 = 46 77} 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_PROHIB 123} 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_ANY 134} 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 * Annotation 147 */ 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 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 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 << 0 289 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 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 */ 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 of 383 * 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 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 */ 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 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 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 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 */ 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 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 */ 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 ononymous components unique names */ 946 xmlHashTablePtr idcDef; /* All identity-constraint defs. */ 947 void *volatiles; /* Obsolete */ 948}; 949 950XMLPUBFUN void XMLCALL xmlSchemaFreeType (xmlSchemaTypePtr type); 951XMLPUBFUN void XMLCALL xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard); 952 953#ifdef __cplusplus 954} 955#endif 956 957#endif /* LIBXML_SCHEMAS_ENABLED */ 958#endif /* __XML_SCHEMA_INTERNALS_H__ */ 959