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