1 /* 2 * Summary: internal interfaces for XML Schemas 3 * Description: internal interfaces for the XML Schemas handling 4 * and schema validity checking 5 * The Schemas development is a Work In Progress. 6 * Some of those interfaces are not guaranteed to be API or ABI stable ! 7 * 8 * Copy: See Copyright for the status of this software. 9 * 10 * Author: Daniel Veillard 11 */ 12 13 14 #ifndef __XML_SCHEMA_INTERNALS_H__ 15 #define __XML_SCHEMA_INTERNALS_H__ 16 17 #include <libxml/xmlversion.h> 18 19 #ifdef LIBXML_SCHEMAS_ENABLED 20 21 #include <libxml/xmlregexp.h> 22 #include <libxml/hash.h> 23 #include <libxml/dict.h> 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 typedef enum { 30 XML_SCHEMAS_UNKNOWN = 0, 31 XML_SCHEMAS_STRING = 1, 32 XML_SCHEMAS_NORMSTRING = 2, 33 XML_SCHEMAS_DECIMAL = 3, 34 XML_SCHEMAS_TIME = 4, 35 XML_SCHEMAS_GDAY = 5, 36 XML_SCHEMAS_GMONTH = 6, 37 XML_SCHEMAS_GMONTHDAY = 7, 38 XML_SCHEMAS_GYEAR = 8, 39 XML_SCHEMAS_GYEARMONTH = 9, 40 XML_SCHEMAS_DATE = 10, 41 XML_SCHEMAS_DATETIME = 11, 42 XML_SCHEMAS_DURATION = 12, 43 XML_SCHEMAS_FLOAT = 13, 44 XML_SCHEMAS_DOUBLE = 14, 45 XML_SCHEMAS_BOOLEAN = 15, 46 XML_SCHEMAS_TOKEN = 16, 47 XML_SCHEMAS_LANGUAGE = 17, 48 XML_SCHEMAS_NMTOKEN = 18, 49 XML_SCHEMAS_NMTOKENS = 19, 50 XML_SCHEMAS_NAME = 20, 51 XML_SCHEMAS_QNAME = 21, 52 XML_SCHEMAS_NCNAME = 22, 53 XML_SCHEMAS_ID = 23, 54 XML_SCHEMAS_IDREF = 24, 55 XML_SCHEMAS_IDREFS = 25, 56 XML_SCHEMAS_ENTITY = 26, 57 XML_SCHEMAS_ENTITIES = 27, 58 XML_SCHEMAS_NOTATION = 28, 59 XML_SCHEMAS_ANYURI = 29, 60 XML_SCHEMAS_INTEGER = 30, 61 XML_SCHEMAS_NPINTEGER = 31, 62 XML_SCHEMAS_NINTEGER = 32, 63 XML_SCHEMAS_NNINTEGER = 33, 64 XML_SCHEMAS_PINTEGER = 34, 65 XML_SCHEMAS_INT = 35, 66 XML_SCHEMAS_UINT = 36, 67 XML_SCHEMAS_LONG = 37, 68 XML_SCHEMAS_ULONG = 38, 69 XML_SCHEMAS_SHORT = 39, 70 XML_SCHEMAS_USHORT = 40, 71 XML_SCHEMAS_BYTE = 41, 72 XML_SCHEMAS_UBYTE = 42, 73 XML_SCHEMAS_HEXBINARY = 43, 74 XML_SCHEMAS_BASE64BINARY = 44, 75 XML_SCHEMAS_ANYTYPE = 45, 76 XML_SCHEMAS_ANYSIMPLETYPE = 46 77 } xmlSchemaValType; 78 79 /* 80 * XML Schemas defines multiple type of types. 81 */ 82 typedef enum { 83 XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */ 84 XML_SCHEMA_TYPE_ANY, 85 XML_SCHEMA_TYPE_FACET, 86 XML_SCHEMA_TYPE_SIMPLE, 87 XML_SCHEMA_TYPE_COMPLEX, 88 XML_SCHEMA_TYPE_SEQUENCE = 6, 89 XML_SCHEMA_TYPE_CHOICE, 90 XML_SCHEMA_TYPE_ALL, 91 XML_SCHEMA_TYPE_SIMPLE_CONTENT, 92 XML_SCHEMA_TYPE_COMPLEX_CONTENT, 93 XML_SCHEMA_TYPE_UR, 94 XML_SCHEMA_TYPE_RESTRICTION, 95 XML_SCHEMA_TYPE_EXTENSION, 96 XML_SCHEMA_TYPE_ELEMENT, 97 XML_SCHEMA_TYPE_ATTRIBUTE, 98 XML_SCHEMA_TYPE_ATTRIBUTEGROUP, 99 XML_SCHEMA_TYPE_GROUP, 100 XML_SCHEMA_TYPE_NOTATION, 101 XML_SCHEMA_TYPE_LIST, 102 XML_SCHEMA_TYPE_UNION, 103 XML_SCHEMA_TYPE_ANY_ATTRIBUTE, 104 XML_SCHEMA_TYPE_IDC_UNIQUE, 105 XML_SCHEMA_TYPE_IDC_KEY, 106 XML_SCHEMA_TYPE_IDC_KEYREF, 107 XML_SCHEMA_TYPE_PARTICLE = 25, 108 XML_SCHEMA_TYPE_ATTRIBUTE_USE, 109 XML_SCHEMA_FACET_MININCLUSIVE = 1000, 110 XML_SCHEMA_FACET_MINEXCLUSIVE, 111 XML_SCHEMA_FACET_MAXINCLUSIVE, 112 XML_SCHEMA_FACET_MAXEXCLUSIVE, 113 XML_SCHEMA_FACET_TOTALDIGITS, 114 XML_SCHEMA_FACET_FRACTIONDIGITS, 115 XML_SCHEMA_FACET_PATTERN, 116 XML_SCHEMA_FACET_ENUMERATION, 117 XML_SCHEMA_FACET_WHITESPACE, 118 XML_SCHEMA_FACET_LENGTH, 119 XML_SCHEMA_FACET_MAXLENGTH, 120 XML_SCHEMA_FACET_MINLENGTH, 121 XML_SCHEMA_EXTRA_QNAMEREF = 2000, 122 XML_SCHEMA_EXTRA_ATTR_USE_PROHIB 123 } xmlSchemaTypeType; 124 125 typedef enum { 126 XML_SCHEMA_CONTENT_UNKNOWN = 0, 127 XML_SCHEMA_CONTENT_EMPTY = 1, 128 XML_SCHEMA_CONTENT_ELEMENTS, 129 XML_SCHEMA_CONTENT_MIXED, 130 XML_SCHEMA_CONTENT_SIMPLE, 131 XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, /* Obsolete */ 132 XML_SCHEMA_CONTENT_BASIC, 133 XML_SCHEMA_CONTENT_ANY 134 } xmlSchemaContentType; 135 136 typedef struct _xmlSchemaVal xmlSchemaVal; 137 typedef xmlSchemaVal *xmlSchemaValPtr; 138 139 typedef struct _xmlSchemaType xmlSchemaType; 140 typedef xmlSchemaType *xmlSchemaTypePtr; 141 142 typedef struct _xmlSchemaFacet xmlSchemaFacet; 143 typedef xmlSchemaFacet *xmlSchemaFacetPtr; 144 145 /** 146 * Annotation 147 */ 148 typedef struct _xmlSchemaAnnot xmlSchemaAnnot; 149 typedef xmlSchemaAnnot *xmlSchemaAnnotPtr; 150 struct _xmlSchemaAnnot { 151 struct _xmlSchemaAnnot *next; 152 xmlNodePtr content; /* the annotation */ 153 }; 154 155 /** 156 * XML_SCHEMAS_ANYATTR_SKIP: 157 * 158 * Skip unknown attribute from validation 159 * Obsolete, not used anymore. 160 */ 161 #define XML_SCHEMAS_ANYATTR_SKIP 1 162 /** 163 * XML_SCHEMAS_ANYATTR_LAX: 164 * 165 * Ignore validation non definition on attributes 166 * Obsolete, not used anymore. 167 */ 168 #define XML_SCHEMAS_ANYATTR_LAX 2 169 /** 170 * XML_SCHEMAS_ANYATTR_STRICT: 171 * 172 * Apply strict validation rules on attributes 173 * Obsolete, not used anymore. 174 */ 175 #define XML_SCHEMAS_ANYATTR_STRICT 3 176 /** 177 * XML_SCHEMAS_ANY_SKIP: 178 * 179 * Skip unknown attribute from validation 180 */ 181 #define XML_SCHEMAS_ANY_SKIP 1 182 /** 183 * XML_SCHEMAS_ANY_LAX: 184 * 185 * Used by wildcards. 186 * Validate if type found, don't worry if not found 187 */ 188 #define XML_SCHEMAS_ANY_LAX 2 189 /** 190 * XML_SCHEMAS_ANY_STRICT: 191 * 192 * Used by wildcards. 193 * Apply strict validation rules 194 */ 195 #define XML_SCHEMAS_ANY_STRICT 3 196 /** 197 * XML_SCHEMAS_ATTR_USE_PROHIBITED: 198 * 199 * Used by wildcards. 200 * The attribute is prohibited. 201 */ 202 #define XML_SCHEMAS_ATTR_USE_PROHIBITED 0 203 /** 204 * XML_SCHEMAS_ATTR_USE_REQUIRED: 205 * 206 * The attribute is required. 207 */ 208 #define XML_SCHEMAS_ATTR_USE_REQUIRED 1 209 /** 210 * XML_SCHEMAS_ATTR_USE_OPTIONAL: 211 * 212 * The attribute is optional. 213 */ 214 #define XML_SCHEMAS_ATTR_USE_OPTIONAL 2 215 /** 216 * XML_SCHEMAS_ATTR_GLOBAL: 217 * 218 * allow elements in no namespace 219 */ 220 #define XML_SCHEMAS_ATTR_GLOBAL 1 << 0 221 /** 222 * XML_SCHEMAS_ATTR_NSDEFAULT: 223 * 224 * allow elements in no namespace 225 */ 226 #define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7 227 /** 228 * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED: 229 * 230 * this is set when the "type" and "ref" references 231 * have been resolved. 232 */ 233 #define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8 234 /** 235 * XML_SCHEMAS_ATTR_FIXED: 236 * 237 * the attribute has a fixed value 238 */ 239 #define XML_SCHEMAS_ATTR_FIXED 1 << 9 240 241 /** 242 * xmlSchemaAttribute: 243 * An attribute definition. 244 */ 245 246 typedef struct _xmlSchemaAttribute xmlSchemaAttribute; 247 typedef xmlSchemaAttribute *xmlSchemaAttributePtr; 248 struct _xmlSchemaAttribute { 249 xmlSchemaTypeType type; 250 struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */ 251 const xmlChar *name; /* the name of the declaration */ 252 const xmlChar *id; /* Deprecated; not used */ 253 const xmlChar *ref; /* Deprecated; not used */ 254 const xmlChar *refNs; /* Deprecated; not used */ 255 const xmlChar *typeName; /* the local name of the type definition */ 256 const xmlChar *typeNs; /* the ns URI of the type definition */ 257 xmlSchemaAnnotPtr annot; 258 259 xmlSchemaTypePtr base; /* Deprecated; not used */ 260 int occurs; /* Deprecated; not used */ 261 const xmlChar *defValue; /* The initial value of the value constraint */ 262 xmlSchemaTypePtr subtypes; /* the type definition */ 263 xmlNodePtr node; 264 const xmlChar *targetNamespace; 265 int flags; 266 const xmlChar *refPrefix; /* Deprecated; not used */ 267 xmlSchemaValPtr defVal; /* The compiled value constraint */ 268 xmlSchemaAttributePtr refDecl; /* Deprecated; not used */ 269 }; 270 271 /** 272 * xmlSchemaAttributeLink: 273 * Used to build a list of attribute uses on complexType definitions. 274 * WARNING: Deprecated; not used. 275 */ 276 typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink; 277 typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr; 278 struct _xmlSchemaAttributeLink { 279 struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */ 280 struct _xmlSchemaAttribute *attr;/* the linked attribute */ 281 }; 282 283 /** 284 * XML_SCHEMAS_WILDCARD_COMPLETE: 285 * 286 * If the wildcard is complete. 287 */ 288 #define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0 289 290 /** 291 * xmlSchemaCharValueLink: 292 * Used to build a list of namespaces on wildcards. 293 */ 294 typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs; 295 typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr; 296 struct _xmlSchemaWildcardNs { 297 struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */ 298 const xmlChar *value;/* the value */ 299 }; 300 301 /** 302 * xmlSchemaWildcard. 303 * A wildcard. 304 */ 305 typedef struct _xmlSchemaWildcard xmlSchemaWildcard; 306 typedef xmlSchemaWildcard *xmlSchemaWildcardPtr; 307 struct _xmlSchemaWildcard { 308 xmlSchemaTypeType type; /* The kind of type */ 309 const xmlChar *id; /* Deprecated; not used */ 310 xmlSchemaAnnotPtr annot; 311 xmlNodePtr node; 312 int minOccurs; /* Deprecated; not used */ 313 int maxOccurs; /* Deprecated; not used */ 314 int processContents; 315 int any; /* Indicates if the ns constraint is of ##any */ 316 xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */ 317 xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */ 318 int flags; 319 }; 320 321 /** 322 * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED: 323 * 324 * The attribute wildcard has been built. 325 */ 326 #define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0 327 /** 328 * XML_SCHEMAS_ATTRGROUP_GLOBAL: 329 * 330 * The attribute group has been defined. 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: "substitution" 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 constraint. */ 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 schema 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 anonymous 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__ */ 959