2002-04-16 19:50:10 +04:00
/*
* schemasInternals . h : internal interfaces for the XML Schemas handling
* and schema validity checking
*
* See Copyright for the status of this software .
*
* Daniel . Veillard @ w3 . org
*/
# ifndef __XML_SCHEMA_INTERNALS_H__
# define __XML_SCHEMA_INTERNALS_H__
# if defined(WIN32) && defined(_MSC_VER)
# include <libxml/xmlwin32version.h>
# else
# include <libxml/xmlversion.h>
# endif
# ifdef LIBXML_SCHEMAS_ENABLED
# include <libxml/xmlregexp.h>
# ifdef __cplusplus
extern " C " {
# endif
/*
* XML Schemas defines multiple type of types .
*/
typedef enum {
XML_SCHEMA_TYPE_BASIC = 1 ,
XML_SCHEMA_TYPE_ANY ,
XML_SCHEMA_TYPE_FACET ,
XML_SCHEMA_TYPE_SIMPLE ,
XML_SCHEMA_TYPE_COMPLEX ,
XML_SCHEMA_TYPE_SEQUENCE ,
XML_SCHEMA_TYPE_CHOICE ,
XML_SCHEMA_TYPE_ALL ,
XML_SCHEMA_TYPE_SIMPLE_CONTENT ,
XML_SCHEMA_TYPE_COMPLEX_CONTENT ,
XML_SCHEMA_TYPE_UR ,
XML_SCHEMA_TYPE_RESTRICTION ,
XML_SCHEMA_TYPE_EXTENSION ,
XML_SCHEMA_TYPE_ELEMENT ,
XML_SCHEMA_TYPE_ATTRIBUTE ,
2002-04-23 21:51:29 +04:00
XML_SCHEMA_TYPE_ATTRIBUTEGROUP ,
2002-04-16 19:50:10 +04:00
XML_SCHEMA_TYPE_GROUP ,
XML_SCHEMA_TYPE_NOTATION ,
XML_SCHEMA_TYPE_LIST ,
XML_SCHEMA_TYPE_UNION ,
XML_SCHEMA_FACET_MININCLUSIVE = 1000 ,
XML_SCHEMA_FACET_MINEXCLUSIVE ,
XML_SCHEMA_FACET_MAXINCLUSIVE ,
XML_SCHEMA_FACET_MAXEXCLUSIVE ,
XML_SCHEMA_FACET_TOTALDIGITS ,
XML_SCHEMA_FACET_FRACTIONDIGITS ,
XML_SCHEMA_FACET_PATTERN ,
XML_SCHEMA_FACET_ENUMERATION ,
XML_SCHEMA_FACET_WHITESPACE ,
XML_SCHEMA_FACET_LENGTH ,
XML_SCHEMA_FACET_MAXLENGTH ,
XML_SCHEMA_FACET_MINLENGTH
} xmlSchemaTypeType ;
typedef enum {
XML_SCHEMA_CONTENT_UNKNOWN = 0 ,
XML_SCHEMA_CONTENT_EMPTY = 1 ,
XML_SCHEMA_CONTENT_ELEMENTS ,
XML_SCHEMA_CONTENT_MIXED ,
XML_SCHEMA_CONTENT_SIMPLE ,
XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS ,
2002-04-23 11:12:20 +04:00
XML_SCHEMA_CONTENT_BASIC ,
XML_SCHEMA_CONTENT_ANY
2002-04-16 19:50:10 +04:00
} xmlSchemaContentType ;
typedef struct _xmlSchemaVal xmlSchemaVal ;
typedef xmlSchemaVal * xmlSchemaValPtr ;
typedef struct _xmlSchemaType xmlSchemaType ;
typedef xmlSchemaType * xmlSchemaTypePtr ;
typedef struct _xmlSchemaFacet xmlSchemaFacet ;
typedef xmlSchemaFacet * xmlSchemaFacetPtr ;
/**
* Annotation
*/
typedef struct _xmlSchemaAnnot xmlSchemaAnnot ;
typedef xmlSchemaAnnot * xmlSchemaAnnotPtr ;
struct _xmlSchemaAnnot {
struct _xmlSchemaAnnot * next ;
xmlNodePtr content ; /* the annotation */
} ;
/**
* An attribute definition .
*/
# define XML_SCHEMAS_ANYATTR_SKIP 1
# define XML_SCHEMAS_ANYATTR_LAX 2
# define XML_SCHEMAS_ANYATTR_STRICT 3
typedef struct _xmlSchemaAttribute xmlSchemaAttribute ;
typedef xmlSchemaAttribute * xmlSchemaAttributePtr ;
struct _xmlSchemaAttribute {
xmlSchemaTypeType type ; /* The kind of type */
struct _xmlSchemaAttribute * next ; /* the next attribute if in a group ... */
xmlChar * name ;
xmlChar * id ;
xmlChar * ref ;
xmlChar * refNs ;
xmlChar * typeName ;
xmlChar * typeNs ;
xmlSchemaAnnotPtr annot ;
xmlSchemaTypePtr base ;
int occurs ;
xmlChar * defValue ;
xmlSchemaTypePtr subtypes ;
} ;
/**
* An attribute group definition .
*
* xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
* must be kept similar
*/
typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup ;
typedef xmlSchemaAttributeGroup * xmlSchemaAttributeGroupPtr ;
struct _xmlSchemaAttributeGroup {
xmlSchemaTypeType type ; /* The kind of type */
struct _xmlSchemaAttribute * next ; /* the next attribute if in a group ... */
xmlChar * name ;
xmlChar * id ;
xmlChar * ref ;
xmlChar * refNs ;
xmlSchemaAnnotPtr annot ;
xmlSchemaAttributePtr attributes ;
} ;
/**
* Schemas type definition .
*/
# define XML_SCHEMAS_TYPE_MIXED 1 << 0
struct _xmlSchemaType {
xmlSchemaTypeType type ; /* The kind of type */
struct _xmlSchemaType * next ; /* the next type if in a sequence ... */
xmlChar * name ;
xmlChar * id ;
xmlChar * ref ;
xmlChar * refNs ;
xmlSchemaAnnotPtr annot ;
xmlSchemaTypePtr subtypes ;
xmlSchemaAttributePtr attributes ;
xmlNodePtr node ;
int minOccurs ;
int maxOccurs ;
int flags ;
xmlSchemaContentType contentType ;
xmlChar * base ;
xmlChar * baseNs ;
xmlSchemaTypePtr baseType ;
xmlSchemaFacetPtr facets ;
} ;
/**
* An element definition .
*
* xmlSchemaType , xmlSchemaFacet and xmlSchemaElement start of
* structures must be kept similar
*/
# define XML_SCHEMAS_ELEM_NILLABLE 1 << 0
# define XML_SCHEMAS_ELEM_GLOBAL 1 << 1
# define XML_SCHEMAS_ELEM_DEFAULT 1 << 2
# define XML_SCHEMAS_ELEM_FIXED 1 << 3
# define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4
# define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5
# define XML_SCHEMAS_ELEM_REF 1 << 6
typedef struct _xmlSchemaElement xmlSchemaElement ;
typedef xmlSchemaElement * xmlSchemaElementPtr ;
struct _xmlSchemaElement {
xmlSchemaTypeType type ; /* The kind of type */
struct _xmlSchemaType * next ; /* the next type if in a sequence ... */
xmlChar * name ;
xmlChar * id ;
xmlChar * ref ;
xmlChar * refNs ;
xmlSchemaAnnotPtr annot ;
xmlSchemaTypePtr subtypes ;
xmlSchemaAttributePtr attributes ;
xmlNodePtr node ;
int minOccurs ;
int maxOccurs ;
int flags ;
xmlChar * targetNamespace ;
xmlChar * namedType ;
xmlChar * namedTypeNs ;
xmlChar * substGroup ;
xmlChar * substGroupNs ;
xmlChar * scope ;
xmlChar * value ;
struct _xmlSchemaElement * refDecl ;
xmlRegexpPtr contModel ;
2002-04-23 11:12:20 +04:00
xmlSchemaContentType contentType ;
2002-04-16 19:50:10 +04:00
} ;
/**
* An facet definition .
*
*/
# define XML_SCHEMAS_FACET_UNKNOWN 0
# define XML_SCHEMAS_FACET_PRESERVE 1
# define XML_SCHEMAS_FACET_REPLACE 2
# define XML_SCHEMAS_FACET_COLLAPSE 3
struct _xmlSchemaFacet {
xmlSchemaTypeType type ; /* The kind of type */
struct _xmlSchemaFacet * next ; /* the next type if in a sequence ... */
xmlChar * value ;
xmlChar * id ;
xmlSchemaAnnotPtr annot ;
xmlNodePtr node ;
int fixed ;
int whitespace ;
xmlSchemaValPtr val ;
xmlRegexpPtr regexp ;
} ;
/**
* A notation definition .
*/
typedef struct _xmlSchemaNotation xmlSchemaNotation ;
typedef xmlSchemaNotation * xmlSchemaNotationPtr ;
struct _xmlSchemaNotation {
xmlSchemaTypeType type ; /* The kind of type */
xmlChar * name ;
xmlSchemaAnnotPtr annot ;
xmlChar * identifier ;
} ;
/**
* A Schemas definition
*/
# define XML_SCHEMAS_QUALIF_ELEM 1 << 0
# define XML_SCHEMAS_QUALIF_ATTR 1 << 1
struct _xmlSchema {
xmlChar * name ; /* schema name */
xmlChar * targetNamespace ; /* the target namespace */
xmlChar * version ;
xmlChar * id ;
xmlDocPtr doc ;
xmlSchemaAnnotPtr annot ;
int flags ;
xmlHashTablePtr typeDecl ;
xmlHashTablePtr attrDecl ;
xmlHashTablePtr attrgrpDecl ;
xmlHashTablePtr elemDecl ;
xmlHashTablePtr notaDecl ;
2002-05-18 11:55:20 +04:00
xmlHashTablePtr schemasImports ;
2002-04-16 19:50:10 +04:00
} ;
void xmlSchemaFreeType ( xmlSchemaTypePtr type ) ;
# ifdef __cplusplus
}
# endif
# endif /* LIBXML_SCHEMAS_ENABLED */
# endif /* __XML_SCHEMA_INTERNALS_H__ */