⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlschemas.c

📁 xml开源解析代码.版本为libxml2-2.6.29,可支持GB3212.网络消息发送XML时很有用.
💻 C
📖 第 1 页 / 共 5 页
字号:
    xmlSchemaTypePtr typeDef; /* the complex/simple type definition if any */    int flags; /* combination of node info flags */    int valNeeded;    int normVal;    xmlSchemaElementPtr decl; /* the element/attribute declaration */    int depth;    xmlSchemaPSVIIDCBindingPtr idcTable; /* the table of PSVI IDC bindings                                            for the scope element*/    xmlSchemaIDCMatcherPtr idcMatchers; /* the IDC matchers for the scope                                           element */    xmlRegExecCtxtPtr regexCtxt;    const xmlChar **nsBindings; /* Namespace bindings on this element */    int nbNsBindings;    int sizeNsBindings;        int hasKeyrefs;    int appliedXPath; /* Indicates that an XPath has been applied. */};#define XML_SCHEMAS_ATTR_UNKNOWN 1#define XML_SCHEMAS_ATTR_ASSESSED 2#define XML_SCHEMAS_ATTR_PROHIBITED 3#define XML_SCHEMAS_ATTR_ERR_MISSING 4#define XML_SCHEMAS_ATTR_INVALID_VALUE 5#define XML_SCHEMAS_ATTR_ERR_NO_TYPE 6#define XML_SCHEMAS_ATTR_ERR_FIXED_VALUE 7#define XML_SCHEMAS_ATTR_DEFAULT 8#define XML_SCHEMAS_ATTR_VALIDATE_VALUE 9#define XML_SCHEMAS_ATTR_ERR_WILD_STRICT_NO_DECL 10#define XML_SCHEMAS_ATTR_HAS_ATTR_USE 11#define XML_SCHEMAS_ATTR_HAS_ATTR_DECL 12#define XML_SCHEMAS_ATTR_WILD_SKIP 13#define XML_SCHEMAS_ATTR_WILD_LAX_NO_DECL 14#define XML_SCHEMAS_ATTR_ERR_WILD_DUPLICATE_ID 15#define XML_SCHEMAS_ATTR_ERR_WILD_AND_USE_ID 16#define XML_SCHEMAS_ATTR_META 17/** @metaType values of xmlSchemaAttrInfo.*/#define XML_SCHEMA_ATTR_INFO_META_XSI_TYPE 1#define XML_SCHEMA_ATTR_INFO_META_XSI_NIL 2#define XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC 3#define XML_SCHEMA_ATTR_INFO_META_XSI_NO_NS_SCHEMA_LOC 4#define XML_SCHEMA_ATTR_INFO_META_XMLNS 5typedef struct _xmlSchemaAttrInfo xmlSchemaAttrInfo;typedef xmlSchemaAttrInfo *xmlSchemaAttrInfoPtr;struct _xmlSchemaAttrInfo {    int nodeType;    xmlNodePtr node;    int nodeLine;        const xmlChar *localName;    const xmlChar *nsName;    const xmlChar *value;    xmlSchemaValPtr val; /* the pre-computed value if any */    xmlSchemaTypePtr typeDef; /* the complex/simple type definition if any */    int flags; /* combination of node info flags */    xmlSchemaAttributePtr decl; /* the attribute declaration */    xmlSchemaAttributeUsePtr use;  /* the attribute use */    int state;    int metaType;    const xmlChar *vcValue; /* the value constraint value */    xmlSchemaNodeInfoPtr parent;};#define XML_SCHEMA_VALID_CTXT_FLAG_STREAM 1/** * xmlSchemaValidCtxt: * * A Schemas validation context */struct _xmlSchemaValidCtxt {    int type;    void *errCtxt;             /* user specific data block */    xmlSchemaValidityErrorFunc error;   /* the callback in case of errors */    xmlSchemaValidityWarningFunc warning; /* the callback in case of warning */    xmlStructuredErrorFunc serror;    xmlSchemaPtr schema;        /* The schema in use */    xmlDocPtr doc;    xmlParserInputBufferPtr input;    xmlCharEncoding enc;    xmlSAXHandlerPtr sax;    xmlParserCtxtPtr parserCtxt;    void *user_data; /* TODO: What is this for? */    int err;    int nberrors;    xmlNodePtr node;    xmlNodePtr cur;    /* xmlSchemaTypePtr type; */    xmlRegExecCtxtPtr regexp;    xmlSchemaValPtr value;    int valueWS;    int options;    xmlNodePtr validationRoot;    xmlSchemaParserCtxtPtr pctxt;    int xsiAssemble;    int depth;    xmlSchemaNodeInfoPtr *elemInfos; /* array of element informations */    int sizeElemInfos;    xmlSchemaNodeInfoPtr inode; /* the current element information */    xmlSchemaIDCAugPtr aidcs; /* a list of augmented IDC informations */    xmlSchemaIDCStateObjPtr xpathStates; /* first active state object. */    xmlSchemaIDCStateObjPtr xpathStatePool; /* first stored state object. */    xmlSchemaIDCMatcherPtr idcMatcherCache; /* Cache for IDC matcher objects. */    xmlSchemaPSVIIDCNodePtr *idcNodes; /* list of all IDC node-table entries*/    int nbIdcNodes;    int sizeIdcNodes;    xmlSchemaPSVIIDCKeyPtr *idcKeys; /* list of all IDC node-table entries */    int nbIdcKeys;    int sizeIdcKeys;    int flags;    xmlDictPtr dict;#ifdef LIBXML_READER_ENABLED    xmlTextReaderPtr reader;#endif    xmlSchemaAttrInfoPtr *attrInfos;    int nbAttrInfos;    int sizeAttrInfos;    int skipDepth;    xmlSchemaItemListPtr nodeQNames;    int hasKeyrefs;    int createIDCNodeTables;    int psviExposeIDCNodeTables;};/** * xmlSchemaSubstGroup: * * */typedef struct _xmlSchemaSubstGroup xmlSchemaSubstGroup;typedef xmlSchemaSubstGroup *xmlSchemaSubstGroupPtr;struct _xmlSchemaSubstGroup {    xmlSchemaElementPtr head;    xmlSchemaItemListPtr members;};/************************************************************************ * 									* * 			Some predeclarations				* * 									* ************************************************************************/static int xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt,                                 xmlSchemaPtr schema,                                 xmlNodePtr node);static int xmlSchemaParseRedefine(xmlSchemaParserCtxtPtr ctxt,                                 xmlSchemaPtr schema,                                 xmlNodePtr node);static intxmlSchemaTypeFixup(xmlSchemaTypePtr type,                   xmlSchemaAbstractCtxtPtr ctxt);static const xmlChar *xmlSchemaFacetTypeToString(xmlSchemaTypeType type);static intxmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,                     xmlNodePtr node);static intxmlSchemaCheckFacetValues(xmlSchemaTypePtr typeDecl,                       xmlSchemaParserCtxtPtr ctxt);static voidxmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt);static xmlSchemaWhitespaceValueTypexmlSchemaGetWhiteSpaceFacetValue(xmlSchemaTypePtr type);static xmlSchemaTreeItemPtrxmlSchemaParseModelGroup(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,			 xmlNodePtr node, xmlSchemaTypeType type,			 int withParticle);static const xmlChar *xmlSchemaGetComponentTypeStr(xmlSchemaBasicItemPtr item);static xmlSchemaTypeLinkPtrxmlSchemaGetUnionSimpleTypeMemberTypes(xmlSchemaTypePtr type);static voidxmlSchemaInternalErr(xmlSchemaAbstractCtxtPtr actxt,		     const char *funcName,		     const char *message);static intxmlSchemaCheckCOSSTDerivedOK(xmlSchemaAbstractCtxtPtr ctxt,			     xmlSchemaTypePtr type,			     xmlSchemaTypePtr baseType,			     int subset);static voidxmlSchemaCheckElementDeclComponent(xmlSchemaElementPtr elemDecl,				   xmlSchemaParserCtxtPtr ctxt);static voidxmlSchemaComponentListFree(xmlSchemaItemListPtr list);static xmlSchemaQNameRefPtrxmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt,				xmlSchemaPtr schema,				xmlNodePtr node);/************************************************************************ *									* * 			Helper functions			        * *									* ************************************************************************//** * xmlSchemaItemTypeToStr: * @type: the type of the schema item * * Returns the component name of a schema item. */static const xmlChar *xmlSchemaItemTypeToStr(xmlSchemaTypeType type){    switch (type) {	case XML_SCHEMA_TYPE_BASIC:	    return(BAD_CAST "simple type definition");	case XML_SCHEMA_TYPE_SIMPLE:	    return(BAD_CAST "simple type definition");	case XML_SCHEMA_TYPE_COMPLEX:	    return(BAD_CAST "complex type definition");	case XML_SCHEMA_TYPE_ELEMENT:	    return(BAD_CAST "element declaration");	case XML_SCHEMA_TYPE_ATTRIBUTE_USE:	    return(BAD_CAST "attribute use");	case XML_SCHEMA_TYPE_ATTRIBUTE:	    return(BAD_CAST "attribute declaration");	case XML_SCHEMA_TYPE_GROUP:	    return(BAD_CAST "model group definition");	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:	    return(BAD_CAST "attribute group definition");	case XML_SCHEMA_TYPE_NOTATION:	    return(BAD_CAST "notation declaration");	case XML_SCHEMA_TYPE_SEQUENCE:	    return(BAD_CAST "model group (sequence)");	case XML_SCHEMA_TYPE_CHOICE:	    return(BAD_CAST "model group (choice)");	case XML_SCHEMA_TYPE_ALL:	    return(BAD_CAST "model group (all)");	case XML_SCHEMA_TYPE_PARTICLE:	    return(BAD_CAST "particle");	case XML_SCHEMA_TYPE_IDC_UNIQUE:	    return(BAD_CAST "unique identity-constraint");	    /* return(BAD_CAST "IDC (unique)"); */	case XML_SCHEMA_TYPE_IDC_KEY:	    return(BAD_CAST "key identity-constraint");	    /* return(BAD_CAST "IDC (key)"); */	case XML_SCHEMA_TYPE_IDC_KEYREF:	    return(BAD_CAST "keyref identity-constraint");	    /* return(BAD_CAST "IDC (keyref)"); */	case XML_SCHEMA_TYPE_ANY:	    return(BAD_CAST "wildcard (any)");	case XML_SCHEMA_EXTRA_QNAMEREF:	    return(BAD_CAST "[helper component] QName reference");	case XML_SCHEMA_EXTRA_ATTR_USE_PROHIB:	    return(BAD_CAST "[helper component] attribute use prohibition");	default:	    return(BAD_CAST "Not a schema component");    }}/** * xmlSchemaGetComponentTypeStr: * @type: the type of the schema item * * Returns the component name of a schema item. */static const xmlChar *xmlSchemaGetComponentTypeStr(xmlSchemaBasicItemPtr item){    switch (item->type) {	case XML_SCHEMA_TYPE_BASIC:	    if (WXS_IS_COMPLEX(WXS_TYPE_CAST item))		return(BAD_CAST "complex type definition");	    else		return(BAD_CAST "simple type definition");		default:	    return(xmlSchemaItemTypeToStr(item->type));    }}/** * xmlSchemaGetComponentNode: * @item: a schema component * * Returns node associated with the schema component. * NOTE that such a node need not be available; plus, a component's * node need not to reflect the component directly, since there is no * one-to-one relationship between the XML Schema representation and * the component representation. */static xmlNodePtrxmlSchemaGetComponentNode(xmlSchemaBasicItemPtr item){    switch (item->type) {	case XML_SCHEMA_TYPE_ELEMENT:	    return (((xmlSchemaElementPtr) item)->node);	case XML_SCHEMA_TYPE_ATTRIBUTE:	    return (((xmlSchemaAttributePtr) item)->node);	case XML_SCHEMA_TYPE_COMPLEX:	case XML_SCHEMA_TYPE_SIMPLE:	    return (((xmlSchemaTypePtr) item)->node);	case XML_SCHEMA_TYPE_ANY:	case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:	    return (((xmlSchemaWildcardPtr) item)->node);	case XML_SCHEMA_TYPE_PARTICLE:	    return (((xmlSchemaParticlePtr) item)->node);	case XML_SCHEMA_TYPE_SEQUENCE:	case XML_SCHEMA_TYPE_CHOICE:	case XML_SCHEMA_TYPE_ALL:	    return (((xmlSchemaModelGroupPtr) item)->node);	case XML_SCHEMA_TYPE_GROUP:	    return (((xmlSchemaModelGroupDefPtr) item)->node);	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:	    return (((xmlSchemaAttributeGroupPtr) item)->node);	case XML_SCHEMA_TYPE_IDC_UNIQUE:	case XML_SCHEMA_TYPE_IDC_KEY:	case XML_SCHEMA_TYPE_IDC_KEYREF:	    return (((xmlSchemaIDCPtr) item)->node);	case XML_SCHEMA_EXTRA_QNAMEREF:	    return(((xmlSchemaQNameRefPtr) item)->node);	/* TODO: What to do with NOTATIONs?	case XML_SCHEMA_TYPE_NOTATION:	    return (((xmlSchemaNotationPtr) item)->node);	*/	case XML_SCHEMA_TYPE_ATTRIBUTE_USE:	    return (((xmlSchemaAttributeUsePtr) item)->node);	default:	    return (NULL);    }}#if 0/** * xmlSchemaGetNextComponent: * @item: a schema component * * Returns the next sibling of the schema component. */static xmlSchemaBasicItemPtrxmlSchemaGetNextComponent(xmlSchemaBasicItemPtr item){    switch (item->type) {	case XML_SCHEMA_TYPE_ELEMENT:	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaElementPtr) item)->next);	case XML_SCHEMA_TYPE_ATTRIBUTE:	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaAttributePtr) item)->next);	case XML_SCHEMA_TYPE_COMPLEX:	case XML_SCHEMA_TYPE_SIMPLE:	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaTypePtr) item)->next);	case XML_SCHEMA_TYPE_ANY:	case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:	    return (NULL);	case XML_SCHEMA_TYPE_PARTICLE:	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaParticlePtr) item)->next);	case XML_SCHEMA_TYPE_SEQUENCE:	case XML_SCHEMA_TYPE_CHOICE:	case XML_SCHEMA_TYPE_ALL:	    return (NULL);	case XML_SCHEMA_TYPE_GROUP:	    return (NULL);	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaAttributeGroupPtr) item)->next);	case XML_SCHEMA_TYPE_IDC_UNIQUE:	case XML_SCHEMA_TYPE_IDC_KEY:	case XML_SCHEMA_TYPE_IDC_KEYREF:	    return ((xmlSchemaBasicItemPtr) ((xmlSchemaIDCPtr) item)->next);	default:	    return (NULL);    }}#endif/** * xmlSchemaFormatQName: * @buf: the string buffer * @namespaceName:  the namespace name * @localName: the local name * * Returns the given QName in the format "{namespaceName}localName" or * just "localName" if @namespaceName is NULL. * * Returns the localName if @namespaceName is NULL, a formatted * string otherwise. */static const xmlChar*xmlSchemaFormatQName(xmlChar **buf,		     const xmlChar *namespaceName,		     const xmlChar *localName){    FREE_AND_NULL(*buf)    if (namespaceName != NULL) {	*buf = xmlStrdup(BAD_CAST "{");	*buf = xmlStrcat(*buf, namespaceName);	*buf = xmlStrcat(*buf, BAD_CAST "}");    }    if (localName != NULL) {	if (namespaceName == NULL)	    return(localName);	*buf = xmlStrcat(*buf, localName);    } else {	*buf = xmlStrcat(*buf, BAD_CAST "(NULL)");    }        return ((const xmlChar *) *buf);}static const xmlChar*   xmlSchemaFormatQNameNs(xmlChar **buf, xmlNsPtr ns, const xmlChar *localName){    if (ns != NULL)	return (xmlSchemaFormatQName(buf, ns->href, localName));    else	return (xmlSchemaFormatQName(buf, NULL, localName));}static const xmlChar *xmlSchemaGetComponentName(xmlSchemaBasicItemPtr item){    switch (item->type) {	case XML_SCHEMA_TYPE_ELEMENT:	    return (((xmlSchemaElementPtr) item)->name);	case XML_SCHEMA_TYPE_ATTRIBUTE:	    return (((xmlSchemaAttributePtr) item)->name);	case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:	    return (((xmlSchemaAttributeGroupPtr) item)->name);	case XML_SCHEMA_TYPE_BASIC:	case XML_SCHEMA_TYPE_SIMPLE:	case XML_SCHEMA_TYPE_COMPLEX:	    return (((xmlSchemaTypePtr) item)->name);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -