schemasInternals.h revision be5869729a416032a4abb5a65430d25831828f75
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>
214255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
224255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifdef __cplusplus
234255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardextern "C" {
244255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif
254255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
264255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
274255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/*
284255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * XML Schemas defines multiple type of types.
294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef enum {
314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_BASIC = 1,
324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_ANY,
334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_FACET,
344255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_SIMPLE,
354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_COMPLEX,
364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_SEQUENCE,
374255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_CHOICE,
384255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_ALL,
394255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_SIMPLE_CONTENT,
404255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_COMPLEX_CONTENT,
414255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_UR,
424255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_RESTRICTION,
434255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_EXTENSION,
444255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_ELEMENT,
454255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_ATTRIBUTE,
4613e04c6c12007d30ae7e007e931e55e717a5a73fDaniel Veillard    XML_SCHEMA_TYPE_ATTRIBUTEGROUP,
474255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_GROUP,
484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_NOTATION,
494255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_LIST,
504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_UNION,
514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MININCLUSIVE = 1000,
524255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MINEXCLUSIVE,
534255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MAXINCLUSIVE,
544255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MAXEXCLUSIVE,
554255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_TOTALDIGITS,
564255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_FRACTIONDIGITS,
574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_PATTERN,
584255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_ENUMERATION,
594255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_WHITESPACE,
604255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_LENGTH,
614255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MAXLENGTH,
624255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MINLENGTH
634255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard} xmlSchemaTypeType;
644255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
654255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef enum {
664255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_UNKNOWN = 0,
674255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_EMPTY = 1,
684255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_ELEMENTS,
694255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_MIXED,
704255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_SIMPLE,
714255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS,
7288c5891a25c1151a89f021e915d9efb7e58bfbf7Daniel Veillard    XML_SCHEMA_CONTENT_BASIC,
7388c5891a25c1151a89f021e915d9efb7e58bfbf7Daniel Veillard    XML_SCHEMA_CONTENT_ANY
744255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard} xmlSchemaContentType;
754255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
764255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaVal xmlSchemaVal;
774255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaVal *xmlSchemaValPtr;
784255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
794255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaType xmlSchemaType;
804255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaType *xmlSchemaTypePtr;
814255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
824255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaFacet xmlSchemaFacet;
834255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaFacet *xmlSchemaFacetPtr;
844255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
854255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
864255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * Annotation
874255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
884255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaAnnot xmlSchemaAnnot;
894255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaAnnot *xmlSchemaAnnotPtr;
904255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaAnnot {
914255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaAnnot *next;
924255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlNodePtr content;         /* the annotation */
934255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
944255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
954255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
964255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * An attribute definition.
974255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
984255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
994255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ANYATTR_SKIP	1
1004255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ANYATTR_LAX		2
1014255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ANYATTR_STRICT	3
1024255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1034255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaAttribute xmlSchemaAttribute;
1044255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaAttribute *xmlSchemaAttributePtr;
1054255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaAttribute {
1064255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
1074255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
1084255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
1094255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
1104255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *ref;
1114255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *refNs;
1124255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *typeName;
1134255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *typeNs;
1144255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
1154255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1164255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr base;
1174255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int occurs;
1184255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *defValue;
1194255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr subtypes;
12075bb3bbf25e5ddaf5e013978c3b001de02c959aaDaniel Veillard    xmlNodePtr node;
1214255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
1224255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1234255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
1244255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * An attribute group definition.
1254255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard *
1264255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
1274255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * must be kept similar
1284255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
1294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;
1304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr;
1314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaAttributeGroup {
1324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
1334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
1344255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
1354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
1364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *ref;
1374255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *refNs;
1384255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
1394255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1404255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAttributePtr attributes;
14175bb3bbf25e5ddaf5e013978c3b001de02c959aaDaniel Veillard    xmlNodePtr node;
1424255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
1434255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1444255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1454255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
146a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_TYPE_MIXED:
147a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
148a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element content type is mixed
1494255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
1504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_TYPE_MIXED		1 << 0
1514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
152a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
153a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * _xmlSchemaType:
154a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
155a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * Schemas type definition.
156a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
1574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaType {
1584255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
1594255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaType *next;/* the next type if in a sequence ... */
1604255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
1614255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
1624255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *ref;
1634255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *refNs;
1644255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
1654255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr subtypes;
1664255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAttributePtr attributes;
1674255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlNodePtr node;
1684255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int minOccurs;
1694255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int maxOccurs;
1704255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1714255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int flags;
1724255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaContentType contentType;
1734255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *base;
1744255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *baseNs;
1754255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr baseType;
1764255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaFacetPtr facets;
1774255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
1784255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
17960f394e96df5022a6145505bfbeb99815f65e7daWilliam M. Brack/*
180a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * xmlSchemaElement:
1814255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * An element definition.
1824255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard *
1834255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
1844255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * structures must be kept similar
1854255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
186a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
187a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_NILLABLE:
188a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
189a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is nillable
190a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
1914255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_NILLABLE	1 << 0
192a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
193a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_GLOBAL:
194a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
195a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is global
196a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
1974255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_GLOBAL		1 << 1
198a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
199a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_DEFAULT:
200a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
201a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element has a default value
202a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2034255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_DEFAULT	1 << 2
204a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
205a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_FIXED:
206a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
207a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element has a fixed value
208a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2094255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_FIXED		1 << 3
210a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
211a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_ABSTRACT:
212a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
213a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is abstract
214a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2154255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_ABSTRACT	1 << 4
216a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
217a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_TOPLEVEL:
218a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
219a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is top level
220a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2214255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_TOPLEVEL	1 << 5
222a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
223a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_REF:
224a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
225a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is a reference to a type
226a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2274255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_REF		1 << 6
2284255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
2294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaElement xmlSchemaElement;
2304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaElement *xmlSchemaElementPtr;
2314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaElement {
2324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
2334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaType *next;/* the next type if in a sequence ... */
2344255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
2354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
2364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *ref;
2374255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *refNs;
2384255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
2394255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr subtypes;
2404255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAttributePtr attributes;
2414255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlNodePtr node;
2424255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int minOccurs;
2434255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int maxOccurs;
2444255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
2454255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int flags;
2464255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *targetNamespace;
2474255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *namedType;
2484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *namedTypeNs;
2494255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *substGroup;
2504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *substGroupNs;
2514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *scope;
2524255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *value;
2534255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaElement *refDecl;
2544255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlRegexpPtr contModel;
25588c5891a25c1151a89f021e915d9efb7e58bfbf7Daniel Veillard    xmlSchemaContentType contentType;
2564255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
2574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
258a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/*
259a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_UNKNOWN:
2604255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard *
261a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * unknown facet handling
2624255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
2634255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_UNKNOWN	0
264a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/*
265a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_PRESERVE:
266a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
267a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * preserve the type of the facet
268a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2694255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_PRESERVE	1
270a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/*
271a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_REPLACE:
272a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
273a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * replace the type of the facet
274a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2754255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_REPLACE	2
276a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/*
277a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_COLLAPSE:
278a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
279a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * collapse the types of the facet
280a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2814255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_COLLAPSE	3
2824255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
283a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
284a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * A facet definition.
285a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2864255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaFacet {
2874255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
2884255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */
2894255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *value;
2904255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
2914255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
2924255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlNodePtr node;
2934255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int fixed;
2944255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int whitespace;
2954255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaValPtr val;
2964255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlRegexpPtr    regexp;
2974255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
2984255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
2994255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
3004255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * A notation definition.
3014255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
3024255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaNotation xmlSchemaNotation;
3034255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaNotation *xmlSchemaNotationPtr;
3044255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaNotation {
3054255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
3064255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
3074255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
3084255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *identifier;
3094255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
3104255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3114255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
312a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_QUALIF_ELEM:
313a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
314a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the shemas requires qualified elements
3154255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
3164255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_QUALIF_ELEM		1 << 0
317a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
318a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_QUALIF_ATTR:
319a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
320a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the shemas requires qualified attributes
321a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
3224255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_QUALIF_ATTR		1 << 1
323a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
324a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * _xmlSchema:
325a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
326a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * A Schemas definition
327a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
3284255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchema {
3294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;        /* schema name */
3304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *targetNamespace;     /* the target namespace */
3314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *version;
3324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
3334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlDocPtr doc;
3344255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
3354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int flags;
3364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3374255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr typeDecl;
3384255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr attrDecl;
3394255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr attrgrpDecl;
3404255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr elemDecl;
3414255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr notaDecl;
34210b6da4aa5111bb420201d8286d22b1e9ce139c0Daniel Veillard
34310b6da4aa5111bb420201d8286d22b1e9ce139c0Daniel Veillard    xmlHashTablePtr schemasImports;
3445f7f991ab7055c1a96aed0127cebfa22a180c181Daniel Veillard
3455f7f991ab7055c1a96aed0127cebfa22a180c181Daniel Veillard    void *_private;	/* unused by the library for users or bindings */
346a84c0b30c411afe3b55e84ecce99ba0d42c39e3eDaniel Veillard    xmlHashTablePtr groupDecl;
3474255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
3484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
34976874e4516a1d7b467d400604f8aef77be015727Igor ZlatkovicXMLPUBFUN void XMLCALL 	xmlSchemaFreeType	(xmlSchemaTypePtr type);
3504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifdef __cplusplus
3524255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}
3534255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif
3544255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3554255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif /* LIBXML_SCHEMAS_ENABLED */
3564255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif /* __XML_SCHEMA_INTERNALS_H__ */
3574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3584255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
359