schemasInternals.h revision 8326e73bc163e15fd7b5264c0cc6cf2480723869
14255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/*
24255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * schemasInternals.h : internal interfaces for the XML Schemas handling
34255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard *                      and schema validity checking
44255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard *
54255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * See Copyright for the status of this software.
64255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard *
74255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * Daniel.Veillard@w3.org
84255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
94255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
104255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
114255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifndef __XML_SCHEMA_INTERNALS_H__
124255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define __XML_SCHEMA_INTERNALS_H__
134255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
144255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#include <libxml/xmlversion.h>
157ae91bcd9e94946a7be41290cb67ffc9c2cf0a9fIgor Zlatkovic
164255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifdef LIBXML_SCHEMAS_ENABLED
174255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
184255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#include <libxml/xmlregexp.h>
198326e73bc163e15fd7b5264c0cc6cf2480723869Daniel Veillard#include <libxml/hash.h>
204255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
214255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifdef __cplusplus
224255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardextern "C" {
234255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif
244255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
254255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
264255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/*
274255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * XML Schemas defines multiple type of types.
284255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef enum {
304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_BASIC = 1,
314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_ANY,
324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_FACET,
334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_SIMPLE,
344255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_COMPLEX,
354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_SEQUENCE,
364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_CHOICE,
374255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_ALL,
384255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_SIMPLE_CONTENT,
394255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_COMPLEX_CONTENT,
404255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_UR,
414255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_RESTRICTION,
424255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_EXTENSION,
434255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_ELEMENT,
444255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_ATTRIBUTE,
4513e04c6c12007d30ae7e007e931e55e717a5a73fDaniel Veillard    XML_SCHEMA_TYPE_ATTRIBUTEGROUP,
464255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_GROUP,
474255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_NOTATION,
484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_LIST,
494255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_TYPE_UNION,
504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MININCLUSIVE = 1000,
514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MINEXCLUSIVE,
524255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MAXINCLUSIVE,
534255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MAXEXCLUSIVE,
544255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_TOTALDIGITS,
554255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_FRACTIONDIGITS,
564255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_PATTERN,
574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_ENUMERATION,
584255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_WHITESPACE,
594255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_LENGTH,
604255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MAXLENGTH,
614255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_FACET_MINLENGTH
624255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard} xmlSchemaTypeType;
634255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
644255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef enum {
654255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_UNKNOWN = 0,
664255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_EMPTY = 1,
674255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_ELEMENTS,
684255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_MIXED,
694255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_SIMPLE,
704255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS,
7188c5891a25c1151a89f021e915d9efb7e58bfbf7Daniel Veillard    XML_SCHEMA_CONTENT_BASIC,
7288c5891a25c1151a89f021e915d9efb7e58bfbf7Daniel Veillard    XML_SCHEMA_CONTENT_ANY
734255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard} xmlSchemaContentType;
744255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
754255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaVal xmlSchemaVal;
764255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaVal *xmlSchemaValPtr;
774255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
784255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaType xmlSchemaType;
794255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaType *xmlSchemaTypePtr;
804255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
814255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaFacet xmlSchemaFacet;
824255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaFacet *xmlSchemaFacetPtr;
834255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
844255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
854255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * Annotation
864255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
874255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaAnnot xmlSchemaAnnot;
884255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaAnnot *xmlSchemaAnnotPtr;
894255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaAnnot {
904255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaAnnot *next;
914255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlNodePtr content;         /* the annotation */
924255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
934255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
944255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
954255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * An attribute definition.
964255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
974255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
984255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ANYATTR_SKIP	1
994255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ANYATTR_LAX		2
1004255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ANYATTR_STRICT	3
1014255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1024255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaAttribute xmlSchemaAttribute;
1034255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaAttribute *xmlSchemaAttributePtr;
1044255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaAttribute {
1054255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
1064255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
1074255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
1084255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
1094255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *ref;
1104255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *refNs;
1114255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *typeName;
1124255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *typeNs;
1134255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
1144255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1154255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr base;
1164255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int occurs;
1174255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *defValue;
1184255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr subtypes;
1194255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
1204255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1214255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
1224255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * An attribute group definition.
1234255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard *
1244255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
1254255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * must be kept similar
1264255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
1274255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;
1284255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr;
1294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaAttributeGroup {
1304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
1314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
1324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
1334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
1344255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *ref;
1354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *refNs;
1364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
1374255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1384255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAttributePtr attributes;
1394255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
1404255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1414255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1424255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
143a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_TYPE_MIXED:
144a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
145a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element content type is mixed
1464255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
1474255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_TYPE_MIXED		1 << 0
1484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
149a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
150a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * _xmlSchemaType:
151a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
152a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * Schemas type definition.
153a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
1544255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaType {
1554255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
1564255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaType *next;/* the next type if in a sequence ... */
1574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
1584255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
1594255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *ref;
1604255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *refNs;
1614255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
1624255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr subtypes;
1634255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAttributePtr attributes;
1644255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlNodePtr node;
1654255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int minOccurs;
1664255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int maxOccurs;
1674255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1684255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int flags;
1694255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaContentType contentType;
1704255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *base;
1714255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *baseNs;
1724255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr baseType;
1734255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaFacetPtr facets;
1744255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
1754255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
1764255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
177a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * xmlSchemaElement:
1784255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * An element definition.
1794255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard *
1804255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
1814255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * structures must be kept similar
1824255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
183a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
184a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_NILLABLE:
185a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
186a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is nillable
187a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
1884255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_NILLABLE	1 << 0
189a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
190a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_GLOBAL:
191a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
192a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is global
193a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
1944255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_GLOBAL		1 << 1
195a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
196a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_DEFAULT:
197a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
198a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element has a default value
199a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2004255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_DEFAULT	1 << 2
201a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
202a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_FIXED:
203a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
204a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element has a fixed value
205a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2064255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_FIXED		1 << 3
207a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
208a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_ABSTRACT:
209a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
210a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is abstract
211a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2124255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_ABSTRACT	1 << 4
213a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
214a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_TOPLEVEL:
215a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
216a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is top level
217a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2184255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_TOPLEVEL	1 << 5
219a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
220a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_ELEM_REF:
221a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
222a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the element is a reference to a type
223a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2244255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_ELEM_REF		1 << 6
2254255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
2264255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaElement xmlSchemaElement;
2274255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaElement *xmlSchemaElementPtr;
2284255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaElement {
2294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
2304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaType *next;/* the next type if in a sequence ... */
2314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
2324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
2334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *ref;
2344255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *refNs;
2354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
2364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypePtr subtypes;
2374255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAttributePtr attributes;
2384255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlNodePtr node;
2394255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int minOccurs;
2404255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int maxOccurs;
2414255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
2424255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int flags;
2434255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *targetNamespace;
2444255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *namedType;
2454255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *namedTypeNs;
2464255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *substGroup;
2474255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *substGroupNs;
2484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *scope;
2494255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *value;
2504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaElement *refDecl;
2514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlRegexpPtr contModel;
25288c5891a25c1151a89f021e915d9efb7e58bfbf7Daniel Veillard    xmlSchemaContentType contentType;
2534255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
2544255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
255a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/*
256a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_UNKNOWN:
2574255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard *
258a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * unknown facet handling
2594255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
2604255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_UNKNOWN	0
261a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/*
262a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_PRESERVE:
263a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
264a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * preserve the type of the facet
265a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2664255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_PRESERVE	1
267a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/*
268a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_REPLACE:
269a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
270a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * replace the type of the facet
271a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2724255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_REPLACE	2
273a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/*
274a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_FACET_COLLAPSE:
275a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
276a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * collapse the types of the facet
277a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2784255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_FACET_COLLAPSE	3
2794255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
280a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
281a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * A facet definition.
282a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
2834255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaFacet {
2844255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
2854255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */
2864255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *value;
2874255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
2884255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
2894255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlNodePtr node;
2904255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int fixed;
2914255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int whitespace;
2924255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaValPtr val;
2934255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlRegexpPtr    regexp;
2944255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
2954255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
2964255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
2974255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard * A notation definition.
2984255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
2994255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef struct _xmlSchemaNotation xmlSchemaNotation;
3004255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardtypedef xmlSchemaNotation *xmlSchemaNotationPtr;
3014255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchemaNotation {
3024255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaTypeType type;	/* The kind of type */
3034255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;
3044255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
3054255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *identifier;
3064255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
3074255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3084255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard/**
309a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_QUALIF_ELEM:
310a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
311a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the shemas requires qualified elements
3124255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard */
3134255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_QUALIF_ELEM		1 << 0
314a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
315a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * XML_SCHEMAS_QUALIF_ATTR:
316a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
317a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * the shemas requires qualified attributes
318a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
3194255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#define XML_SCHEMAS_QUALIF_ATTR		1 << 1
320a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard/**
321a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * _xmlSchema:
322a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard *
323a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard * A Schemas definition
324a9b66d00b5fbae2381f59c0be4d8c7b8e3c16cf7Daniel Veillard */
3254255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardstruct _xmlSchema {
3264255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *name;        /* schema name */
3274255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *targetNamespace;     /* the target namespace */
3284255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *version;
3294255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlChar *id;
3304255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlDocPtr doc;
3314255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlSchemaAnnotPtr annot;
3324255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    int flags;
3334255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3344255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr typeDecl;
3354255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr attrDecl;
3364255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr attrgrpDecl;
3374255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr elemDecl;
3384255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard    xmlHashTablePtr notaDecl;
33910b6da4aa5111bb420201d8286d22b1e9ce139c0Daniel Veillard
34010b6da4aa5111bb420201d8286d22b1e9ce139c0Daniel Veillard    xmlHashTablePtr schemasImports;
3415f7f991ab7055c1a96aed0127cebfa22a180c181Daniel Veillard
3425f7f991ab7055c1a96aed0127cebfa22a180c181Daniel Veillard    void *_private;	/* unused by the library for users or bindings */
3434255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard};
3444255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3454255d504151db75c17f85192ce74f45dd2d65533Daniel Veillardvoid	xmlSchemaFreeType	(xmlSchemaTypePtr type);
3464255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3474255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#ifdef __cplusplus
3484255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard}
3494255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif
3504255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3514255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif /* LIBXML_SCHEMAS_ENABLED */
3524255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard#endif /* __XML_SCHEMA_INTERNALS_H__ */
3534255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
3544255d504151db75c17f85192ce74f45dd2d65533Daniel Veillard
355