schemasInternals.h revision c85d0fec52dff78cdbf09d9ba26e00986d7e1e0e
14255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/* 2be5869729a416032a4abb5a65430d25831828f75Daniel Veillard * Summary: internal interfaces for XML Schemas 3be5869729a416032a4abb5a65430d25831828f75Daniel Veillard * Description: internal interfaces for the XML Schemas handling 4be5869729a416032a4abb5a65430d25831828f75Daniel Veillard * and schema validity checking 54255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * 6be5869729a416032a4abb5a65430d25831828f75Daniel Veillard * Copy: See Copyright for the status of this software. 74255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * 8be5869729a416032a4abb5a65430d25831828f75Daniel Veillard * Author: Daniel Veillard 94255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 104255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 114255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 124255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifndef __XML_SCHEMA_INTERNALS_H__ 134255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define __XML_SCHEMA_INTERNALS_H__ 144255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 154255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#include <libxml/xmlversion.h> 167ae91bcd9e94946a7be41290cb67ffc9c2cf0a9fIgor Zlatkovic 174255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifdef LIBXML_SCHEMAS_ENABLED 184255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 194255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#include <libxml/xmlregexp.h> 208326e73bc163e15fd7b5264c0cc6cf2480723869Daniel Veillard#include <libxml/hash.h> 21be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard#include <libxml/dict.h> 224255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 234255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifdef __cplusplus 244255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardextern "C" { 254255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif 264255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 274255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 284255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/* 294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * XML Schemas defines multiple type of types. 304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef enum { 324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_BASIC = 1, 334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_ANY, 344255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_FACET, 354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_SIMPLE, 364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_COMPLEX, 374255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_SEQUENCE, 384255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_CHOICE, 394255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_ALL, 404255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_SIMPLE_CONTENT, 414255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_COMPLEX_CONTENT, 424255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_UR, 434255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_RESTRICTION, 444255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_EXTENSION, 454255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_ELEMENT, 464255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_ATTRIBUTE, 4713e04c6c12007d30ae7e007e931e55e717a5a73fDaniel Veillard XML_SCHEMA_TYPE_ATTRIBUTEGROUP, 484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_GROUP, 494255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_NOTATION, 504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_LIST, 514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_TYPE_UNION, 524255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_MININCLUSIVE = 1000, 534255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_MINEXCLUSIVE, 544255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_MAXINCLUSIVE, 554255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_MAXEXCLUSIVE, 564255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_TOTALDIGITS, 574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_FRACTIONDIGITS, 584255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_PATTERN, 594255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_ENUMERATION, 604255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_WHITESPACE, 614255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_LENGTH, 624255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_MAXLENGTH, 634255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_FACET_MINLENGTH 644255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard} xmlSchemaTypeType; 654255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 664255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef enum { 674255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_CONTENT_UNKNOWN = 0, 684255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_CONTENT_EMPTY = 1, 694255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_CONTENT_ELEMENTS, 704255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_CONTENT_MIXED, 714255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_CONTENT_SIMPLE, 724255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, 7388c5891a25c1151a89f021e915d9efb7e58bfbf7Daniel Veillard XML_SCHEMA_CONTENT_BASIC, 7488c5891a25c1151a89f021e915d9efb7e58bfbf7Daniel Veillard XML_SCHEMA_CONTENT_ANY 754255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard} xmlSchemaContentType; 764255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 774255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaVal xmlSchemaVal; 784255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaVal *xmlSchemaValPtr; 794255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 804255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaType xmlSchemaType; 814255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaType *xmlSchemaTypePtr; 824255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 834255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaFacet xmlSchemaFacet; 844255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaFacet *xmlSchemaFacetPtr; 854255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 864255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/** 874255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * Annotation 884255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 894255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaAnnot xmlSchemaAnnot; 904255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaAnnot *xmlSchemaAnnotPtr; 914255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaAnnot { 924255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard struct _xmlSchemaAnnot *next; 934255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlNodePtr content; /* the annotation */ 944255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}; 954255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 964255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/** 971e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * XML_SCHEMAS_ANYATTR_SKIP: 981e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * 991e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * Skip unknown attribute from validation 1004255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 1014255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ANYATTR_SKIP 1 1021e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard/** 1031e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * XML_SCHEMAS_ANYATTR_LAX: 1041e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * 1051e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * Ignore validation non definition on attributes 1061e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard */ 1074255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ANYATTR_LAX 2 1081e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard/** 1091e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * XML_SCHEMAS_ANYATTR_STRICT: 1101e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * 1111e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * Apply strict validation rules on attributes 1121e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard */ 1134255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ANYATTR_STRICT 3 1144255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 115be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard/** 116c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard * XML_SCHEMAS_ATTR_USE_PROHIBITED: 117c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard * 118c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard * The attribute is prohibited. 119c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard */ 120c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard#define XML_SCHEMAS_ATTR_USE_PROHIBITED 0 121c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard 122c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard/** 123c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard * XML_SCHEMAS_ATTR_USE_REQUIRED: 124c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard * 125c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard * The attribute is required. 126c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard */ 127c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard#define XML_SCHEMAS_ATTR_USE_REQUIRED 1 128c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard 129c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard/** 130c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard * XML_SCHEMAS_ATTR_USE_OPTIONAL: 131c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard * 132c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard * The attribute is optional. 133c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard */ 134c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard#define XML_SCHEMAS_ATTR_USE_OPTIONAL 2 135c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard 136c85d0fec52dff78cdbf09d9ba26e00986d7e1e0eDaniel Veillard/** 137be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard * XML_SCHEMAS_ATTR_NSDEFAULT: 138be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard * 139be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard * allow elements in no namespace 140be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard */ 141be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard#define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7 142be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard 1431e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard/** 1441e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * xmlSchemaAttribute: 1451e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * An attribute definition. 1461e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard */ 1471e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard 1484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaAttribute xmlSchemaAttribute; 1494255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaAttribute *xmlSchemaAttributePtr; 1504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaAttribute { 1514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypeType type; /* The kind of type */ 1524255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */ 153be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *name; 154be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *id; 155be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *ref; 156be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *refNs; 157be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *typeName; 158be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *typeNs; 1594255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAnnotPtr annot; 1604255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 1614255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypePtr base; 1624255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int occurs; 163be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *defValue; 1644255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypePtr subtypes; 16575bb3bbf25e5ddaf5e013978c3b001de02c959aaDaniel Veillard xmlNodePtr node; 166be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *targetNamespace; 167be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard int flags; 1684255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}; 1694255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 1704255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/** 1714255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * An attribute group definition. 1724255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * 1734255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures 1744255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * must be kept similar 1754255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 1764255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup; 1774255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr; 1784255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaAttributeGroup { 1794255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypeType type; /* The kind of type */ 1804255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */ 181be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *name; 182be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *id; 183be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *ref; 184be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *refNs; 1854255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAnnotPtr annot; 1864255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 1874255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAttributePtr attributes; 18875bb3bbf25e5ddaf5e013978c3b001de02c959aaDaniel Veillard xmlNodePtr node; 1894255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}; 1904255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 1914255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 1924255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/** 193a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_TYPE_MIXED: 194a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 195a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element content type is mixed 1964255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 1974255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_TYPE_MIXED 1 << 0 1984255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 199a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 200a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * _xmlSchemaType: 201a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 202a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * Schemas type definition. 203a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 2044255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaType { 2054255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypeType type; /* The kind of type */ 2064255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard struct _xmlSchemaType *next;/* the next type if in a sequence ... */ 207be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *name; 208be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *id; 209be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *ref; 210be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *refNs; 2114255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAnnotPtr annot; 2124255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypePtr subtypes; 2134255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAttributePtr attributes; 2144255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlNodePtr node; 2154255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int minOccurs; 2164255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int maxOccurs; 2174255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 2184255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int flags; 2194255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaContentType contentType; 220be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *base; 221be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *baseNs; 2224255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypePtr baseType; 2234255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaFacetPtr facets; 224b0f397e108eee45a309f2e5d4b523dd096d7ea32Daniel Veillard struct _xmlSchemaType *redef;/* possible redefinitions for the type */ 2254255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}; 2264255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 22760f394e96df5022a6145505bfbeb99815f65e7daWilliam M. Brack/* 228a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * xmlSchemaElement: 2294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * An element definition. 2304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * 2314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of 2324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * structures must be kept similar 2334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 234a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 235a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_NILLABLE: 236a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 237a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is nillable 238a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 2394255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_NILLABLE 1 << 0 240a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 241a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_GLOBAL: 242a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 243a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is global 244a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 2454255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_GLOBAL 1 << 1 246a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 247a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_DEFAULT: 248a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 249a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element has a default value 250a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 2514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_DEFAULT 1 << 2 252a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 253a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_FIXED: 254a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 255a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element has a fixed value 256a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 2574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_FIXED 1 << 3 258a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 259a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_ABSTRACT: 260a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 261a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is abstract 262a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 2634255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4 264a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 265a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_TOPLEVEL: 266a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 267a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is top level 268a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 2694255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5 270a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 271a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_REF: 272a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 273a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is a reference to a type 274a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 2754255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_REF 1 << 6 276be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard/** 277be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard * XML_SCHEMAS_ELEM_NSDEFAULT: 278be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard * 279be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard * allow elements in no namespace 280be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard */ 281be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard#define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7 2824255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 2834255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaElement xmlSchemaElement; 2844255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaElement *xmlSchemaElementPtr; 2854255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaElement { 2864255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypeType type; /* The kind of type */ 2874255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard struct _xmlSchemaType *next;/* the next type if in a sequence ... */ 288be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *name; 289be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *id; 290be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *ref; 291be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *refNs; 2924255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAnnotPtr annot; 2934255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypePtr subtypes; 2944255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAttributePtr attributes; 2954255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlNodePtr node; 2964255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int minOccurs; 2974255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int maxOccurs; 2984255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 2994255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int flags; 300be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *targetNamespace; 301be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *namedType; 302be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *namedTypeNs; 303be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *substGroup; 304be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *substGroupNs; 305be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *scope; 306be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *value; 3074255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard struct _xmlSchemaElement *refDecl; 3084255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlRegexpPtr contModel; 30988c5891a25c1151a89f021e915d9efb7e58bfbf7Daniel Veillard xmlSchemaContentType contentType; 3104255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}; 3114255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 312a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/* 313a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_UNKNOWN: 3144255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * 315a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * unknown facet handling 3164255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 3174255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_UNKNOWN 0 318a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/* 319a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_PRESERVE: 320a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 321a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * preserve the type of the facet 322a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 3234255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_PRESERVE 1 324a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/* 325a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_REPLACE: 326a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 327a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * replace the type of the facet 328a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 3294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_REPLACE 2 330a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/* 331a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_COLLAPSE: 332a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 333a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * collapse the types of the facet 334a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 3354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_COLLAPSE 3 3364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 337a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 338a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * A facet definition. 339a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 3404255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaFacet { 3414255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypeType type; /* The kind of type */ 3424255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */ 343be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *value; 344be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *id; 3454255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAnnotPtr annot; 3464255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlNodePtr node; 3474255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int fixed; 3484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int whitespace; 3494255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaValPtr val; 3504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlRegexpPtr regexp; 3514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}; 3524255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 3534255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/** 3544255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * A notation definition. 3554255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 3564255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaNotation xmlSchemaNotation; 3574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaNotation *xmlSchemaNotationPtr; 3584255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaNotation { 3594255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaTypeType type; /* The kind of type */ 360be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *name; 3614255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAnnotPtr annot; 362be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *identifier; 3634255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}; 3644255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 3654255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/** 366a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_QUALIF_ELEM: 367a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 368a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the shemas requires qualified elements 3694255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */ 3704255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_QUALIF_ELEM 1 << 0 371a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 372a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_QUALIF_ATTR: 373a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 374a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the shemas requires qualified attributes 375a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 3764255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_QUALIF_ATTR 1 << 1 377a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/** 378a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * _xmlSchema: 379a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * 380a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * A Schemas definition 381a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */ 3824255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchema { 383be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *name; /* schema name */ 384be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *targetNamespace; /* the target namespace */ 385be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *version; 386be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard const xmlChar *id; 3874255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlDocPtr doc; 3884255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlSchemaAnnotPtr annot; 3894255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard int flags; 3904255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 3914255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlHashTablePtr typeDecl; 3924255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlHashTablePtr attrDecl; 3934255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlHashTablePtr attrgrpDecl; 3944255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlHashTablePtr elemDecl; 3954255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard xmlHashTablePtr notaDecl; 39610b6da4aa5111bb420201d8286d22b1e9ce139c0Daniel Veillard 39710b6da4aa5111bb420201d8286d22b1e9ce139c0Daniel Veillard xmlHashTablePtr schemasImports; 3985f7f991ab7055c1a96aed0127cebfa22a180c181Daniel Veillard 3995f7f991ab7055c1a96aed0127cebfa22a180c181Daniel Veillard void *_private; /* unused by the library for users or bindings */ 400a84c0b30c411afe3b55e84ecce99ba0d42c39e3eDaniel Veillard xmlHashTablePtr groupDecl; 401be9c6320d4ed8d5622322014310555bb88b02a85Daniel Veillard xmlDictPtr dict; 402bd2904b9c3ff584222f4995226c3007c815eea61Daniel Veillard void *includes; /* the includes, this is opaque for now */ 403dda22c15d5447b4a2a7bd47d456bcc5bbcef2472Daniel Veillard int preserve; /* whether to free the document */ 4044255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}; 4054255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 40676874e4516a1d7b467d400604f8aef77be015727Igor ZlatkovicXMLPUBFUN void XMLCALL xmlSchemaFreeType (xmlSchemaTypePtr type); 4074255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 4084255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifdef __cplusplus 4094255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard} 4104255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif 4114255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 4124255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif /* LIBXML_SCHEMAS_ENABLED */ 4134255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif /* __XML_SCHEMA_INTERNALS_H__ */ 4144255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 4154255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard 416