blob: b68a6e12856907923cc371f9de4837418e9f274c [file] [log] [blame]
Daniel Veillard4255d502002-04-16 15:50:10 +00001/*
Daniel Veillardbe586972003-11-18 20:56:51 +00002 * Summary: internal interfaces for XML Schemas
3 * Description: internal interfaces for the XML Schemas handling
4 * and schema validity checking
Daniel Veillard567a45b2005-10-18 19:11:55 +00005 * The Schemas development is a Work In Progress.
6 * Some of those interfaces are not garanteed to be API or ABI stable !
Daniel Veillard4255d502002-04-16 15:50:10 +00007 *
Daniel Veillardbe586972003-11-18 20:56:51 +00008 * Copy: See Copyright for the status of this software.
Daniel Veillard4255d502002-04-16 15:50:10 +00009 *
Daniel Veillardbe586972003-11-18 20:56:51 +000010 * Author: Daniel Veillard
Daniel Veillard4255d502002-04-16 15:50:10 +000011 */
12
13
14#ifndef __XML_SCHEMA_INTERNALS_H__
15#define __XML_SCHEMA_INTERNALS_H__
16
Daniel Veillard4255d502002-04-16 15:50:10 +000017#include <libxml/xmlversion.h>
Igor Zlatkovic7ae91bc2002-11-08 17:18:52 +000018
Daniel Veillard4255d502002-04-16 15:50:10 +000019#ifdef LIBXML_SCHEMAS_ENABLED
20
21#include <libxml/xmlregexp.h>
Daniel Veillard8326e732003-01-07 00:19:07 +000022#include <libxml/hash.h>
Daniel Veillardbe9c6322003-11-22 20:37:51 +000023#include <libxml/dict.h>
Daniel Veillard4255d502002-04-16 15:50:10 +000024
25#ifdef __cplusplus
26extern "C" {
27#endif
28
Daniel Veillard01fa6152004-06-29 17:04:39 +000029typedef enum {
30 XML_SCHEMAS_UNKNOWN = 0,
31 XML_SCHEMAS_STRING,
32 XML_SCHEMAS_NORMSTRING,
33 XML_SCHEMAS_DECIMAL,
34 XML_SCHEMAS_TIME,
35 XML_SCHEMAS_GDAY,
36 XML_SCHEMAS_GMONTH,
37 XML_SCHEMAS_GMONTHDAY,
38 XML_SCHEMAS_GYEAR,
39 XML_SCHEMAS_GYEARMONTH,
40 XML_SCHEMAS_DATE,
41 XML_SCHEMAS_DATETIME,
42 XML_SCHEMAS_DURATION,
43 XML_SCHEMAS_FLOAT,
44 XML_SCHEMAS_DOUBLE,
45 XML_SCHEMAS_BOOLEAN,
46 XML_SCHEMAS_TOKEN,
47 XML_SCHEMAS_LANGUAGE,
48 XML_SCHEMAS_NMTOKEN,
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +000049 XML_SCHEMAS_NMTOKENS,
Daniel Veillard01fa6152004-06-29 17:04:39 +000050 XML_SCHEMAS_NAME,
51 XML_SCHEMAS_QNAME,
52 XML_SCHEMAS_NCNAME,
53 XML_SCHEMAS_ID,
54 XML_SCHEMAS_IDREF,
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +000055 XML_SCHEMAS_IDREFS,
Daniel Veillard01fa6152004-06-29 17:04:39 +000056 XML_SCHEMAS_ENTITY,
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +000057 XML_SCHEMAS_ENTITIES,
Daniel Veillard01fa6152004-06-29 17:04:39 +000058 XML_SCHEMAS_NOTATION,
59 XML_SCHEMAS_ANYURI,
60 XML_SCHEMAS_INTEGER,
61 XML_SCHEMAS_NPINTEGER,
62 XML_SCHEMAS_NINTEGER,
63 XML_SCHEMAS_NNINTEGER,
64 XML_SCHEMAS_PINTEGER,
65 XML_SCHEMAS_INT,
66 XML_SCHEMAS_UINT,
67 XML_SCHEMAS_LONG,
68 XML_SCHEMAS_ULONG,
69 XML_SCHEMAS_SHORT,
70 XML_SCHEMAS_USHORT,
71 XML_SCHEMAS_BYTE,
72 XML_SCHEMAS_UBYTE,
73 XML_SCHEMAS_HEXBINARY,
74 XML_SCHEMAS_BASE64BINARY,
75 XML_SCHEMAS_ANYTYPE,
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +000076 XML_SCHEMAS_ANYSIMPLETYPE
Daniel Veillard01fa6152004-06-29 17:04:39 +000077} xmlSchemaValType;
Daniel Veillard4255d502002-04-16 15:50:10 +000078
79/*
80 * XML Schemas defines multiple type of types.
81 */
82typedef enum {
Daniel Veillard01fa6152004-06-29 17:04:39 +000083 XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */
Daniel Veillard4255d502002-04-16 15:50:10 +000084 XML_SCHEMA_TYPE_ANY,
85 XML_SCHEMA_TYPE_FACET,
86 XML_SCHEMA_TYPE_SIMPLE,
87 XML_SCHEMA_TYPE_COMPLEX,
Kasimier T. Buchcik4efd90d2005-06-09 10:32:53 +000088 XML_SCHEMA_TYPE_SEQUENCE = 6,
Daniel Veillard4255d502002-04-16 15:50:10 +000089 XML_SCHEMA_TYPE_CHOICE,
90 XML_SCHEMA_TYPE_ALL,
91 XML_SCHEMA_TYPE_SIMPLE_CONTENT,
92 XML_SCHEMA_TYPE_COMPLEX_CONTENT,
93 XML_SCHEMA_TYPE_UR,
94 XML_SCHEMA_TYPE_RESTRICTION,
95 XML_SCHEMA_TYPE_EXTENSION,
96 XML_SCHEMA_TYPE_ELEMENT,
97 XML_SCHEMA_TYPE_ATTRIBUTE,
Daniel Veillard13e04c62002-04-23 17:51:29 +000098 XML_SCHEMA_TYPE_ATTRIBUTEGROUP,
Daniel Veillard4255d502002-04-16 15:50:10 +000099 XML_SCHEMA_TYPE_GROUP,
100 XML_SCHEMA_TYPE_NOTATION,
101 XML_SCHEMA_TYPE_LIST,
102 XML_SCHEMA_TYPE_UNION,
William M. Bracke7091952004-05-11 15:09:58 +0000103 XML_SCHEMA_TYPE_ANY_ATTRIBUTE,
Kasimier T. Buchcike8a550b2005-01-27 12:49:31 +0000104 XML_SCHEMA_TYPE_IDC_UNIQUE,
105 XML_SCHEMA_TYPE_IDC_KEY,
106 XML_SCHEMA_TYPE_IDC_KEYREF,
Kasimier T. Buchcik4efd90d2005-06-09 10:32:53 +0000107 XML_SCHEMA_TYPE_PARTICLE = 25,
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000108 XML_SCHEMA_TYPE_ATTRIBUTE_USE,
Daniel Veillard4255d502002-04-16 15:50:10 +0000109 XML_SCHEMA_FACET_MININCLUSIVE = 1000,
110 XML_SCHEMA_FACET_MINEXCLUSIVE,
111 XML_SCHEMA_FACET_MAXINCLUSIVE,
112 XML_SCHEMA_FACET_MAXEXCLUSIVE,
113 XML_SCHEMA_FACET_TOTALDIGITS,
114 XML_SCHEMA_FACET_FRACTIONDIGITS,
115 XML_SCHEMA_FACET_PATTERN,
116 XML_SCHEMA_FACET_ENUMERATION,
117 XML_SCHEMA_FACET_WHITESPACE,
118 XML_SCHEMA_FACET_LENGTH,
119 XML_SCHEMA_FACET_MAXLENGTH,
Kasimier T. Buchcik256401b2005-04-01 15:36:42 +0000120 XML_SCHEMA_FACET_MINLENGTH,
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000121 XML_SCHEMA_EXTRA_QNAMEREF = 2000,
122 XML_SCHEMA_EXTRA_ATTR_USE_PROHIB
Daniel Veillard4255d502002-04-16 15:50:10 +0000123} xmlSchemaTypeType;
124
125typedef enum {
126 XML_SCHEMA_CONTENT_UNKNOWN = 0,
127 XML_SCHEMA_CONTENT_EMPTY = 1,
128 XML_SCHEMA_CONTENT_ELEMENTS,
129 XML_SCHEMA_CONTENT_MIXED,
130 XML_SCHEMA_CONTENT_SIMPLE,
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000131 XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, /* Obsolete */
Daniel Veillard88c58912002-04-23 07:12:20 +0000132 XML_SCHEMA_CONTENT_BASIC,
133 XML_SCHEMA_CONTENT_ANY
Daniel Veillard4255d502002-04-16 15:50:10 +0000134} xmlSchemaContentType;
135
136typedef struct _xmlSchemaVal xmlSchemaVal;
137typedef xmlSchemaVal *xmlSchemaValPtr;
138
139typedef struct _xmlSchemaType xmlSchemaType;
140typedef xmlSchemaType *xmlSchemaTypePtr;
141
142typedef struct _xmlSchemaFacet xmlSchemaFacet;
143typedef xmlSchemaFacet *xmlSchemaFacetPtr;
144
145/**
146 * Annotation
147 */
148typedef struct _xmlSchemaAnnot xmlSchemaAnnot;
149typedef xmlSchemaAnnot *xmlSchemaAnnotPtr;
150struct _xmlSchemaAnnot {
151 struct _xmlSchemaAnnot *next;
152 xmlNodePtr content; /* the annotation */
153};
154
155/**
Daniel Veillard1e906612003-12-05 14:57:46 +0000156 * XML_SCHEMAS_ANYATTR_SKIP:
157 *
158 * Skip unknown attribute from validation
Daniel Veillard01fa6152004-06-29 17:04:39 +0000159 * Obsolete, not used anymore.
Daniel Veillard4255d502002-04-16 15:50:10 +0000160 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000161#define XML_SCHEMAS_ANYATTR_SKIP 1
Daniel Veillard1e906612003-12-05 14:57:46 +0000162/**
163 * XML_SCHEMAS_ANYATTR_LAX:
164 *
165 * Ignore validation non definition on attributes
Daniel Veillard01fa6152004-06-29 17:04:39 +0000166 * Obsolete, not used anymore.
Daniel Veillard1e906612003-12-05 14:57:46 +0000167 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000168#define XML_SCHEMAS_ANYATTR_LAX 2
Daniel Veillard1e906612003-12-05 14:57:46 +0000169/**
170 * XML_SCHEMAS_ANYATTR_STRICT:
171 *
172 * Apply strict validation rules on attributes
Daniel Veillard01fa6152004-06-29 17:04:39 +0000173 * Obsolete, not used anymore.
Daniel Veillard1e906612003-12-05 14:57:46 +0000174 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000175#define XML_SCHEMAS_ANYATTR_STRICT 3
Daniel Veillard3646d642004-06-02 19:19:14 +0000176/**
177 * XML_SCHEMAS_ANY_SKIP:
178 *
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000179 * Skip unknown attribute from validation
Daniel Veillard3646d642004-06-02 19:19:14 +0000180 */
181#define XML_SCHEMAS_ANY_SKIP 1
182/**
183 * XML_SCHEMAS_ANY_LAX:
184 *
Daniel Veillard01fa6152004-06-29 17:04:39 +0000185 * Used by wildcards.
186 * Validate if type found, don't worry if not found
Daniel Veillard3646d642004-06-02 19:19:14 +0000187 */
188#define XML_SCHEMAS_ANY_LAX 2
189/**
190 * XML_SCHEMAS_ANY_STRICT:
191 *
Daniel Veillard01fa6152004-06-29 17:04:39 +0000192 * Used by wildcards.
193 * Apply strict validation rules
Daniel Veillard3646d642004-06-02 19:19:14 +0000194 */
195#define XML_SCHEMAS_ANY_STRICT 3
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000196/**
Daniel Veillardc85d0fe2004-04-16 16:46:51 +0000197 * XML_SCHEMAS_ATTR_USE_PROHIBITED:
198 *
Daniel Veillard01fa6152004-06-29 17:04:39 +0000199 * Used by wildcards.
Daniel Veillardc85d0fe2004-04-16 16:46:51 +0000200 * The attribute is prohibited.
201 */
202#define XML_SCHEMAS_ATTR_USE_PROHIBITED 0
Daniel Veillardc85d0fe2004-04-16 16:46:51 +0000203/**
204 * XML_SCHEMAS_ATTR_USE_REQUIRED:
205 *
206 * The attribute is required.
207 */
208#define XML_SCHEMAS_ATTR_USE_REQUIRED 1
Daniel Veillardc85d0fe2004-04-16 16:46:51 +0000209/**
210 * XML_SCHEMAS_ATTR_USE_OPTIONAL:
211 *
212 * The attribute is optional.
213 */
214#define XML_SCHEMAS_ATTR_USE_OPTIONAL 2
Daniel Veillard3646d642004-06-02 19:19:14 +0000215/**
William M. Brack21e4ef22005-01-02 09:53:13 +0000216 * XML_SCHEMAS_ATTR_GLOBAL:
Daniel Veillard3646d642004-06-02 19:19:14 +0000217 *
218 * allow elements in no namespace
219 */
220#define XML_SCHEMAS_ATTR_GLOBAL 1 << 0
Daniel Veillardc85d0fe2004-04-16 16:46:51 +0000221/**
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000222 * XML_SCHEMAS_ATTR_NSDEFAULT:
223 *
224 * allow elements in no namespace
225 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000226#define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7
Daniel Veillardc0826a72004-08-10 14:17:33 +0000227/**
Kasimier T. Buchcik87876402004-09-29 13:29:03 +0000228 * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED:
Daniel Veillardc0826a72004-08-10 14:17:33 +0000229 *
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000230 * this is set when the "type" and "ref" references
Daniel Veillardc0826a72004-08-10 14:17:33 +0000231 * have been resolved.
232 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000233#define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8
Daniel Veillardc0826a72004-08-10 14:17:33 +0000234/**
235 * XML_SCHEMAS_ATTR_FIXED:
236 *
237 * the attribute has a fixed value
238 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000239#define XML_SCHEMAS_ATTR_FIXED 1 << 9
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000240
Daniel Veillard1e906612003-12-05 14:57:46 +0000241/**
242 * xmlSchemaAttribute:
243 * An attribute definition.
244 */
245
Daniel Veillard4255d502002-04-16 15:50:10 +0000246typedef struct _xmlSchemaAttribute xmlSchemaAttribute;
247typedef xmlSchemaAttribute *xmlSchemaAttributePtr;
248struct _xmlSchemaAttribute {
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000249 xmlSchemaTypeType type;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000250 struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */
251 const xmlChar *name; /* the name of the declaration */
252 const xmlChar *id; /* Deprecated; not used */
253 const xmlChar *ref; /* Deprecated; not used */
254 const xmlChar *refNs; /* Deprecated; not used */
Daniel Veillardc0826a72004-08-10 14:17:33 +0000255 const xmlChar *typeName; /* the local name of the type definition */
256 const xmlChar *typeNs; /* the ns URI of the type definition */
Daniel Veillard4255d502002-04-16 15:50:10 +0000257 xmlSchemaAnnotPtr annot;
258
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000259 xmlSchemaTypePtr base; /* Deprecated; not used */
260 int occurs; /* Deprecated; not used */
261 const xmlChar *defValue; /* The initial value of the value constraint */
Daniel Veillardc0826a72004-08-10 14:17:33 +0000262 xmlSchemaTypePtr subtypes; /* the type definition */
Daniel Veillard75bb3bb2003-05-12 15:25:56 +0000263 xmlNodePtr node;
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000264 const xmlChar *targetNamespace;
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000265 int flags;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000266 const xmlChar *refPrefix; /* Deprecated; not used */
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000267 xmlSchemaValPtr defVal; /* The compiled value constraint */
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000268 xmlSchemaAttributePtr refDecl; /* Deprecated; not used */
Daniel Veillard4255d502002-04-16 15:50:10 +0000269};
270
271/**
Daniel Veillard3646d642004-06-02 19:19:14 +0000272 * xmlSchemaAttributeLink:
273 * Used to build a list of attribute uses on complexType definitions.
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000274 * WARNING: Deprecated; not used.
Daniel Veillard3646d642004-06-02 19:19:14 +0000275 */
276typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink;
277typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr;
278struct _xmlSchemaAttributeLink {
279 struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */
280 struct _xmlSchemaAttribute *attr;/* the linked attribute */
281};
282
283/**
284 * XML_SCHEMAS_WILDCARD_COMPLETE:
285 *
286 * If the wildcard is complete.
287 */
288#define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0
289
290/**
291 * xmlSchemaCharValueLink:
292 * Used to build a list of namespaces on wildcards.
293 */
294typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs;
295typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr;
296struct _xmlSchemaWildcardNs {
297 struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */
298 const xmlChar *value;/* the value */
299};
300
301/**
302 * xmlSchemaWildcard.
303 * A wildcard.
304 */
305typedef struct _xmlSchemaWildcard xmlSchemaWildcard;
306typedef xmlSchemaWildcard *xmlSchemaWildcardPtr;
307struct _xmlSchemaWildcard {
308 xmlSchemaTypeType type; /* The kind of type */
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000309 const xmlChar *id; /* Deprecated; not used */
Daniel Veillard3646d642004-06-02 19:19:14 +0000310 xmlSchemaAnnotPtr annot;
311 xmlNodePtr node;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000312 int minOccurs; /* Deprecated; not used */
313 int maxOccurs; /* Deprecated; not used */
Daniel Veillard3646d642004-06-02 19:19:14 +0000314 int processContents;
315 int any; /* Indicates if the ns constraint is of ##any */
316 xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */
317 xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */
318 int flags;
319};
320
321/**
322 * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED:
323 *
324 * The attribute wildcard has been already builded.
325 */
326#define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0
327/**
328 * XML_SCHEMAS_ATTRGROUP_GLOBAL:
329 *
330 * The attribute wildcard has been already builded.
331 */
332#define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1
Kasimier T. Buchcik383434b2004-09-03 18:55:35 +0000333/**
334 * XML_SCHEMAS_ATTRGROUP_MARKED:
335 *
336 * Marks the attr group as marked; used for circular checks.
337 */
338#define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2
Daniel Veillard3646d642004-06-02 19:19:14 +0000339
340/**
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000341 * XML_SCHEMAS_ATTRGROUP_REDEFINED:
342 *
343 * The attr group was redefined.
344 */
345#define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000346/**
347 * XML_SCHEMAS_ATTRGROUP_HAS_REFS:
348 *
349 * Whether this attr. group contains attr. group references.
350 */
351#define XML_SCHEMAS_ATTRGROUP_HAS_REFS 1 << 4
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000352
353/**
Daniel Veillard4255d502002-04-16 15:50:10 +0000354 * An attribute group definition.
355 *
356 * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
357 * must be kept similar
358 */
359typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;
360typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr;
361struct _xmlSchemaAttributeGroup {
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000362 xmlSchemaTypeType type; /* The kind of type */
Daniel Veillard4255d502002-04-16 15:50:10 +0000363 struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000364 const xmlChar *name;
365 const xmlChar *id;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000366 const xmlChar *ref; /* Deprecated; not used */
367 const xmlChar *refNs; /* Deprecated; not used */
Daniel Veillard4255d502002-04-16 15:50:10 +0000368 xmlSchemaAnnotPtr annot;
369
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000370 xmlSchemaAttributePtr attributes; /* Deprecated; not used */
Daniel Veillard75bb3bb2003-05-12 15:25:56 +0000371 xmlNodePtr node;
Daniel Veillard3646d642004-06-02 19:19:14 +0000372 int flags;
373 xmlSchemaWildcardPtr attributeWildcard;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000374 const xmlChar *refPrefix; /* Deprecated; not used */
375 xmlSchemaAttributeGroupPtr refItem; /* Deprecated; not used */
Kasimier T. Buchcik31113c72005-01-13 16:57:20 +0000376 const xmlChar *targetNamespace;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000377 void *attrUses;
Daniel Veillard4255d502002-04-16 15:50:10 +0000378};
379
Daniel Veillard01fa6152004-06-29 17:04:39 +0000380/**
381 * xmlSchemaTypeLink:
382 * Used to build a list of types (e.g. member types of
383 * simpleType with variety "union").
384 */
385typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink;
386typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr;
387struct _xmlSchemaTypeLink {
388 struct _xmlSchemaTypeLink *next;/* the next type link ... */
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000389 xmlSchemaTypePtr type;/* the linked type */
Daniel Veillard01fa6152004-06-29 17:04:39 +0000390};
391
392/**
393 * xmlSchemaFacetLink:
394 * Used to build a list of facets.
395 */
396typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink;
397typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr;
398struct _xmlSchemaFacetLink {
399 struct _xmlSchemaFacetLink *next;/* the next facet link ... */
400 xmlSchemaFacetPtr facet;/* the linked facet */
401};
Daniel Veillard4255d502002-04-16 15:50:10 +0000402
403/**
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000404 * XML_SCHEMAS_TYPE_MIXED:
405 *
406 * the element content type is mixed
Daniel Veillard4255d502002-04-16 15:50:10 +0000407 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000408#define XML_SCHEMAS_TYPE_MIXED 1 << 0
Daniel Veillard3646d642004-06-02 19:19:14 +0000409/**
410 * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION:
411 *
412 * the simple or complex type has a derivation method of "extension".
413 */
414#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION 1 << 1
415/**
416 * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION:
417 *
418 * the simple or complex type has a derivation method of "restriction".
419 */
420#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION 1 << 2
421/**
422 * XML_SCHEMAS_TYPE_GLOBAL:
423 *
424 * the type is global
425 */
426#define XML_SCHEMAS_TYPE_GLOBAL 1 << 3
427/**
428 * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD:
429 *
430 * the complexType owns an attribute wildcard, i.e.
431 * it can be freed by the complexType
432 */
Kasimier T. Buchcik256401b2005-04-01 15:36:42 +0000433#define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD 1 << 4 /* Obsolete. */
Daniel Veillard01fa6152004-06-29 17:04:39 +0000434/**
435 * XML_SCHEMAS_TYPE_VARIETY_ABSENT:
436 *
437 * the simpleType has a variety of "absent".
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000438 * TODO: Actually not necessary :-/, since if
439 * none of the variety flags occur then it's
440 * automatically absent.
Daniel Veillard01fa6152004-06-29 17:04:39 +0000441 */
442#define XML_SCHEMAS_TYPE_VARIETY_ABSENT 1 << 5
443/**
444 * XML_SCHEMAS_TYPE_VARIETY_LIST:
445 *
446 * the simpleType has a variety of "list".
447 */
448#define XML_SCHEMAS_TYPE_VARIETY_LIST 1 << 6
449/**
450 * XML_SCHEMAS_TYPE_VARIETY_UNION:
451 *
452 * the simpleType has a variety of "union".
453 */
454#define XML_SCHEMAS_TYPE_VARIETY_UNION 1 << 7
455/**
456 * XML_SCHEMAS_TYPE_VARIETY_ATOMIC:
457 *
458 * the simpleType has a variety of "union".
459 */
460#define XML_SCHEMAS_TYPE_VARIETY_ATOMIC 1 << 8
461/**
462 * XML_SCHEMAS_TYPE_FINAL_EXTENSION:
463 *
464 * the complexType has a final of "extension".
465 */
466#define XML_SCHEMAS_TYPE_FINAL_EXTENSION 1 << 9
467/**
468 * XML_SCHEMAS_TYPE_FINAL_RESTRICTION:
469 *
470 * the simpleType/complexType has a final of "restriction".
471 */
472#define XML_SCHEMAS_TYPE_FINAL_RESTRICTION 1 << 10
473/**
474 * XML_SCHEMAS_TYPE_FINAL_LIST:
475 *
476 * the simpleType has a final of "list".
477 */
478#define XML_SCHEMAS_TYPE_FINAL_LIST 1 << 11
479/**
480 * XML_SCHEMAS_TYPE_FINAL_UNION:
481 *
482 * the simpleType has a final of "union".
483 */
484#define XML_SCHEMAS_TYPE_FINAL_UNION 1 << 12
485/**
William M. Brack21e4ef22005-01-02 09:53:13 +0000486 * XML_SCHEMAS_TYPE_FINAL_DEFAULT:
Daniel Veillard01fa6152004-06-29 17:04:39 +0000487 *
William M. Brack21e4ef22005-01-02 09:53:13 +0000488 * the simpleType has a final of "default".
Daniel Veillard01fa6152004-06-29 17:04:39 +0000489 */
490#define XML_SCHEMAS_TYPE_FINAL_DEFAULT 1 << 13
491/**
William M. Brack21e4ef22005-01-02 09:53:13 +0000492 * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE:
Daniel Veillard01fa6152004-06-29 17:04:39 +0000493 *
William M. Brack21e4ef22005-01-02 09:53:13 +0000494 * Marks the item as a builtin primitive.
Daniel Veillard01fa6152004-06-29 17:04:39 +0000495 */
496#define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE 1 << 14
Kasimier T. Buchcik383434b2004-09-03 18:55:35 +0000497/**
William M. Brack21e4ef22005-01-02 09:53:13 +0000498 * XML_SCHEMAS_TYPE_MARKED:
Kasimier T. Buchcik383434b2004-09-03 18:55:35 +0000499 *
500 * Marks the item as marked; used for circular checks.
501 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000502#define XML_SCHEMAS_TYPE_MARKED 1 << 16
Kasimier T. Buchcik87876402004-09-29 13:29:03 +0000503/**
504 * XML_SCHEMAS_TYPE_BLOCK_DEFAULT:
505 *
506 * the complexType did not specify 'block' so use the default of the
507 * <schema> item.
508 */
509#define XML_SCHEMAS_TYPE_BLOCK_DEFAULT 1 << 17
510/**
511 * XML_SCHEMAS_TYPE_BLOCK_EXTENSION:
512 *
513 * the complexType has a 'block' of "extension".
514 */
515#define XML_SCHEMAS_TYPE_BLOCK_EXTENSION 1 << 18
516/**
William M. Brack21e4ef22005-01-02 09:53:13 +0000517 * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION:
Kasimier T. Buchcik87876402004-09-29 13:29:03 +0000518 *
519 * the complexType has a 'block' of "restriction".
520 */
521#define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION 1 << 19
522/**
523 * XML_SCHEMAS_TYPE_ABSTRACT:
524 *
525 * the simple/complexType is abstract.
526 */
527#define XML_SCHEMAS_TYPE_ABSTRACT 1 << 20
Kasimier T. Buchcike8a550b2005-01-27 12:49:31 +0000528/**
529 * XML_SCHEMAS_TYPE_FACETSNEEDVALUE:
530 *
531 * indicates if the facets need a computed value
532 */
533#define XML_SCHEMAS_TYPE_FACETSNEEDVALUE 1 << 21
Kasimier T. Buchcik256401b2005-04-01 15:36:42 +0000534/**
535 * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED:
536 *
537 * indicates that the type was typefixed
538 */
539#define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED 1 << 22
540/**
541 * XML_SCHEMAS_TYPE_INTERNAL_INVALID:
542 *
543 * indicates that the type is invalid
544 */
545#define XML_SCHEMAS_TYPE_INTERNAL_INVALID 1 << 23
Kasimier T. Buchcik4efd90d2005-06-09 10:32:53 +0000546/**
547 * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE:
548 *
549 * a whitespace-facet value of "preserve"
550 */
551#define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE 1 << 24
552/**
553 * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE:
554 *
555 * a whitespace-facet value of "replace"
556 */
557#define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE 1 << 25
558/**
559 * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE:
560 *
561 * a whitespace-facet value of "collapse"
562 */
563#define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE 1 << 26
564/**
565 * XML_SCHEMAS_TYPE_HAS_FACETS:
566 *
567 * has facets
568 */
569#define XML_SCHEMAS_TYPE_HAS_FACETS 1 << 27
570/**
571 * XML_SCHEMAS_TYPE_NORMVALUENEEDED:
572 *
573 * indicates if the facets (pattern) need a normalized value
574 */
575#define XML_SCHEMAS_TYPE_NORMVALUENEEDED 1 << 28
Daniel Veillard4255d502002-04-16 15:50:10 +0000576
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000577/**
Kasimier T. Buchcik22c0c462005-09-12 19:09:46 +0000578 * XML_SCHEMAS_TYPE_FIXUP_1:
579 *
580 * First stage of fixup was done.
581 */
582#define XML_SCHEMAS_TYPE_FIXUP_1 1 << 29
583
584/**
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000585 * XML_SCHEMAS_TYPE_REDEFINED:
586 *
587 * The type was redefined.
588 */
589#define XML_SCHEMAS_TYPE_REDEFINED 1 << 30
590/**
591 * XML_SCHEMAS_TYPE_REDEFINING:
592 *
593 * The type redefines an other type.
594 */
595/* #define XML_SCHEMAS_TYPE_REDEFINING 1 << 31 */
596
597/**
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000598 * _xmlSchemaType:
599 *
600 * Schemas type definition.
601 */
Daniel Veillard4255d502002-04-16 15:50:10 +0000602struct _xmlSchemaType {
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000603 xmlSchemaTypeType type; /* The kind of type */
604 struct _xmlSchemaType *next; /* the next type if in a sequence ... */
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000605 const xmlChar *name;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000606 const xmlChar *id ; /* Deprecated; not used */
607 const xmlChar *ref; /* Deprecated; not used */
608 const xmlChar *refNs; /* Deprecated; not used */
Daniel Veillard4255d502002-04-16 15:50:10 +0000609 xmlSchemaAnnotPtr annot;
610 xmlSchemaTypePtr subtypes;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000611 xmlSchemaAttributePtr attributes; /* Deprecated; not used */
Daniel Veillard4255d502002-04-16 15:50:10 +0000612 xmlNodePtr node;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000613 int minOccurs; /* Deprecated; not used */
614 int maxOccurs; /* Deprecated; not used */
Daniel Veillard4255d502002-04-16 15:50:10 +0000615
616 int flags;
617 xmlSchemaContentType contentType;
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000618 const xmlChar *base; /* Base type's local name */
619 const xmlChar *baseNs; /* Base type's target namespace */
620 xmlSchemaTypePtr baseType; /* The base type component */
621 xmlSchemaFacetPtr facets; /* Local facets */
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000622 struct _xmlSchemaType *redef; /* Deprecated; not used */
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000623 int recurse; /* Obsolete */
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000624 xmlSchemaAttributeLinkPtr *attributeUses; /* Deprecated; not used */
Daniel Veillard3646d642004-06-02 19:19:14 +0000625 xmlSchemaWildcardPtr attributeWildcard;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000626 int builtInType; /* Type of built-in types. */
627 xmlSchemaTypeLinkPtr memberTypes; /* member-types if a union type. */
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000628 xmlSchemaFacetLinkPtr facetSet; /* All facets (incl. inherited) */
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000629 const xmlChar *refPrefix; /* Deprecated; not used */
630 xmlSchemaTypePtr contentTypeDef; /* Used for the simple content of complex types.
631 Could we use @subtypes for this? */
632 xmlRegexpPtr contModel; /* Holds the automaton of the content model */
Kasimier T. Buchcik31113c72005-01-13 16:57:20 +0000633 const xmlChar *targetNamespace;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000634 void *attrUses;
Daniel Veillard4255d502002-04-16 15:50:10 +0000635};
636
William M. Brack60f394e2003-11-16 06:25:42 +0000637/*
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000638 * xmlSchemaElement:
Daniel Veillard4255d502002-04-16 15:50:10 +0000639 * An element definition.
640 *
641 * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
642 * structures must be kept similar
643 */
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000644/**
645 * XML_SCHEMAS_ELEM_NILLABLE:
646 *
647 * the element is nillable
648 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000649#define XML_SCHEMAS_ELEM_NILLABLE 1 << 0
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000650/**
651 * XML_SCHEMAS_ELEM_GLOBAL:
652 *
653 * the element is global
654 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000655#define XML_SCHEMAS_ELEM_GLOBAL 1 << 1
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000656/**
657 * XML_SCHEMAS_ELEM_DEFAULT:
658 *
659 * the element has a default value
660 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000661#define XML_SCHEMAS_ELEM_DEFAULT 1 << 2
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000662/**
663 * XML_SCHEMAS_ELEM_FIXED:
664 *
665 * the element has a fixed value
666 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000667#define XML_SCHEMAS_ELEM_FIXED 1 << 3
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000668/**
669 * XML_SCHEMAS_ELEM_ABSTRACT:
670 *
671 * the element is abstract
672 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000673#define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000674/**
675 * XML_SCHEMAS_ELEM_TOPLEVEL:
676 *
677 * the element is top level
Daniel Veillard3646d642004-06-02 19:19:14 +0000678 * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000679 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000680#define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000681/**
682 * XML_SCHEMAS_ELEM_REF:
683 *
684 * the element is a reference to a type
685 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000686#define XML_SCHEMAS_ELEM_REF 1 << 6
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000687/**
688 * XML_SCHEMAS_ELEM_NSDEFAULT:
689 *
690 * allow elements in no namespace
Daniel Veillard01fa6152004-06-29 17:04:39 +0000691 * Obsolete, not used anymore.
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000692 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000693#define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7
Daniel Veillardc0826a72004-08-10 14:17:33 +0000694/**
William M. Brack21e4ef22005-01-02 09:53:13 +0000695 * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED:
Daniel Veillardc0826a72004-08-10 14:17:33 +0000696 *
697 * this is set when "type", "ref", "substitutionGroup"
698 * references have been resolved.
699 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000700#define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED 1 << 8
Daniel Veillardc0826a72004-08-10 14:17:33 +0000701 /**
William M. Brack21e4ef22005-01-02 09:53:13 +0000702 * XML_SCHEMAS_ELEM_CIRCULAR:
Daniel Veillardc0826a72004-08-10 14:17:33 +0000703 *
704 * a helper flag for the search of circular references.
705 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000706#define XML_SCHEMAS_ELEM_CIRCULAR 1 << 9
Daniel Veillardc0826a72004-08-10 14:17:33 +0000707/**
708 * XML_SCHEMAS_ELEM_BLOCK_ABSENT:
709 *
710 * the "block" attribute is absent
711 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000712#define XML_SCHEMAS_ELEM_BLOCK_ABSENT 1 << 10
Daniel Veillardc0826a72004-08-10 14:17:33 +0000713/**
714 * XML_SCHEMAS_ELEM_BLOCK_EXTENSION:
715 *
716 * disallowed substitutions are absent
717 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000718#define XML_SCHEMAS_ELEM_BLOCK_EXTENSION 1 << 11
Daniel Veillardc0826a72004-08-10 14:17:33 +0000719/**
720 * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION:
721 *
722 * disallowed substitutions: "restriction"
723 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000724#define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION 1 << 12
Daniel Veillardc0826a72004-08-10 14:17:33 +0000725/**
726 * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION:
727 *
728 * disallowed substitutions: "substituion"
729 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000730#define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION 1 << 13
Daniel Veillardc0826a72004-08-10 14:17:33 +0000731/**
732 * XML_SCHEMAS_ELEM_FINAL_ABSENT:
733 *
734 * substitution group exclusions are absent
735 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000736#define XML_SCHEMAS_ELEM_FINAL_ABSENT 1 << 14
Daniel Veillardc0826a72004-08-10 14:17:33 +0000737/**
William M. Brack21e4ef22005-01-02 09:53:13 +0000738 * XML_SCHEMAS_ELEM_FINAL_EXTENSION:
Daniel Veillardc0826a72004-08-10 14:17:33 +0000739 *
740 * substitution group exclusions: "extension"
741 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000742#define XML_SCHEMAS_ELEM_FINAL_EXTENSION 1 << 15
Daniel Veillardc0826a72004-08-10 14:17:33 +0000743/**
William M. Brack21e4ef22005-01-02 09:53:13 +0000744 * XML_SCHEMAS_ELEM_FINAL_RESTRICTION:
Daniel Veillardc0826a72004-08-10 14:17:33 +0000745 *
746 * substitution group exclusions: "restriction"
747 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000748#define XML_SCHEMAS_ELEM_FINAL_RESTRICTION 1 << 16
Kasimier T. Buchcik1a99a392005-04-08 11:23:56 +0000749/**
750 * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD:
751 *
752 * the declaration is a substitution group head
753 */
754#define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD 1 << 17
Kasimier T. Buchcik4efd90d2005-06-09 10:32:53 +0000755/**
756 * XML_SCHEMAS_ELEM_INTERNAL_CHECKED:
757 *
758 * this is set when the elem decl has been checked against
759 * all constraints
760 */
761#define XML_SCHEMAS_ELEM_INTERNAL_CHECKED 1 << 18
Daniel Veillard4255d502002-04-16 15:50:10 +0000762
763typedef struct _xmlSchemaElement xmlSchemaElement;
764typedef xmlSchemaElement *xmlSchemaElementPtr;
765struct _xmlSchemaElement {
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000766 xmlSchemaTypeType type; /* The kind of type */
767 struct _xmlSchemaType *next; /* Not used? */
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000768 const xmlChar *name;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000769 const xmlChar *id; /* Deprecated; not used */
770 const xmlChar *ref; /* Deprecated; not used */
771 const xmlChar *refNs; /* Deprecated; not used */
Daniel Veillard4255d502002-04-16 15:50:10 +0000772 xmlSchemaAnnotPtr annot;
Daniel Veillardc0826a72004-08-10 14:17:33 +0000773 xmlSchemaTypePtr subtypes; /* the type definition */
Daniel Veillard4255d502002-04-16 15:50:10 +0000774 xmlSchemaAttributePtr attributes;
775 xmlNodePtr node;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000776 int minOccurs; /* Deprecated; not used */
777 int maxOccurs; /* Deprecated; not used */
Daniel Veillard4255d502002-04-16 15:50:10 +0000778
779 int flags;
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000780 const xmlChar *targetNamespace;
781 const xmlChar *namedType;
782 const xmlChar *namedTypeNs;
783 const xmlChar *substGroup;
784 const xmlChar *substGroupNs;
785 const xmlChar *scope;
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000786 const xmlChar *value; /* The original value of the value constraint. */
787 struct _xmlSchemaElement *refDecl; /* This will now be used for the
788 substitution group affiliation */
789 xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */
Daniel Veillard88c58912002-04-23 07:12:20 +0000790 xmlSchemaContentType contentType;
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000791 const xmlChar *refPrefix; /* Deprecated; not used */
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000792 xmlSchemaValPtr defVal; /* The compiled value contraint. */
793 void *idcs; /* The identity-constraint defs */
Daniel Veillard4255d502002-04-16 15:50:10 +0000794};
795
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000796/*
797 * XML_SCHEMAS_FACET_UNKNOWN:
Daniel Veillard4255d502002-04-16 15:50:10 +0000798 *
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000799 * unknown facet handling
Daniel Veillard4255d502002-04-16 15:50:10 +0000800 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000801#define XML_SCHEMAS_FACET_UNKNOWN 0
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000802/*
803 * XML_SCHEMAS_FACET_PRESERVE:
804 *
805 * preserve the type of the facet
806 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000807#define XML_SCHEMAS_FACET_PRESERVE 1
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000808/*
809 * XML_SCHEMAS_FACET_REPLACE:
810 *
811 * replace the type of the facet
812 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000813#define XML_SCHEMAS_FACET_REPLACE 2
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000814/*
815 * XML_SCHEMAS_FACET_COLLAPSE:
816 *
817 * collapse the types of the facet
818 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000819#define XML_SCHEMAS_FACET_COLLAPSE 3
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000820/**
821 * A facet definition.
822 */
Daniel Veillard4255d502002-04-16 15:50:10 +0000823struct _xmlSchemaFacet {
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000824 xmlSchemaTypeType type; /* The kind of type */
Daniel Veillard4255d502002-04-16 15:50:10 +0000825 struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000826 const xmlChar *value; /* The original value */
827 const xmlChar *id; /* Obsolete */
Daniel Veillard4255d502002-04-16 15:50:10 +0000828 xmlSchemaAnnotPtr annot;
829 xmlNodePtr node;
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000830 int fixed; /* XML_SCHEMAS_FACET_PRESERVE, etc. */
Daniel Veillard4255d502002-04-16 15:50:10 +0000831 int whitespace;
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000832 xmlSchemaValPtr val; /* The compiled value */
833 xmlRegexpPtr regexp; /* The regex for patterns */
Daniel Veillard4255d502002-04-16 15:50:10 +0000834};
835
836/**
837 * A notation definition.
838 */
839typedef struct _xmlSchemaNotation xmlSchemaNotation;
840typedef xmlSchemaNotation *xmlSchemaNotationPtr;
841struct _xmlSchemaNotation {
Kasimier T. Buchcik570faa52005-10-10 13:18:40 +0000842 xmlSchemaTypeType type; /* The kind of type */
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000843 const xmlChar *name;
Daniel Veillard4255d502002-04-16 15:50:10 +0000844 xmlSchemaAnnotPtr annot;
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000845 const xmlChar *identifier;
Kasimier T. Buchcik31113c72005-01-13 16:57:20 +0000846 const xmlChar *targetNamespace;
Daniel Veillard4255d502002-04-16 15:50:10 +0000847};
848
Kasimier T. Buchcik22c0c462005-09-12 19:09:46 +0000849/*
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000850* TODO: Actually all those flags used for the schema should sit
Kasimier T. Buchcik22c0c462005-09-12 19:09:46 +0000851* on the schema parser context, since they are used only
852* during parsing an XML schema document, and not available
853* on the component level as per spec.
854*/
Daniel Veillard4255d502002-04-16 15:50:10 +0000855/**
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000856 * XML_SCHEMAS_QUALIF_ELEM:
857 *
Kasimier T. Buchcik22c0c462005-09-12 19:09:46 +0000858 * Reflects elementFormDefault == qualified in
859 * an XML schema document.
Daniel Veillard4255d502002-04-16 15:50:10 +0000860 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000861#define XML_SCHEMAS_QUALIF_ELEM 1 << 0
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000862/**
863 * XML_SCHEMAS_QUALIF_ATTR:
864 *
Kasimier T. Buchcik22c0c462005-09-12 19:09:46 +0000865 * Reflects attributeFormDefault == qualified in
866 * an XML schema document.
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000867 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000868#define XML_SCHEMAS_QUALIF_ATTR 1 << 1
Daniel Veillard01fa6152004-06-29 17:04:39 +0000869/**
870 * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION:
871 *
Daniel Veillardc0826a72004-08-10 14:17:33 +0000872 * the schema has "extension" in the set of finalDefault.
Daniel Veillard01fa6152004-06-29 17:04:39 +0000873 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000874#define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION 1 << 2
Daniel Veillard01fa6152004-06-29 17:04:39 +0000875/**
876 * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION:
877 *
Daniel Veillardc0826a72004-08-10 14:17:33 +0000878 * the schema has "restriction" in the set of finalDefault.
Daniel Veillard01fa6152004-06-29 17:04:39 +0000879 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000880#define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION 1 << 3
Daniel Veillard01fa6152004-06-29 17:04:39 +0000881/**
882 * XML_SCHEMAS_FINAL_DEFAULT_LIST:
883 *
Daniel Veillardc0826a72004-08-10 14:17:33 +0000884 * the cshema has "list" in the set of finalDefault.
Daniel Veillard01fa6152004-06-29 17:04:39 +0000885 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000886#define XML_SCHEMAS_FINAL_DEFAULT_LIST 1 << 4
Daniel Veillard01fa6152004-06-29 17:04:39 +0000887/**
888 * XML_SCHEMAS_FINAL_DEFAULT_UNION:
889 *
Daniel Veillardc0826a72004-08-10 14:17:33 +0000890 * the schema has "union" in the set of finalDefault.
Daniel Veillard01fa6152004-06-29 17:04:39 +0000891 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000892#define XML_SCHEMAS_FINAL_DEFAULT_UNION 1 << 5
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000893/**
Daniel Veillardc0826a72004-08-10 14:17:33 +0000894 * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION:
895 *
896 * the schema has "extension" in the set of blockDefault.
897 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000898#define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION 1 << 6
Daniel Veillardc0826a72004-08-10 14:17:33 +0000899/**
900 * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION:
901 *
902 * the schema has "restriction" in the set of blockDefault.
903 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000904#define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION 1 << 7
Daniel Veillardc0826a72004-08-10 14:17:33 +0000905/**
906 * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION:
907 *
908 * the schema has "substitution" in the set of blockDefault.
909 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000910#define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION 1 << 8
Daniel Veillardc0826a72004-08-10 14:17:33 +0000911/**
912 * XML_SCHEMAS_INCLUDING_CONVERT_NS:
913 *
914 * the schema is currently including an other schema with
915 * no target namespace.
916 */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000917#define XML_SCHEMAS_INCLUDING_CONVERT_NS 1 << 9
Daniel Veillardc0826a72004-08-10 14:17:33 +0000918/**
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000919 * _xmlSchema:
920 *
921 * A Schemas definition
922 */
Daniel Veillard4255d502002-04-16 15:50:10 +0000923struct _xmlSchema {
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000924 const xmlChar *name; /* schema name */
925 const xmlChar *targetNamespace; /* the target namespace */
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000926 const xmlChar *version;
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000927 const xmlChar *id; /* Obsolete */
Daniel Veillard4255d502002-04-16 15:50:10 +0000928 xmlDocPtr doc;
929 xmlSchemaAnnotPtr annot;
930 int flags;
931
932 xmlHashTablePtr typeDecl;
933 xmlHashTablePtr attrDecl;
934 xmlHashTablePtr attrgrpDecl;
935 xmlHashTablePtr elemDecl;
936 xmlHashTablePtr notaDecl;
Daniel Veillard10b6da42002-05-18 07:55:20 +0000937
938 xmlHashTablePtr schemasImports;
Daniel Veillard5f7f9912002-06-17 17:03:00 +0000939
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000940 void *_private; /* unused by the library for users or bindings */
Daniel Veillarda84c0b32003-06-02 16:58:46 +0000941 xmlHashTablePtr groupDecl;
Daniel Veillardbe9c6322003-11-22 20:37:51 +0000942 xmlDictPtr dict;
Daniel Veillardbd2904b2003-11-25 15:38:59 +0000943 void *includes; /* the includes, this is opaque for now */
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000944 int preserve; /* whether to free the document */
Kasimier T. Buchcik87876402004-09-29 13:29:03 +0000945 int counter; /* used to give ononymous components unique names */
Kasimier T. Buchcikef3d07d2005-09-14 17:53:43 +0000946 xmlHashTablePtr idcDef; /* All identity-constraint defs. */
947 void *volatiles; /* Obsolete */
Daniel Veillard4255d502002-04-16 15:50:10 +0000948};
949
Kasimier T. Buchcik876a6db2004-09-16 11:31:52 +0000950XMLPUBFUN void XMLCALL xmlSchemaFreeType (xmlSchemaTypePtr type);
951XMLPUBFUN void XMLCALL xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard);
Daniel Veillard4255d502002-04-16 15:50:10 +0000952
953#ifdef __cplusplus
954}
955#endif
956
957#endif /* LIBXML_SCHEMAS_ENABLED */
958#endif /* __XML_SCHEMA_INTERNALS_H__ */