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 #include <libxml/tree.h> 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 typedef enum { 31 XML_SCHEMAS_UNKNOWN = 0, 32 XML_SCHEMAS_STRING = 1, 33 XML_SCHEMAS_NORMSTRING = 2, 34 XML_SCHEMAS_DECIMAL = 3, 35 XML_SCHEMAS_TIME = 4, 36 XML_SCHEMAS_GDAY = 5, 37 XML_SCHEMAS_GMONTH = 6, 38 XML_SCHEMAS_GMONTHDAY = 7, 39 XML_SCHEMAS_GYEAR = 8, 40 XML_SCHEMAS_GYEARMONTH = 9, 41 XML_SCHEMAS_DATE = 10, 42 XML_SCHEMAS_DATETIME = 11, 43 XML_SCHEMAS_DURATION = 12, 44 XML_SCHEMAS_FLOAT = 13, 45 XML_SCHEMAS_DOUBLE = 14, 46 XML_SCHEMAS_BOOLEAN = 15, 47 XML_SCHEMAS_TOKEN = 16, 48 XML_SCHEMAS_LANGUAGE = 17, 49 XML_SCHEMAS_NMTOKEN = 18, 50 XML_SCHEMAS_NMTOKENS = 19, 51 XML_SCHEMAS_NAME = 20, 52 XML_SCHEMAS_QNAME = 21, 53 XML_SCHEMAS_NCNAME = 22, 54 XML_SCHEMAS_ID = 23, 55 XML_SCHEMAS_IDREF = 24, 56 XML_SCHEMAS_IDREFS = 25, 57 XML_SCHEMAS_ENTITY = 26, 58 XML_SCHEMAS_ENTITIES = 27, 59 XML_SCHEMAS_NOTATION = 28, 60 XML_SCHEMAS_ANYURI = 29, 61 XML_SCHEMAS_INTEGER = 30, 62 XML_SCHEMAS_NPINTEGER = 31, 63 XML_SCHEMAS_NINTEGER = 32, 64 XML_SCHEMAS_NNINTEGER = 33, 65 XML_SCHEMAS_PINTEGER = 34, 66 XML_SCHEMAS_INT = 35, 67 XML_SCHEMAS_UINT = 36, 68 XML_SCHEMAS_LONG = 37, 69 XML_SCHEMAS_ULONG = 38, 70 XML_SCHEMAS_SHORT = 39, 71 XML_SCHEMAS_USHORT = 40, 72 XML_SCHEMAS_BYTE = 41, 73 XML_SCHEMAS_UBYTE = 42, 74 XML_SCHEMAS_HEXBINARY = 43, 75 XML_SCHEMAS_BASE64BINARY = 44, 76 XML_SCHEMAS_ANYTYPE = 45, 77 XML_SCHEMAS_ANYSIMPLETYPE = 46 78 } xmlSchemaValType; 79 80 /* 81 * XML Schemas defines multiple type of types. 82 */ 83 typedef enum { 84 XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */ 85 XML_SCHEMA_TYPE_ANY, 86 XML_SCHEMA_TYPE_FACET, 87 XML_SCHEMA_TYPE_SIMPLE, 88 XML_SCHEMA_TYPE_COMPLEX, 89 XML_SCHEMA_TYPE_SEQUENCE = 6, 90 XML_SCHEMA_TYPE_CHOICE, 91 XML_SCHEMA_TYPE_ALL, 92 XML_SCHEMA_TYPE_SIMPLE_CONTENT, 93 XML_SCHEMA_TYPE_COMPLEX_CONTENT, 94 XML_SCHEMA_TYPE_UR, 95 XML_SCHEMA_TYPE_RESTRICTION, 96 XML_SCHEMA_TYPE_EXTENSION, 97 XML_SCHEMA_TYPE_ELEMENT, 98 XML_SCHEMA_TYPE_ATTRIBUTE, 99 XML_SCHEMA_TYPE_ATTRIBUTEGROUP, 100 XML_SCHEMA_TYPE_GROUP, 101 XML_SCHEMA_TYPE_NOTATION, 102 XML_SCHEMA_TYPE_LIST, 103 XML_SCHEMA_TYPE_UNION, 104 XML_SCHEMA_TYPE_ANY_ATTRIBUTE, 105 XML_SCHEMA_TYPE_IDC_UNIQUE, 106 XML_SCHEMA_TYPE_IDC_KEY, 107 XML_SCHEMA_TYPE_IDC_KEYREF, 108 XML_SCHEMA_TYPE_PARTICLE = 25, 109 XML_SCHEMA_TYPE_ATTRIBUTE_USE, 110 XML_SCHEMA_FACET_MININCLUSIVE = 1000, 111 XML_SCHEMA_FACET_MINEXCLUSIVE, 112 XML_SCHEMA_FACET_MAXINCLUSIVE, 113 XML_SCHEMA_FACET_MAXEXCLUSIVE, 114 XML_SCHEMA_FACET_TOTALDIGITS, 115 XML_SCHEMA_FACET_FRACTIONDIGITS, 116 XML_SCHEMA_FACET_PATTERN, 117 XML_SCHEMA_FACET_ENUMERATION, 118 XML_SCHEMA_FACET_WHITESPACE, 119 XML_SCHEMA_FACET_LENGTH, 120 XML_SCHEMA_FACET_MAXLENGTH, 121 XML_SCHEMA_FACET_MINLENGTH, 122 XML_SCHEMA_EXTRA_QNAMEREF = 2000, 123 XML_SCHEMA_EXTRA_ATTR_USE_PROHIB 124 } xmlSchemaTypeType; 125 126 typedef enum { 127 XML_SCHEMA_CONTENT_UNKNOWN = 0, 128 XML_SCHEMA_CONTENT_EMPTY = 1, 129 XML_SCHEMA_CONTENT_ELEMENTS, 130 XML_SCHEMA_CONTENT_MIXED, 131 XML_SCHEMA_CONTENT_SIMPLE, 132 XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, /* Obsolete */ 133 XML_SCHEMA_CONTENT_BASIC, 134 XML_SCHEMA_CONTENT_ANY 135 } xmlSchemaContentType; 136 137 typedef struct _xmlSchemaVal xmlSchemaVal; 138 typedef xmlSchemaVal *xmlSchemaValPtr; 139 140 typedef struct _xmlSchemaType xmlSchemaType; 141 typedef xmlSchemaType *xmlSchemaTypePtr; 142 143 typedef struct _xmlSchemaFacet xmlSchemaFacet; 144 typedef xmlSchemaFacet *xmlSchemaFacetPtr; 145 146 /** 147 * Annotation 148 */ 149 typedef struct _xmlSchemaAnnot xmlSchemaAnnot; 150 typedef xmlSchemaAnnot *xmlSchemaAnnotPtr; 151 struct _xmlSchemaAnnot { 152 struct _xmlSchemaAnnot *next; 153 xmlNodePtr content; /* the annotation */ 154 }; 155 156 /** 157 * XML_SCHEMAS_ANYATTR_SKIP: 158 * 159 * Skip unknown attribute from validation 160 * Obsolete, not used anymore. 161 */ 162 #define XML_SCHEMAS_ANYATTR_SKIP 1 163 /** 164 * XML_SCHEMAS_ANYATTR_LAX: 165 * 166 * Ignore validation non definition on attributes 167 * Obsolete, not used anymore. 168 */ 169 #define XML_SCHEMAS_ANYATTR_LAX 2 170 /** 171 * XML_SCHEMAS_ANYATTR_STRICT: 172 * 173 * Apply strict validation rules on attributes 174 * Obsolete, not used anymore. 175 */ 176 #define XML_SCHEMAS_ANYATTR_STRICT 3 177 /** 178 * XML_SCHEMAS_ANY_SKIP: 179 * 180 * Skip unknown attribute from validation 181 */ 182 #define XML_SCHEMAS_ANY_SKIP 1 183 /** 184 * XML_SCHEMAS_ANY_LAX: 185 * 186 * Used by wildcards. 187 * Validate if type found, don't worry if not found 188 */ 189 #define XML_SCHEMAS_ANY_LAX 2 190 /** 191 * XML_SCHEMAS_ANY_STRICT: 192 * 193 * Used by wildcards. 194 * Apply strict validation rules 195 */ 196 #define XML_SCHEMAS_ANY_STRICT 3 197 /** 198 * XML_SCHEMAS_ATTR_USE_PROHIBITED: 199 * 200 * Used by wildcards. 201 * The attribute is prohibited. 202 */ 203 #define XML_SCHEMAS_ATTR_USE_PROHIBITED 0 204 /** 205 * XML_SCHEMAS_ATTR_USE_REQUIRED: 206 * 207 * The attribute is required. 208 */ 209 #define XML_SCHEMAS_ATTR_USE_REQUIRED 1 210 /** 211 * XML_SCHEMAS_ATTR_USE_OPTIONAL: 212 * 213 * The attribute is optional. 214 */ 215 #define XML_SCHEMAS_ATTR_USE_OPTIONAL 2 216 /** 217 * XML_SCHEMAS_ATTR_GLOBAL: 218 * 219 * allow elements in no namespace 220 */ 221 #define XML_SCHEMAS_ATTR_GLOBAL 1 << 0 222 /** 223 * XML_SCHEMAS_ATTR_NSDEFAULT: 224 * 225 * allow elements in no namespace 226 */ 227 #define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7 228 /** 229 * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED: 230 * 231 * this is set when the "type" and "ref" references 232 * have been resolved. 233 */ 234 #define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8 235 /** 236 * XML_SCHEMAS_ATTR_FIXED: 237 * 238 * the attribute has a fixed value 239 */ 240 #define XML_SCHEMAS_ATTR_FIXED 1 << 9 241 242 /** 243 * xmlSchemaAttribute: 244 * An attribute definition. 245 */ 246 247 typedef struct _xmlSchemaAttribute xmlSchemaAttribute; 248 typedef xmlSchemaAttribute *xmlSchemaAttributePtr; 249 struct _xmlSchemaAttribute { 250 xmlSchemaTypeType type; 251 struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */ 252 const xmlChar *name; /* the name of the declaration */ 253 const xmlChar *id; /* Deprecated; not used */ 254 const xmlChar *ref; /* Deprecated; not used */ 255 const xmlChar *refNs; /* Deprecated; not used */ 256 const xmlChar *typeName; /* the local name of the type definition */ 257 const xmlChar *typeNs; /* the ns URI of the type definition */ 258 xmlSchemaAnnotPtr annot; 259 260 xmlSchemaTypePtr base; /* Deprecated; not used */ 261 int occurs; /* Deprecated; not used */ 262 const xmlChar *defValue; /* The initial value of the value constraint */ 263 xmlSchemaTypePtr subtypes; /* the type definition */ 264 xmlNodePtr node; 265 const xmlChar *targetNamespace; 266 int flags; 267 const xmlChar *refPrefix; /* Deprecated; not used */ 268 xmlSchemaValPtr defVal; /* The compiled value constraint */ 269 xmlSchemaAttributePtr refDecl; /* Deprecated; not used */ 270 }; 271 272 /** 273 * xmlSchemaAttributeLink: 274 * Used to build a list of attribute uses on complexType definitions. 275 * WARNING: Deprecated; not used. 276 */ 277 typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink; 278 typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr; 279 struct _xmlSchemaAttributeLink { 280 struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */ 281 struct _xmlSchemaAttribute *attr;/* the linked attribute */ 282 }; 283 284 /** 285 * XML_SCHEMAS_WILDCARD_COMPLETE: 286 * 287 * If the wildcard is complete. 288 */ 289 #define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0 290 291 /** 292 * xmlSchemaCharValueLink: 293 * Used to build a list of namespaces on wildcards. 294 */ 295 typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs; 296 typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr; 297 struct _xmlSchemaWildcardNs { 298 struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */ 299 const xmlChar *value;/* the value */ 300 }; 301 302 /** 303 * xmlSchemaWildcard. 304 * A wildcard. 305 */ 306 typedef struct _xmlSchemaWildcard xmlSchemaWildcard; 307 typedef xmlSchemaWildcard *xmlSchemaWildcardPtr; 308 struct _xmlSchemaWildcard { 309 xmlSchemaTypeType type; /* The kind of type */ 310 const xmlChar *id; /* Deprecated; not used */ 311 xmlSchemaAnnotPtr annot; 312 xmlNodePtr node; 313 int minOccurs; /* Deprecated; not used */ 314 int maxOccurs; /* Deprecated; not used */ 315 int processContents; 316 int any; /* Indicates if the ns constraint is of ##any */ 317 xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */ 318 xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */ 319 int flags; 320 }; 321 322 /** 323 * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED: 324 * 325 * The attribute wildcard has been built. 326 */ 327 #define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0 328 /** 329 * XML_SCHEMAS_ATTRGROUP_GLOBAL: 330 * 331 * The attribute group has been defined. 332 */ 333 #define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1 334 /** 335 * XML_SCHEMAS_ATTRGROUP_MARKED: 336 * 337 * Marks the attr group as marked; used for circular checks. 338 */ 339 #define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2 340 341 /** 342 * XML_SCHEMAS_ATTRGROUP_REDEFINED: 343 * 344 * The attr group was redefined. 345 */ 346 #define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3 347 /** 348 * XML_SCHEMAS_ATTRGROUP_HAS_REFS: 349 * 350 * Whether this attr. group contains attr. group references. 351 */ 352 #define XML_SCHEMAS_ATTRGROUP_HAS_REFS 1 << 4 353 354 /** 355 * An attribute group definition. 356 * 357 * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures 358 * must be kept similar 359 */ 360 typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup; 361 typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr; 362 struct _xmlSchemaAttributeGroup { 363 xmlSchemaTypeType type; /* The kind of type */ 364 struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */ 365 const xmlChar *name; 366 const xmlChar *id; 367 const xmlChar *ref; /* Deprecated; not used */ 368 const xmlChar *refNs; /* Deprecated; not used */ 369 xmlSchemaAnnotPtr annot; 370 371 xmlSchemaAttributePtr attributes; /* Deprecated; not used */ 372 xmlNodePtr node; 373 int flags; 374 xmlSchemaWildcardPtr attributeWildcard; 375 const xmlChar *refPrefix; /* Deprecated; not used */ 376 xmlSchemaAttributeGroupPtr refItem; /* Deprecated; not used */ 377 const xmlChar *targetNamespace; 378 void *attrUses; 379 }; 380 381 /** 382 * xmlSchemaTypeLink: 383 * Used to build a list of types (e.g. member types of 384 * simpleType with variety "union"). 385 */ 386 typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink; 387 typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr; 388 struct _xmlSchemaTypeLink { 389 struct _xmlSchemaTypeLink *next;/* the next type link ... */ 390 xmlSchemaTypePtr type;/* the linked type */ 391 }; 392 393 /** 394 * xmlSchemaFacetLink: 395 * Used to build a list of facets. 396 */ 397 typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink; 398 typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr; 399 struct _xmlSchemaFacetLink { 400 struct _xmlSchemaFacetLink *next;/* the next facet link ... */ 401 xmlSchemaFacetPtr facet;/* the linked facet */ 402 }; 403 404 /** 405 * XML_SCHEMAS_TYPE_MIXED: 406 * 407 * the element content type is mixed 408 */ 409 #define XML_SCHEMAS_TYPE_MIXED 1 << 0 410 /** 411 * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION: 412 * 413 * the simple or complex type has a derivation method of "extension". 414 */ 415 #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION 1 << 1 416 /** 417 * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION: 418 * 419 * the simple or complex type has a derivation method of "restriction". 420 */ 421 #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION 1 << 2 422 /** 423 * XML_SCHEMAS_TYPE_GLOBAL: 424 * 425 * the type is global 426 */ 427 #define XML_SCHEMAS_TYPE_GLOBAL 1 << 3 428 /** 429 * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD: 430 * 431 * the complexType owns an attribute wildcard, i.e. 432 * it can be freed by the complexType 433 */ 434 #define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD 1 << 4 /* Obsolete. */ 435 /** 436 * XML_SCHEMAS_TYPE_VARIETY_ABSENT: 437 * 438 * the simpleType has a variety of "absent". 439 * TODO: Actually not necessary :-/, since if 440 * none of the variety flags occur then it's 441 * automatically absent. 442 */ 443 #define XML_SCHEMAS_TYPE_VARIETY_ABSENT 1 << 5 444 /** 445 * XML_SCHEMAS_TYPE_VARIETY_LIST: 446 * 447 * the simpleType has a variety of "list". 448 */ 449 #define XML_SCHEMAS_TYPE_VARIETY_LIST 1 << 6 450 /** 451 * XML_SCHEMAS_TYPE_VARIETY_UNION: 452 * 453 * the simpleType has a variety of "union". 454 */ 455 #define XML_SCHEMAS_TYPE_VARIETY_UNION 1 << 7 456 /** 457 * XML_SCHEMAS_TYPE_VARIETY_ATOMIC: 458 * 459 * the simpleType has a variety of "union". 460 */ 461 #define XML_SCHEMAS_TYPE_VARIETY_ATOMIC 1 << 8 462 /** 463 * XML_SCHEMAS_TYPE_FINAL_EXTENSION: 464 * 465 * the complexType has a final of "extension". 466 */ 467 #define XML_SCHEMAS_TYPE_FINAL_EXTENSION 1 << 9 468 /** 469 * XML_SCHEMAS_TYPE_FINAL_RESTRICTION: 470 * 471 * the simpleType/complexType has a final of "restriction". 472 */ 473 #define XML_SCHEMAS_TYPE_FINAL_RESTRICTION 1 << 10 474 /** 475 * XML_SCHEMAS_TYPE_FINAL_LIST: 476 * 477 * the simpleType has a final of "list". 478 */ 479 #define XML_SCHEMAS_TYPE_FINAL_LIST 1 << 11 480 /** 481 * XML_SCHEMAS_TYPE_FINAL_UNION: 482 * 483 * the simpleType has a final of "union". 484 */ 485 #define XML_SCHEMAS_TYPE_FINAL_UNION 1 << 12 486 /** 487 * XML_SCHEMAS_TYPE_FINAL_DEFAULT: 488 * 489 * the simpleType has a final of "default". 490 */ 491 #define XML_SCHEMAS_TYPE_FINAL_DEFAULT 1 << 13 492 /** 493 * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE: 494 * 495 * Marks the item as a builtin primitive. 496 */ 497 #define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE 1 << 14 498 /** 499 * XML_SCHEMAS_TYPE_MARKED: 500 * 501 * Marks the item as marked; used for circular checks. 502 */ 503 #define XML_SCHEMAS_TYPE_MARKED 1 << 16 504 /** 505 * XML_SCHEMAS_TYPE_BLOCK_DEFAULT: 506 * 507 * the complexType did not specify 'block' so use the default of the 508 * <schema> item. 509 */ 510 #define XML_SCHEMAS_TYPE_BLOCK_DEFAULT 1 << 17 511 /** 512 * XML_SCHEMAS_TYPE_BLOCK_EXTENSION: 513 * 514 * the complexType has a 'block' of "extension". 515 */ 516 #define XML_SCHEMAS_TYPE_BLOCK_EXTENSION 1 << 18 517 /** 518 * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION: 519 * 520 * the complexType has a 'block' of "restriction". 521 */ 522 #define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION 1 << 19 523 /** 524 * XML_SCHEMAS_TYPE_ABSTRACT: 525 * 526 * the simple/complexType is abstract. 527 */ 528 #define XML_SCHEMAS_TYPE_ABSTRACT 1 << 20 529 /** 530 * XML_SCHEMAS_TYPE_FACETSNEEDVALUE: 531 * 532 * indicates if the facets need a computed value 533 */ 534 #define XML_SCHEMAS_TYPE_FACETSNEEDVALUE 1 << 21 535 /** 536 * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED: 537 * 538 * indicates that the type was typefixed 539 */ 540 #define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED 1 << 22 541 /** 542 * XML_SCHEMAS_TYPE_INTERNAL_INVALID: 543 * 544 * indicates that the type is invalid 545 */ 546 #define XML_SCHEMAS_TYPE_INTERNAL_INVALID 1 << 23 547 /** 548 * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE: 549 * 550 * a whitespace-facet value of "preserve" 551 */ 552 #define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE 1 << 24 553 /** 554 * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE: 555 * 556 * a whitespace-facet value of "replace" 557 */ 558 #define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE 1 << 25 559 /** 560 * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE: 561 * 562 * a whitespace-facet value of "collapse" 563 */ 564 #define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE 1 << 26 565 /** 566 * XML_SCHEMAS_TYPE_HAS_FACETS: 567 * 568 * has facets 569 */ 570 #define XML_SCHEMAS_TYPE_HAS_FACETS 1 << 27 571 /** 572 * XML_SCHEMAS_TYPE_NORMVALUENEEDED: 573 * 574 * indicates if the facets (pattern) need a normalized value 575 */ 576 #define XML_SCHEMAS_TYPE_NORMVALUENEEDED 1 << 28 577 578 /** 579 * XML_SCHEMAS_TYPE_FIXUP_1: 580 * 581 * First stage of fixup was done. 582 */ 583 #define XML_SCHEMAS_TYPE_FIXUP_1 1 << 29 584 585 /** 586 * XML_SCHEMAS_TYPE_REDEFINED: 587 * 588 * The type was redefined. 589 */ 590 #define XML_SCHEMAS_TYPE_REDEFINED 1 << 30 591 /** 592 * XML_SCHEMAS_TYPE_REDEFINING: 593 * 594 * The type redefines an other type. 595 */ 596 /* #define XML_SCHEMAS_TYPE_REDEFINING 1 << 31 */ 597 598 /** 599 * _xmlSchemaType: 600 * 601 * Schemas type definition. 602 */ 603 struct _xmlSchemaType { 604 xmlSchemaTypeType type; /* The kind of type */ 605 struct _xmlSchemaType *next; /* the next type if in a sequence ... */ 606 const xmlChar *name; 607 const xmlChar *id ; /* Deprecated; not used */ 608 const xmlChar *ref; /* Deprecated; not used */ 609 const xmlChar *refNs; /* Deprecated; not used */ 610 xmlSchemaAnnotPtr annot; 611 xmlSchemaTypePtr subtypes; 612 xmlSchemaAttributePtr attributes; /* Deprecated; not used */ 613 xmlNodePtr node; 614 int minOccurs; /* Deprecated; not used */ 615 int maxOccurs; /* Deprecated; not used */ 616 617 int flags; 618 xmlSchemaContentType contentType; 619 const xmlChar *base; /* Base type's local name */ 620 const xmlChar *baseNs; /* Base type's target namespace */ 621 xmlSchemaTypePtr baseType; /* The base type component */ 622 xmlSchemaFacetPtr facets; /* Local facets */ 623 struct _xmlSchemaType *redef; /* Deprecated; not used */ 624 int recurse; /* Obsolete */ 625 xmlSchemaAttributeLinkPtr *attributeUses; /* Deprecated; not used */ 626 xmlSchemaWildcardPtr attributeWildcard; 627 int builtInType; /* Type of built-in types. */ 628 xmlSchemaTypeLinkPtr memberTypes; /* member-types if a union type. */ 629 xmlSchemaFacetLinkPtr facetSet; /* All facets (incl. inherited) */ 630 const xmlChar *refPrefix; /* Deprecated; not used */ 631 xmlSchemaTypePtr contentTypeDef; /* Used for the simple content of complex types. 632 Could we use @subtypes for this? */ 633 xmlRegexpPtr contModel; /* Holds the automaton of the content model */ 634 const xmlChar *targetNamespace; 635 void *attrUses; 636 }; 637 638 /* 639 * xmlSchemaElement: 640 * An element definition. 641 * 642 * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of 643 * structures must be kept similar 644 */ 645 /** 646 * XML_SCHEMAS_ELEM_NILLABLE: 647 * 648 * the element is nillable 649 */ 650 #define XML_SCHEMAS_ELEM_NILLABLE 1 << 0 651 /** 652 * XML_SCHEMAS_ELEM_GLOBAL: 653 * 654 * the element is global 655 */ 656 #define XML_SCHEMAS_ELEM_GLOBAL 1 << 1 657 /** 658 * XML_SCHEMAS_ELEM_DEFAULT: 659 * 660 * the element has a default value 661 */ 662 #define XML_SCHEMAS_ELEM_DEFAULT 1 << 2 663 /** 664 * XML_SCHEMAS_ELEM_FIXED: 665 * 666 * the element has a fixed value 667 */ 668 #define XML_SCHEMAS_ELEM_FIXED 1 << 3 669 /** 670 * XML_SCHEMAS_ELEM_ABSTRACT: 671 * 672 * the element is abstract 673 */ 674 #define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4 675 /** 676 * XML_SCHEMAS_ELEM_TOPLEVEL: 677 * 678 * the element is top level 679 * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead 680 */ 681 #define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5 682 /** 683 * XML_SCHEMAS_ELEM_REF: 684 * 685 * the element is a reference to a type 686 */ 687 #define XML_SCHEMAS_ELEM_REF 1 << 6 688 /** 689 * XML_SCHEMAS_ELEM_NSDEFAULT: 690 * 691 * allow elements in no namespace 692 * Obsolete, not used anymore. 693 */ 694 #define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7 695 /** 696 * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED: 697 * 698 * this is set when "type", "ref", "substitutionGroup" 699 * references have been resolved. 700 */ 701 #define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED 1 << 8 702 /** 703 * XML_SCHEMAS_ELEM_CIRCULAR: 704 * 705 * a helper flag for the search of circular references. 706 */ 707 #define XML_SCHEMAS_ELEM_CIRCULAR 1 << 9 708 /** 709 * XML_SCHEMAS_ELEM_BLOCK_ABSENT: 710 * 711 * the "block" attribute is absent 712 */ 713 #define XML_SCHEMAS_ELEM_BLOCK_ABSENT 1 << 10 714 /** 715 * XML_SCHEMAS_ELEM_BLOCK_EXTENSION: 716 * 717 * disallowed substitutions are absent 718 */ 719 #define XML_SCHEMAS_ELEM_BLOCK_EXTENSION 1 << 11 720 /** 721 * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION: 722 * 723 * disallowed substitutions: "restriction" 724 */ 725 #define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION 1 << 12 726 /** 727 * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION: 728 * 729 * disallowed substitutions: "substitution" 730 */ 731 #define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION 1 << 13 732 /** 733 * XML_SCHEMAS_ELEM_FINAL_ABSENT: 734 * 735 * substitution group exclusions are absent 736 */ 737 #define XML_SCHEMAS_ELEM_FINAL_ABSENT 1 << 14 738 /** 739 * XML_SCHEMAS_ELEM_FINAL_EXTENSION: 740 * 741 * substitution group exclusions: "extension" 742 */ 743 #define XML_SCHEMAS_ELEM_FINAL_EXTENSION 1 << 15 744 /** 745 * XML_SCHEMAS_ELEM_FINAL_RESTRICTION: 746 * 747 * substitution group exclusions: "restriction" 748 */ 749 #define XML_SCHEMAS_ELEM_FINAL_RESTRICTION 1 << 16 750 /** 751 * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD: 752 * 753 * the declaration is a substitution group head 754 */ 755 #define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD 1 << 17 756 /** 757 * XML_SCHEMAS_ELEM_INTERNAL_CHECKED: 758 * 759 * this is set when the elem decl has been checked against 760 * all constraints 761 */ 762 #define XML_SCHEMAS_ELEM_INTERNAL_CHECKED 1 << 18 763 764 typedef struct _xmlSchemaElement xmlSchemaElement; 765 typedef xmlSchemaElement *xmlSchemaElementPtr; 766 struct _xmlSchemaElement { 767 xmlSchemaTypeType type; /* The kind of type */ 768 struct _xmlSchemaType *next; /* Not used? */ 769 const xmlChar *name; 770 const xmlChar *id; /* Deprecated; not used */ 771 const xmlChar *ref; /* Deprecated; not used */ 772 const xmlChar *refNs; /* Deprecated; not used */ 773 xmlSchemaAnnotPtr annot; 774 xmlSchemaTypePtr subtypes; /* the type definition */ 775 xmlSchemaAttributePtr attributes; 776 xmlNodePtr node; 777 int minOccurs; /* Deprecated; not used */ 778 int maxOccurs; /* Deprecated; not used */ 779 780 int flags; 781 const xmlChar *targetNamespace; 782 const xmlChar *namedType; 783 const xmlChar *namedTypeNs; 784 const xmlChar *substGroup; 785 const xmlChar *substGroupNs; 786 const xmlChar *scope; 787 const xmlChar *value; /* The original value of the value constraint. */ 788 struct _xmlSchemaElement *refDecl; /* This will now be used for the 789 substitution group affiliation */ 790 xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */ 791 xmlSchemaContentType contentType; 792 const xmlChar *refPrefix; /* Deprecated; not used */ 793 xmlSchemaValPtr defVal; /* The compiled value constraint. */ 794 void *idcs; /* The identity-constraint defs */ 795 }; 796 797 /* 798 * XML_SCHEMAS_FACET_UNKNOWN: 799 * 800 * unknown facet handling 801 */ 802 #define XML_SCHEMAS_FACET_UNKNOWN 0 803 /* 804 * XML_SCHEMAS_FACET_PRESERVE: 805 * 806 * preserve the type of the facet 807 */ 808 #define XML_SCHEMAS_FACET_PRESERVE 1 809 /* 810 * XML_SCHEMAS_FACET_REPLACE: 811 * 812 * replace the type of the facet 813 */ 814 #define XML_SCHEMAS_FACET_REPLACE 2 815 /* 816 * XML_SCHEMAS_FACET_COLLAPSE: 817 * 818 * collapse the types of the facet 819 */ 820 #define XML_SCHEMAS_FACET_COLLAPSE 3 821 /** 822 * A facet definition. 823 */ 824 struct _xmlSchemaFacet { 825 xmlSchemaTypeType type; /* The kind of type */ 826 struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */ 827 const xmlChar *value; /* The original value */ 828 const xmlChar *id; /* Obsolete */ 829 xmlSchemaAnnotPtr annot; 830 xmlNodePtr node; 831 int fixed; /* XML_SCHEMAS_FACET_PRESERVE, etc. */ 832 int whitespace; 833 xmlSchemaValPtr val; /* The compiled value */ 834 xmlRegexpPtr regexp; /* The regex for patterns */ 835 }; 836 837 /** 838 * A notation definition. 839 */ 840 typedef struct _xmlSchemaNotation xmlSchemaNotation; 841 typedef xmlSchemaNotation *xmlSchemaNotationPtr; 842 struct _xmlSchemaNotation { 843 xmlSchemaTypeType type; /* The kind of type */ 844 const xmlChar *name; 845 xmlSchemaAnnotPtr annot; 846 const xmlChar *identifier; 847 const xmlChar *targetNamespace; 848 }; 849 850 /* 851 * TODO: Actually all those flags used for the schema should sit 852 * on the schema parser context, since they are used only 853 * during parsing an XML schema document, and not available 854 * on the component level as per spec. 855 */ 856 /** 857 * XML_SCHEMAS_QUALIF_ELEM: 858 * 859 * Reflects elementFormDefault == qualified in 860 * an XML schema document. 861 */ 862 #define XML_SCHEMAS_QUALIF_ELEM 1 << 0 863 /** 864 * XML_SCHEMAS_QUALIF_ATTR: 865 * 866 * Reflects attributeFormDefault == qualified in 867 * an XML schema document. 868 */ 869 #define XML_SCHEMAS_QUALIF_ATTR 1 << 1 870 /** 871 * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION: 872 * 873 * the schema has "extension" in the set of finalDefault. 874 */ 875 #define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION 1 << 2 876 /** 877 * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION: 878 * 879 * the schema has "restriction" in the set of finalDefault. 880 */ 881 #define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION 1 << 3 882 /** 883 * XML_SCHEMAS_FINAL_DEFAULT_LIST: 884 * 885 * the schema has "list" in the set of finalDefault. 886 */ 887 #define XML_SCHEMAS_FINAL_DEFAULT_LIST 1 << 4 888 /** 889 * XML_SCHEMAS_FINAL_DEFAULT_UNION: 890 * 891 * the schema has "union" in the set of finalDefault. 892 */ 893 #define XML_SCHEMAS_FINAL_DEFAULT_UNION 1 << 5 894 /** 895 * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION: 896 * 897 * the schema has "extension" in the set of blockDefault. 898 */ 899 #define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION 1 << 6 900 /** 901 * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION: 902 * 903 * the schema has "restriction" in the set of blockDefault. 904 */ 905 #define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION 1 << 7 906 /** 907 * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION: 908 * 909 * the schema has "substitution" in the set of blockDefault. 910 */ 911 #define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION 1 << 8 912 /** 913 * XML_SCHEMAS_INCLUDING_CONVERT_NS: 914 * 915 * the schema is currently including an other schema with 916 * no target namespace. 917 */ 918 #define XML_SCHEMAS_INCLUDING_CONVERT_NS 1 << 9 919 /** 920 * _xmlSchema: 921 * 922 * A Schemas definition 923 */ 924 struct _xmlSchema { 925 const xmlChar *name; /* schema name */ 926 const xmlChar *targetNamespace; /* the target namespace */ 927 const xmlChar *version; 928 const xmlChar *id; /* Obsolete */ 929 xmlDocPtr doc; 930 xmlSchemaAnnotPtr annot; 931 int flags; 932 933 xmlHashTablePtr typeDecl; 934 xmlHashTablePtr attrDecl; 935 xmlHashTablePtr attrgrpDecl; 936 xmlHashTablePtr elemDecl; 937 xmlHashTablePtr notaDecl; 938 939 xmlHashTablePtr schemasImports; 940 941 void *_private; /* unused by the library for users or bindings */ 942 xmlHashTablePtr groupDecl; 943 xmlDictPtr dict; 944 void *includes; /* the includes, this is opaque for now */ 945 int preserve; /* whether to free the document */ 946 int counter; /* used to give anonymous components unique names */ 947 xmlHashTablePtr idcDef; /* All identity-constraint defs. */ 948 void *volatiles; /* Obsolete */ 949 }; 950 951 XMLPUBFUN void xmlSchemaFreeType (xmlSchemaTypePtr type); 952 XMLPUBFUN void xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard); 953 954 #ifdef __cplusplus 955 } 956 #endif 957 958 #endif /* LIBXML_SCHEMAS_ENABLED */ 959 #endif /* __XML_SCHEMA_INTERNALS_H__ */ 960