OLD | NEW |
1 /* | 1 /* |
2 * schemas.c : implementation of the XML Schema handling and | 2 * schemas.c : implementation of the XML Schema handling and |
3 * schema validity checking | 3 * schema validity checking |
4 * | 4 * |
5 * See Copyright for the status of this software. | 5 * See Copyright for the status of this software. |
6 * | 6 * |
7 * Daniel Veillard <veillard@redhat.com> | 7 * Daniel Veillard <veillard@redhat.com> |
8 */ | 8 */ |
9 | 9 |
10 /* | 10 /* |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 | 100 |
101 /* #define ENABLE_IDC_NODE_TABLES_TEST */ | 101 /* #define ENABLE_IDC_NODE_TABLES_TEST */ |
102 | 102 |
103 #define DUMP_CONTENT_MODEL | 103 #define DUMP_CONTENT_MODEL |
104 | 104 |
105 #ifdef LIBXML_READER_ENABLED | 105 #ifdef LIBXML_READER_ENABLED |
106 /* #define XML_SCHEMA_READER_ENABLED */ | 106 /* #define XML_SCHEMA_READER_ENABLED */ |
107 #endif | 107 #endif |
108 | 108 |
109 #define UNBOUNDED (1 << 30) | 109 #define UNBOUNDED (1 << 30) |
110 #define TODO » » » » » » » » \ | 110 #define TODO» » » » » » » » \ |
111 xmlGenericError(xmlGenericErrorContext, \ | 111 xmlGenericError(xmlGenericErrorContext, \ |
112 "Unimplemented block at %s:%d\n", \ | 112 "Unimplemented block at %s:%d\n", \ |
113 __FILE__, __LINE__); | 113 __FILE__, __LINE__); |
114 | 114 |
115 #define XML_SCHEMAS_NO_NAMESPACE (const xmlChar *) "##" | 115 #define XML_SCHEMAS_NO_NAMESPACE (const xmlChar *) "##" |
116 | 116 |
117 /* | 117 /* |
118 * The XML Schemas namespaces | 118 * The XML Schemas namespaces |
119 */ | 119 */ |
120 static const xmlChar *xmlSchemaNs = (const xmlChar *) | 120 static const xmlChar *xmlSchemaNs = (const xmlChar *) |
(...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
968 xmlSchemaValidityWarningFunc warning; /* the callback in case of warning */ | 968 xmlSchemaValidityWarningFunc warning; /* the callback in case of warning */ |
969 xmlStructuredErrorFunc serror; | 969 xmlStructuredErrorFunc serror; |
970 | 970 |
971 xmlSchemaPtr schema; /* The schema in use */ | 971 xmlSchemaPtr schema; /* The schema in use */ |
972 xmlDocPtr doc; | 972 xmlDocPtr doc; |
973 xmlParserInputBufferPtr input; | 973 xmlParserInputBufferPtr input; |
974 xmlCharEncoding enc; | 974 xmlCharEncoding enc; |
975 xmlSAXHandlerPtr sax; | 975 xmlSAXHandlerPtr sax; |
976 xmlParserCtxtPtr parserCtxt; | 976 xmlParserCtxtPtr parserCtxt; |
977 void *user_data; /* TODO: What is this for? */ | 977 void *user_data; /* TODO: What is this for? */ |
| 978 char *filename; |
978 | 979 |
979 int err; | 980 int err; |
980 int nberrors; | 981 int nberrors; |
981 | 982 |
982 xmlNodePtr node; | 983 xmlNodePtr node; |
983 xmlNodePtr cur; | 984 xmlNodePtr cur; |
984 /* xmlSchemaTypePtr type; */ | 985 /* xmlSchemaTypePtr type; */ |
985 | 986 |
986 xmlRegExecCtxtPtr regexp; | 987 xmlRegExecCtxtPtr regexp; |
987 xmlSchemaValPtr value; | 988 xmlSchemaValPtr value; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1021 | 1022 |
1022 xmlSchemaAttrInfoPtr *attrInfos; | 1023 xmlSchemaAttrInfoPtr *attrInfos; |
1023 int nbAttrInfos; | 1024 int nbAttrInfos; |
1024 int sizeAttrInfos; | 1025 int sizeAttrInfos; |
1025 | 1026 |
1026 int skipDepth; | 1027 int skipDepth; |
1027 xmlSchemaItemListPtr nodeQNames; | 1028 xmlSchemaItemListPtr nodeQNames; |
1028 int hasKeyrefs; | 1029 int hasKeyrefs; |
1029 int createIDCNodeTables; | 1030 int createIDCNodeTables; |
1030 int psviExposeIDCNodeTables; | 1031 int psviExposeIDCNodeTables; |
| 1032 |
| 1033 /* Locator for error reporting in streaming mode */ |
| 1034 xmlSchemaValidityLocatorFunc locFunc; |
| 1035 void *locCtxt; |
1031 }; | 1036 }; |
1032 | 1037 |
1033 /** | 1038 /** |
1034 * xmlSchemaSubstGroup: | 1039 * xmlSchemaSubstGroup: |
1035 * | 1040 * |
1036 * | 1041 * |
1037 */ | 1042 */ |
1038 typedef struct _xmlSchemaSubstGroup xmlSchemaSubstGroup; | 1043 typedef struct _xmlSchemaSubstGroup xmlSchemaSubstGroup; |
1039 typedef xmlSchemaSubstGroup *xmlSchemaSubstGroupPtr; | 1044 typedef xmlSchemaSubstGroup *xmlSchemaSubstGroupPtr; |
1040 struct _xmlSchemaSubstGroup { | 1045 struct _xmlSchemaSubstGroup { |
1041 xmlSchemaElementPtr head; | 1046 xmlSchemaElementPtr head; |
1042 xmlSchemaItemListPtr members; | 1047 xmlSchemaItemListPtr members; |
1043 }; | 1048 }; |
1044 | 1049 |
1045 /************************************************************************ | 1050 /************************************************************************ |
1046 * » » » » » » » » » * | 1051 *» » » » » » » » » * |
1047 * » » » Some predeclarations» » » » * | 1052 *» » » Some predeclarations» » » » * |
1048 * » » » » » » » » » * | 1053 *» » » » » » » » » * |
1049 ************************************************************************/ | 1054 ************************************************************************/ |
1050 | 1055 |
1051 static int xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt, | 1056 static int xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt, |
1052 xmlSchemaPtr schema, | 1057 xmlSchemaPtr schema, |
1053 xmlNodePtr node); | 1058 xmlNodePtr node); |
1054 static int xmlSchemaParseRedefine(xmlSchemaParserCtxtPtr ctxt, | 1059 static int xmlSchemaParseRedefine(xmlSchemaParserCtxtPtr ctxt, |
1055 xmlSchemaPtr schema, | 1060 xmlSchemaPtr schema, |
1056 xmlNodePtr node); | 1061 xmlNodePtr node); |
1057 static int | 1062 static int |
1058 xmlSchemaTypeFixup(xmlSchemaTypePtr type, | 1063 xmlSchemaTypeFixup(xmlSchemaTypePtr type, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1091 xmlSchemaParserCtxtPtr ctxt); | 1096 xmlSchemaParserCtxtPtr ctxt); |
1092 static void | 1097 static void |
1093 xmlSchemaComponentListFree(xmlSchemaItemListPtr list); | 1098 xmlSchemaComponentListFree(xmlSchemaItemListPtr list); |
1094 static xmlSchemaQNameRefPtr | 1099 static xmlSchemaQNameRefPtr |
1095 xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt, | 1100 xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt, |
1096 xmlSchemaPtr schema, | 1101 xmlSchemaPtr schema, |
1097 xmlNodePtr node); | 1102 xmlNodePtr node); |
1098 | 1103 |
1099 /************************************************************************ | 1104 /************************************************************************ |
1100 * * | 1105 * * |
1101 * » » » Helper functions» » » * | 1106 *» » » Helper functions» » » * |
1102 * * | 1107 * * |
1103 ************************************************************************/ | 1108 ************************************************************************/ |
1104 | 1109 |
1105 /** | 1110 /** |
1106 * xmlSchemaItemTypeToStr: | 1111 * xmlSchemaItemTypeToStr: |
1107 * @type: the type of the schema item | 1112 * @type: the type of the schema item |
1108 * | 1113 * |
1109 * Returns the component name of a schema item. | 1114 * Returns the component name of a schema item. |
1110 */ | 1115 */ |
1111 static const xmlChar * | 1116 static const xmlChar * |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1459 return (BAD_CAST "invalid process contents"); | 1464 return (BAD_CAST "invalid process contents"); |
1460 } | 1465 } |
1461 } | 1466 } |
1462 | 1467 |
1463 /** | 1468 /** |
1464 * xmlSchemaGetCanonValueWhtspExt: | 1469 * xmlSchemaGetCanonValueWhtspExt: |
1465 * @val: the precomputed value | 1470 * @val: the precomputed value |
1466 * @retValue: the returned value | 1471 * @retValue: the returned value |
1467 * @ws: the whitespace type of the value | 1472 * @ws: the whitespace type of the value |
1468 * | 1473 * |
1469 * Get a the cononical representation of the value. | 1474 * Get a the canonical representation of the value. |
1470 * The caller has to free the returned retValue. | 1475 * The caller has to free the returned retValue. |
1471 * | 1476 * |
1472 * Returns 0 if the value could be built and -1 in case of | 1477 * Returns 0 if the value could be built and -1 in case of |
1473 * API errors or if the value type is not supported yet. | 1478 * API errors or if the value type is not supported yet. |
1474 */ | 1479 */ |
1475 static int | 1480 static int |
1476 xmlSchemaGetCanonValueWhtspExt(xmlSchemaValPtr val, | 1481 xmlSchemaGetCanonValueWhtspExt(xmlSchemaValPtr val, |
1477 xmlSchemaWhitespaceValueType ws, | 1482 xmlSchemaWhitespaceValueType ws, |
1478 xmlChar **retValue) | 1483 xmlChar **retValue) |
1479 { | 1484 { |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1829 if (found) | 1834 if (found) |
1830 break; | 1835 break; |
1831 type = type->baseType; | 1836 type = type->baseType; |
1832 } while ((type != NULL) && (type->type != XML_SCHEMA_TYPE_BASIC)); | 1837 } while ((type != NULL) && (type->type != XML_SCHEMA_TYPE_BASIC)); |
1833 | 1838 |
1834 return ((const xmlChar *) *buf); | 1839 return ((const xmlChar *) *buf); |
1835 } | 1840 } |
1836 | 1841 |
1837 /************************************************************************ | 1842 /************************************************************************ |
1838 * * | 1843 * * |
1839 * » » » Error functions»» » » * | 1844 *» » » Error functions»» » » * |
1840 * * | 1845 * * |
1841 ************************************************************************/ | 1846 ************************************************************************/ |
1842 | 1847 |
1843 #if 0 | 1848 #if 0 |
1844 static void | 1849 static void |
1845 xmlSchemaErrMemory(const char *msg) | 1850 xmlSchemaErrMemory(const char *msg) |
1846 { | 1851 { |
1847 __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, NULL, NULL, | 1852 __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, NULL, NULL, |
1848 msg); | 1853 msg); |
1849 } | 1854 } |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1967 } | 1972 } |
1968 __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP, | 1973 __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP, |
1969 error, XML_ERR_ERROR, NULL, 0, | 1974 error, XML_ERR_ERROR, NULL, 0, |
1970 (const char *) strData1, (const char *) strData2, | 1975 (const char *) strData1, (const char *) strData2, |
1971 (const char *) strData3, 0, 0, msg, str1, str2, | 1976 (const char *) strData3, 0, 0, msg, str1, str2, |
1972 str3, str4, str5); | 1977 str3, str4, str5); |
1973 } | 1978 } |
1974 | 1979 |
1975 /************************************************************************ | 1980 /************************************************************************ |
1976 * * | 1981 * * |
1977 * » » » Allround error functions» » » * | 1982 *» » » Allround error functions» » » * |
1978 * * | 1983 * * |
1979 ************************************************************************/ | 1984 ************************************************************************/ |
1980 | 1985 |
1981 /** | 1986 /** |
1982 * xmlSchemaVTypeErrMemory: | 1987 * xmlSchemaVTypeErrMemory: |
1983 * @node: a context node | 1988 * @node: a context node |
1984 * @extra: extra informations | 1989 * @extra: extra informations |
1985 * | 1990 * |
1986 * Handle an out of memory condition | 1991 * Handle an out of memory condition |
1987 */ | 1992 */ |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2027 const xmlChar *str3, const xmlChar *str4) | 2032 const xmlChar *str3, const xmlChar *str4) |
2028 { | 2033 { |
2029 xmlStructuredErrorFunc schannel = NULL; | 2034 xmlStructuredErrorFunc schannel = NULL; |
2030 xmlGenericErrorFunc channel = NULL; | 2035 xmlGenericErrorFunc channel = NULL; |
2031 void *data = NULL; | 2036 void *data = NULL; |
2032 | 2037 |
2033 if (ctxt != NULL) { | 2038 if (ctxt != NULL) { |
2034 if (ctxt->type == XML_SCHEMA_CTXT_VALIDATOR) { | 2039 if (ctxt->type == XML_SCHEMA_CTXT_VALIDATOR) { |
2035 xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctxt; | 2040 xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctxt; |
2036 const char *file = NULL; | 2041 const char *file = NULL; |
| 2042 int col = 0; |
2037 if (errorLevel != XML_ERR_WARNING) { | 2043 if (errorLevel != XML_ERR_WARNING) { |
2038 vctxt->nberrors++; | 2044 vctxt->nberrors++; |
2039 vctxt->err = error; | 2045 vctxt->err = error; |
2040 channel = vctxt->error; | 2046 channel = vctxt->error; |
2041 } else { | 2047 } else { |
2042 channel = vctxt->warning; | 2048 channel = vctxt->warning; |
2043 } | 2049 } |
2044 schannel = vctxt->serror; | 2050 schannel = vctxt->serror; |
2045 data = vctxt->errCtxt; | 2051 data = vctxt->errCtxt; |
2046 | 2052 |
2047 /* | 2053 /* |
2048 * Error node. If we specify a line number, then | 2054 * Error node. If we specify a line number, then |
2049 * do not channel any node to the error function. | 2055 * do not channel any node to the error function. |
2050 */ | 2056 */ |
2051 if (line == 0) { | 2057 if (line == 0) { |
2052 if ((node == NULL) && | 2058 if ((node == NULL) && |
2053 (vctxt->depth >= 0) && | 2059 (vctxt->depth >= 0) && |
2054 (vctxt->inode != NULL)) { | 2060 (vctxt->inode != NULL)) { |
2055 node = vctxt->inode->node; | 2061 node = vctxt->inode->node; |
2056 } | 2062 } |
2057 /* | 2063 /* |
2058 * Get filename and line if no node-tree. | 2064 * Get filename and line if no node-tree. |
2059 */ | 2065 */ |
2060 if ((node == NULL) && | 2066 if ((node == NULL) && |
2061 (vctxt->parserCtxt != NULL) && | 2067 (vctxt->parserCtxt != NULL) && |
2062 (vctxt->parserCtxt->input != NULL)) { | 2068 (vctxt->parserCtxt->input != NULL)) { |
2063 file = vctxt->parserCtxt->input->filename; | 2069 file = vctxt->parserCtxt->input->filename; |
2064 line = vctxt->parserCtxt->input->line; | 2070 line = vctxt->parserCtxt->input->line; |
| 2071 col = vctxt->parserCtxt->input->col; |
2065 } | 2072 } |
2066 } else { | 2073 } else { |
2067 /* | 2074 /* |
2068 * Override the given node's (if any) position | 2075 * Override the given node's (if any) position |
2069 * and channel only the given line number. | 2076 * and channel only the given line number. |
2070 */ | 2077 */ |
2071 node = NULL; | 2078 node = NULL; |
2072 /* | 2079 /* |
2073 * Get filename. | 2080 * Get filename. |
2074 */ | 2081 */ |
2075 if (vctxt->doc != NULL) | 2082 if (vctxt->doc != NULL) |
2076 file = (const char *) vctxt->doc->URL; | 2083 file = (const char *) vctxt->doc->URL; |
2077 else if ((vctxt->parserCtxt != NULL) && | 2084 else if ((vctxt->parserCtxt != NULL) && |
2078 (vctxt->parserCtxt->input != NULL)) | 2085 (vctxt->parserCtxt->input != NULL)) |
2079 file = vctxt->parserCtxt->input->filename; | 2086 file = vctxt->parserCtxt->input->filename; |
2080 } | 2087 } |
| 2088 if (vctxt->locFunc != NULL) { |
| 2089 if ((file == NULL) || (line == 0)) { |
| 2090 unsigned long l; |
| 2091 const char *f; |
| 2092 vctxt->locFunc(vctxt->locCtxt, &f, &l); |
| 2093 if (file == NULL) |
| 2094 file = f; |
| 2095 if (line == 0) |
| 2096 line = (int) l; |
| 2097 } |
| 2098 } |
| 2099 if ((file == NULL) && (vctxt->filename != NULL)) |
| 2100 file = vctxt->filename; |
| 2101 |
2081 __xmlRaiseError(schannel, channel, data, ctxt, | 2102 __xmlRaiseError(schannel, channel, data, ctxt, |
2082 node, XML_FROM_SCHEMASV, | 2103 node, XML_FROM_SCHEMASV, |
2083 error, errorLevel, file, line, | 2104 error, errorLevel, file, line, |
2084 (const char *) str1, (const char *) str2, | 2105 (const char *) str1, (const char *) str2, |
2085 » » (const char *) str3, 0, 0, msg, str1, str2, str3, str4); | 2106 » » (const char *) str3, 0, col, msg, str1, str2, str3, str4); |
2086 | 2107 |
2087 } else if (ctxt->type == XML_SCHEMA_CTXT_PARSER) { | 2108 } else if (ctxt->type == XML_SCHEMA_CTXT_PARSER) { |
2088 xmlSchemaParserCtxtPtr pctxt = (xmlSchemaParserCtxtPtr) ctxt; | 2109 xmlSchemaParserCtxtPtr pctxt = (xmlSchemaParserCtxtPtr) ctxt; |
2089 if (errorLevel != XML_ERR_WARNING) { | 2110 if (errorLevel != XML_ERR_WARNING) { |
2090 pctxt->nberrors++; | 2111 pctxt->nberrors++; |
2091 pctxt->err = error; | 2112 pctxt->err = error; |
2092 channel = pctxt->error; | 2113 channel = pctxt->error; |
2093 } else { | 2114 } else { |
2094 channel = pctxt->warning; | 2115 channel = pctxt->warning; |
2095 } | 2116 } |
(...skipping 1096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3192 } else { | 3213 } else { |
3193 xmlSchemaPErr2(ctxt, ownerElem, child, error, | 3214 xmlSchemaPErr2(ctxt, ownerElem, child, error, |
3194 "%s: The content is not valid.\n", | 3215 "%s: The content is not valid.\n", |
3195 BAD_CAST des, NULL); | 3216 BAD_CAST des, NULL); |
3196 } | 3217 } |
3197 } | 3218 } |
3198 FREE_AND_NULL(des) | 3219 FREE_AND_NULL(des) |
3199 } | 3220 } |
3200 | 3221 |
3201 /************************************************************************ | 3222 /************************************************************************ |
3202 * » » » » » » » » » * | 3223 *» » » » » » » » » * |
3203 * » » » Streamable error functions * | 3224 *» » » Streamable error functions * |
3204 * » » » » » » » » » * | 3225 *» » » » » » » » » * |
3205 ************************************************************************/ | 3226 ************************************************************************/ |
3206 | 3227 |
3207 | 3228 |
3208 | 3229 |
3209 | 3230 |
3210 /************************************************************************ | 3231 /************************************************************************ |
3211 * » » » » » » » » » * | 3232 *» » » » » » » » » * |
3212 * » » » Validation helper functions» » » * | 3233 *» » » Validation helper functions» » » * |
3213 * » » » » » » » » » * | 3234 *» » » » » » » » » * |
3214 ************************************************************************/ | 3235 ************************************************************************/ |
3215 | 3236 |
3216 | 3237 |
3217 /************************************************************************ | 3238 /************************************************************************ |
3218 * » » » » » » » » » * | 3239 *» » » » » » » » » * |
3219 * » » » Allocation functions» » » » * | 3240 *» » » Allocation functions» » » » * |
3220 * » » » » » » » » » * | 3241 *» » » » » » » » » * |
3221 ************************************************************************/ | 3242 ************************************************************************/ |
3222 | 3243 |
3223 /** | 3244 /** |
3224 * xmlSchemaNewSchemaForParserCtxt: | 3245 * xmlSchemaNewSchemaForParserCtxt: |
3225 * @ctxt: a schema validation context | 3246 * @ctxt: a schema validation context |
3226 * | 3247 * |
3227 * Allocate a new Schema structure. | 3248 * Allocate a new Schema structure. |
3228 * | 3249 * |
3229 * Returns the newly allocated structure or NULL in case or error | 3250 * Returns the newly allocated structure or NULL in case or error |
3230 */ | 3251 */ |
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4128 } | 4149 } |
4129 if (schema->annot != NULL) | 4150 if (schema->annot != NULL) |
4130 xmlSchemaFreeAnnot(schema->annot); | 4151 xmlSchemaFreeAnnot(schema->annot); |
4131 /* Never free the doc here, since this will be done by the buckets. */ | 4152 /* Never free the doc here, since this will be done by the buckets. */ |
4132 | 4153 |
4133 xmlDictFree(schema->dict); | 4154 xmlDictFree(schema->dict); |
4134 xmlFree(schema); | 4155 xmlFree(schema); |
4135 } | 4156 } |
4136 | 4157 |
4137 /************************************************************************ | 4158 /************************************************************************ |
4138 * » » » » » » » » » * | 4159 *» » » » » » » » » * |
4139 * » » » Debug functions»» » » » * | 4160 *» » » Debug functions»» » » » * |
4140 * » » » » » » » » » * | 4161 *» » » » » » » » » * |
4141 ************************************************************************/ | 4162 ************************************************************************/ |
4142 | 4163 |
4143 #ifdef LIBXML_OUTPUT_ENABLED | 4164 #ifdef LIBXML_OUTPUT_ENABLED |
4144 | 4165 |
4145 static void | 4166 static void |
4146 xmlSchemaTypeDump(xmlSchemaTypePtr type, FILE * output); /* forward */ | 4167 xmlSchemaTypeDump(xmlSchemaTypePtr type, FILE * output); /* forward */ |
4147 | 4168 |
4148 /** | 4169 /** |
4149 * xmlSchemaElementDump: | 4170 * xmlSchemaElementDump: |
4150 * @elem: an element | 4171 * @elem: an element |
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4580 } | 4601 } |
4581 } | 4602 } |
4582 bind = bind->next; | 4603 bind = bind->next; |
4583 } while (bind != NULL); | 4604 } while (bind != NULL); |
4584 } | 4605 } |
4585 #endif /* DEBUG_IDC */ | 4606 #endif /* DEBUG_IDC */ |
4586 #endif /* LIBXML_OUTPUT_ENABLED */ | 4607 #endif /* LIBXML_OUTPUT_ENABLED */ |
4587 | 4608 |
4588 /************************************************************************ | 4609 /************************************************************************ |
4589 * * | 4610 * * |
4590 * » » » Utilities» » » » » * | 4611 *» » » Utilities» » » » » * |
4591 * * | 4612 * * |
4592 ************************************************************************/ | 4613 ************************************************************************/ |
4593 | 4614 |
4594 /** | 4615 /** |
4595 * xmlSchemaGetPropNode: | 4616 * xmlSchemaGetPropNode: |
4596 * @node: the element node | 4617 * @node: the element node |
4597 * @name: the name of the attribute | 4618 * @name: the name of the attribute |
4598 * | 4619 * |
4599 * Seeks an attribute with a name of @name in | 4620 * Seeks an attribute with a name of @name in |
4600 * no namespace. | 4621 * no namespace. |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4685 | 4706 |
4686 val = xmlGetNoNsProp(node, BAD_CAST name); | 4707 val = xmlGetNoNsProp(node, BAD_CAST name); |
4687 if (val == NULL) | 4708 if (val == NULL) |
4688 return(NULL); | 4709 return(NULL); |
4689 ret = xmlDictLookup(ctxt->dict, val, -1); | 4710 ret = xmlDictLookup(ctxt->dict, val, -1); |
4690 xmlFree(val); | 4711 xmlFree(val); |
4691 return(ret); | 4712 return(ret); |
4692 } | 4713 } |
4693 | 4714 |
4694 /************************************************************************ | 4715 /************************************************************************ |
4695 * » » » » » » » » » * | 4716 *» » » » » » » » » * |
4696 * » » » Parsing functions» » » » * | 4717 *» » » Parsing functions» » » » * |
4697 * » » » » » » » » » * | 4718 *» » » » » » » » » * |
4698 ************************************************************************/ | 4719 ************************************************************************/ |
4699 | 4720 |
4700 #define WXS_FIND_GLOBAL_ITEM(slot) \ | 4721 #define WXS_FIND_GLOBAL_ITEM(slot) \ |
4701 if (xmlStrEqual(nsName, schema->targetNamespace)) { \ | 4722 if (xmlStrEqual(nsName, schema->targetNamespace)) { \ |
4702 ret = xmlHashLookup(schema->slot, name); \ | 4723 ret = xmlHashLookup(schema->slot, name); \ |
4703 if (ret != NULL) goto exit; \ | 4724 if (ret != NULL) goto exit; \ |
4704 } \ | 4725 } \ |
4705 if (xmlHashSize(schema->schemasImports) > 1) { \ | 4726 if (xmlHashSize(schema->schemasImports) > 1) { \ |
4706 xmlSchemaImportPtr import; \ | 4727 xmlSchemaImportPtr import; \ |
4707 if (nsName == NULL) \ | 4728 if (nsName == NULL) \ |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4959 case XML_SCHEMA_TYPE_ELEMENT: | 4980 case XML_SCHEMA_TYPE_ELEMENT: |
4960 return ((xmlSchemaBasicItemPtr) xmlSchemaGetElem(schema, | 4981 return ((xmlSchemaBasicItemPtr) xmlSchemaGetElem(schema, |
4961 name, targetNs)); | 4982 name, targetNs)); |
4962 default: | 4983 default: |
4963 TODO | 4984 TODO |
4964 return (NULL); | 4985 return (NULL); |
4965 } | 4986 } |
4966 } | 4987 } |
4967 | 4988 |
4968 /************************************************************************ | 4989 /************************************************************************ |
4969 * » » » » » » » » » * | 4990 *» » » » » » » » » * |
4970 * » » » Parsing functions» » » » * | 4991 *» » » Parsing functions» » » » * |
4971 * » » » » » » » » » * | 4992 *» » » » » » » » » * |
4972 ************************************************************************/ | 4993 ************************************************************************/ |
4973 | 4994 |
4974 #define IS_BLANK_NODE(n) \ | 4995 #define IS_BLANK_NODE(n) \ |
4975 (((n)->type == XML_TEXT_NODE) && (xmlSchemaIsBlank((n)->content, -1))) | 4996 (((n)->type == XML_TEXT_NODE) && (xmlSchemaIsBlank((n)->content, -1))) |
4976 | 4997 |
4977 /** | 4998 /** |
4978 * xmlSchemaIsBlank: | 4999 * xmlSchemaIsBlank: |
4979 * @str: a string | 5000 * @str: a string |
4980 * @len: the length of the string or -1 | 5001 * @len: the length of the string or -1 |
4981 * | 5002 * |
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5736 if (substGroup == NULL) | 5757 if (substGroup == NULL) |
5737 substGroup = xmlSchemaSubstGroupAdd(pctxt, head); | 5758 substGroup = xmlSchemaSubstGroupAdd(pctxt, head); |
5738 if (substGroup == NULL) | 5759 if (substGroup == NULL) |
5739 return(-1); | 5760 return(-1); |
5740 if (xmlSchemaItemListAdd(substGroup->members, member) == -1) | 5761 if (xmlSchemaItemListAdd(substGroup->members, member) == -1) |
5741 return(-1); | 5762 return(-1); |
5742 return(0); | 5763 return(0); |
5743 } | 5764 } |
5744 | 5765 |
5745 /************************************************************************ | 5766 /************************************************************************ |
5746 * » » » » » » » » » * | 5767 *» » » » » » » » » * |
5747 * Utilities for parsing * | 5768 * Utilities for parsing * |
5748 * » » » » » » » » » * | 5769 *» » » » » » » » » * |
5749 ************************************************************************/ | 5770 ************************************************************************/ |
5750 | 5771 |
5751 /** | 5772 /** |
5752 * xmlSchemaPValAttrNodeQNameValue: | 5773 * xmlSchemaPValAttrNodeQNameValue: |
5753 * @ctxt: a schema parser context | 5774 * @ctxt: a schema parser context |
5754 * @schema: the schema context | 5775 * @schema: the schema context |
5755 * @ownerDes: the designation of the parent element | 5776 * @ownerDes: the designation of the parent element |
5756 * @ownerItem: the parent as a schema object | 5777 * @ownerItem: the parent as a schema object |
5757 * @value: the QName value | 5778 * @value: the QName value |
5758 * @local: the resulting local part if found, the attribute value otherwise | 5779 * @local: the resulting local part if found, the attribute value otherwise |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5932 | 5953 |
5933 /* | 5954 /* |
5934 * TODO: Use xmlSchemaStrip here; it's not exported at this | 5955 * TODO: Use xmlSchemaStrip here; it's not exported at this |
5935 * moment. | 5956 * moment. |
5936 */ | 5957 */ |
5937 strip = xmlSchemaCollapseString(value); | 5958 strip = xmlSchemaCollapseString(value); |
5938 if (strip != NULL) { | 5959 if (strip != NULL) { |
5939 xmlFree((xmlChar *) value); | 5960 xmlFree((xmlChar *) value); |
5940 value = strip; | 5961 value = strip; |
5941 } | 5962 } |
5942 » res = xmlAddID(NULL, attr->doc, value, attr); | 5963 » res = xmlAddID(NULL, attr->doc, value, attr); |
5943 if (res == NULL) { | 5964 if (res == NULL) { |
5944 ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE; | 5965 ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE; |
5945 xmlSchemaPSimpleTypeErr(ctxt, | 5966 xmlSchemaPSimpleTypeErr(ctxt, |
5946 XML_SCHEMAP_S4S_ATTR_INVALID_VALUE, | 5967 XML_SCHEMAP_S4S_ATTR_INVALID_VALUE, |
5947 NULL, (xmlNodePtr) attr, | 5968 NULL, (xmlNodePtr) attr, |
5948 xmlSchemaGetBuiltInType(XML_SCHEMAS_ID), | 5969 xmlSchemaGetBuiltInType(XML_SCHEMAS_ID), |
5949 NULL, NULL, "Duplicate value '%s' of simple " | 5970 NULL, NULL, "Duplicate value '%s' of simple " |
5950 "type 'xs:ID'", value, NULL); | 5971 "type 'xs:ID'", value, NULL); |
5951 } else | 5972 } else |
5952 attr->atype = XML_ATTRIBUTE_ID; | 5973 attr->atype = XML_ATTRIBUTE_ID; |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6113 xmlSchemaPGetBoolNodeValue(xmlSchemaParserCtxtPtr ctxt, | 6134 xmlSchemaPGetBoolNodeValue(xmlSchemaParserCtxtPtr ctxt, |
6114 xmlSchemaBasicItemPtr ownerItem, | 6135 xmlSchemaBasicItemPtr ownerItem, |
6115 xmlNodePtr node) | 6136 xmlNodePtr node) |
6116 { | 6137 { |
6117 xmlChar *value = NULL; | 6138 xmlChar *value = NULL; |
6118 int res = 0; | 6139 int res = 0; |
6119 | 6140 |
6120 value = xmlNodeGetContent(node); | 6141 value = xmlNodeGetContent(node); |
6121 /* | 6142 /* |
6122 * 3.2.2.1 Lexical representation | 6143 * 3.2.2.1 Lexical representation |
6123 * An instance of a datatype that is defined as �boolean� | 6144 * An instance of a datatype that is defined as `boolean` |
6124 * can have the following legal literals {true, false, 1, 0}. | 6145 * can have the following legal literals {true, false, 1, 0}. |
6125 */ | 6146 */ |
6126 if (xmlStrEqual(BAD_CAST value, BAD_CAST "true")) | 6147 if (xmlStrEqual(BAD_CAST value, BAD_CAST "true")) |
6127 res = 1; | 6148 res = 1; |
6128 else if (xmlStrEqual(BAD_CAST value, BAD_CAST "false")) | 6149 else if (xmlStrEqual(BAD_CAST value, BAD_CAST "false")) |
6129 res = 0; | 6150 res = 0; |
6130 else if (xmlStrEqual(BAD_CAST value, BAD_CAST "1")) | 6151 else if (xmlStrEqual(BAD_CAST value, BAD_CAST "1")) |
6131 res = 1; | 6152 res = 1; |
6132 else if (xmlStrEqual(BAD_CAST value, BAD_CAST "0")) | 6153 else if (xmlStrEqual(BAD_CAST value, BAD_CAST "0")) |
6133 res = 0; | 6154 res = 0; |
(...skipping 27 matching lines...) Expand all Loading... |
6161 xmlNodePtr node, | 6182 xmlNodePtr node, |
6162 const char *name, int def) | 6183 const char *name, int def) |
6163 { | 6184 { |
6164 const xmlChar *val; | 6185 const xmlChar *val; |
6165 | 6186 |
6166 val = xmlSchemaGetProp(ctxt, node, name); | 6187 val = xmlSchemaGetProp(ctxt, node, name); |
6167 if (val == NULL) | 6188 if (val == NULL) |
6168 return (def); | 6189 return (def); |
6169 /* | 6190 /* |
6170 * 3.2.2.1 Lexical representation | 6191 * 3.2.2.1 Lexical representation |
6171 * An instance of a datatype that is defined as �boolean� | 6192 * An instance of a datatype that is defined as `boolean` |
6172 * can have the following legal literals {true, false, 1, 0}. | 6193 * can have the following legal literals {true, false, 1, 0}. |
6173 */ | 6194 */ |
6174 if (xmlStrEqual(val, BAD_CAST "true")) | 6195 if (xmlStrEqual(val, BAD_CAST "true")) |
6175 def = 1; | 6196 def = 1; |
6176 else if (xmlStrEqual(val, BAD_CAST "false")) | 6197 else if (xmlStrEqual(val, BAD_CAST "false")) |
6177 def = 0; | 6198 def = 0; |
6178 else if (xmlStrEqual(val, BAD_CAST "1")) | 6199 else if (xmlStrEqual(val, BAD_CAST "1")) |
6179 def = 1; | 6200 def = 1; |
6180 else if (xmlStrEqual(val, BAD_CAST "0")) | 6201 else if (xmlStrEqual(val, BAD_CAST "0")) |
6181 def = 0; | 6202 def = 0; |
6182 else { | 6203 else { |
6183 xmlSchemaPSimpleTypeErr(ctxt, | 6204 xmlSchemaPSimpleTypeErr(ctxt, |
6184 XML_SCHEMAP_INVALID_BOOLEAN, | 6205 XML_SCHEMAP_INVALID_BOOLEAN, |
6185 NULL, | 6206 NULL, |
6186 (xmlNodePtr) xmlSchemaGetPropNode(node, name), | 6207 (xmlNodePtr) xmlSchemaGetPropNode(node, name), |
6187 xmlSchemaGetBuiltInType(XML_SCHEMAS_BOOLEAN), | 6208 xmlSchemaGetBuiltInType(XML_SCHEMAS_BOOLEAN), |
6188 NULL, val, NULL, NULL, NULL); | 6209 NULL, val, NULL, NULL, NULL); |
6189 } | 6210 } |
6190 return (def); | 6211 return (def); |
6191 } | 6212 } |
6192 | 6213 |
6193 /************************************************************************ | 6214 /************************************************************************ |
6194 * » » » » » » » » » * | 6215 *» » » » » » » » » * |
6195 * Shema extraction from an Infoset * | 6216 * Shema extraction from an Infoset * |
6196 * » » » » » » » » » * | 6217 *» » » » » » » » » * |
6197 ************************************************************************/ | 6218 ************************************************************************/ |
6198 static xmlSchemaTypePtr xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr | 6219 static xmlSchemaTypePtr xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr |
6199 ctxt, xmlSchemaPtr schema, | 6220 ctxt, xmlSchemaPtr schema, |
6200 xmlNodePtr node, | 6221 xmlNodePtr node, |
6201 int topLevel); | 6222 int topLevel); |
6202 static xmlSchemaTypePtr xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr | 6223 static xmlSchemaTypePtr xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr |
6203 ctxt, | 6224 ctxt, |
6204 xmlSchemaPtr schema, | 6225 xmlSchemaPtr schema, |
6205 xmlNodePtr node, | 6226 xmlNodePtr node, |
6206 int topLevel); | 6227 int topLevel); |
(...skipping 1484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7691 */ | 7712 */ |
7692 if (pctxt->isRedefine && pctxt->redef && | 7713 if (pctxt->isRedefine && pctxt->redef && |
7693 (pctxt->redef->item->type == | 7714 (pctxt->redef->item->type == |
7694 XML_SCHEMA_TYPE_ATTRIBUTEGROUP) && | 7715 XML_SCHEMA_TYPE_ATTRIBUTEGROUP) && |
7695 (ref == pctxt->redef->refName) && | 7716 (ref == pctxt->redef->refName) && |
7696 (refNs == pctxt->redef->refTargetNs)) | 7717 (refNs == pctxt->redef->refTargetNs)) |
7697 { | 7718 { |
7698 /* | 7719 /* |
7699 * SPEC src-redefine: | 7720 * SPEC src-redefine: |
7700 * (7.1) "If it has an <attributeGroup> among its contents | 7721 * (7.1) "If it has an <attributeGroup> among its contents |
7701 » * the �actual value� of whose ref [attribute] is the same | 7722 » * the `actual value` of whose ref [attribute] is the same |
7702 » * as the �actual value� of its own name attribute plus | 7723 » * as the `actual value` of its own name attribute plus |
7703 * target namespace, then it must have exactly one such group." | 7724 * target namespace, then it must have exactly one such group." |
7704 */ | 7725 */ |
7705 if (pctxt->redefCounter != 0) { | 7726 if (pctxt->redefCounter != 0) { |
7706 xmlChar *str = NULL; | 7727 xmlChar *str = NULL; |
7707 | 7728 |
7708 xmlSchemaCustomErr(ACTXT_CAST pctxt, | 7729 xmlSchemaCustomErr(ACTXT_CAST pctxt, |
7709 XML_SCHEMAP_SRC_REDEFINE, node, NULL, | 7730 XML_SCHEMAP_SRC_REDEFINE, node, NULL, |
7710 "The redefining attribute group definition " | 7731 "The redefining attribute group definition " |
7711 "'%s' must not contain more than one " | 7732 "'%s' must not contain more than one " |
7712 "reference to the redefined definition", | 7733 "reference to the redefined definition", |
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8220 "allocating a 'selector' of an identity-constraint definition", | 8241 "allocating a 'selector' of an identity-constraint definition", |
8221 NULL); | 8242 NULL); |
8222 return (NULL); | 8243 return (NULL); |
8223 } | 8244 } |
8224 memset(item, 0, sizeof(xmlSchemaIDCSelect)); | 8245 memset(item, 0, sizeof(xmlSchemaIDCSelect)); |
8225 /* | 8246 /* |
8226 * Attribute "xpath" (mandatory). | 8247 * Attribute "xpath" (mandatory). |
8227 */ | 8248 */ |
8228 attr = xmlSchemaGetPropNode(node, "xpath"); | 8249 attr = xmlSchemaGetPropNode(node, "xpath"); |
8229 if (attr == NULL) { | 8250 if (attr == NULL) { |
8230 » xmlSchemaPMissingAttrErr(ctxt, | 8251 » xmlSchemaPMissingAttrErr(ctxt, |
8231 XML_SCHEMAP_S4S_ATTR_MISSING, | 8252 XML_SCHEMAP_S4S_ATTR_MISSING, |
8232 NULL, node, | 8253 NULL, node, |
8233 "name", NULL); | 8254 "name", NULL); |
8234 } else { | 8255 } else { |
8235 item->xpath = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr); | 8256 item->xpath = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr); |
8236 /* | 8257 /* |
8237 * URGENT TODO: "field"s have an other syntax than "selector"s. | 8258 * URGENT TODO: "field"s have an other syntax than "selector"s. |
8238 */ | 8259 */ |
8239 | 8260 |
8240 if (xmlSchemaCheckCSelectorXPath(ctxt, idc, item, attr, | 8261 if (xmlSchemaCheckCSelectorXPath(ctxt, idc, item, attr, |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8841 if ((ctxt == NULL) || (schema == NULL) || (node == NULL)) | 8862 if ((ctxt == NULL) || (schema == NULL) || (node == NULL)) |
8842 return (-1); | 8863 return (-1); |
8843 /* Not a component, don't create it. */ | 8864 /* Not a component, don't create it. */ |
8844 type = ctxt->ctxtType; | 8865 type = ctxt->ctxtType; |
8845 /* | 8866 /* |
8846 * Mark the simple type as being of variety "union". | 8867 * Mark the simple type as being of variety "union". |
8847 */ | 8868 */ |
8848 type->flags |= XML_SCHEMAS_TYPE_VARIETY_UNION; | 8869 type->flags |= XML_SCHEMAS_TYPE_VARIETY_UNION; |
8849 /* | 8870 /* |
8850 * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen, | 8871 * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen, |
8851 * then the �simple ur-type definition�." | 8872 * then the `simple ur-type definition`." |
8852 */ | 8873 */ |
8853 type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE); | 8874 type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE); |
8854 /* | 8875 /* |
8855 * Check for illegal attributes. | 8876 * Check for illegal attributes. |
8856 */ | 8877 */ |
8857 attr = node->properties; | 8878 attr = node->properties; |
8858 while (attr != NULL) { | 8879 while (attr != NULL) { |
8859 if (attr->ns == NULL) { | 8880 if (attr->ns == NULL) { |
8860 if ((!xmlStrEqual(attr->name, BAD_CAST "id")) && | 8881 if ((!xmlStrEqual(attr->name, BAD_CAST "id")) && |
8861 (!xmlStrEqual(attr->name, BAD_CAST "memberTypes"))) { | 8882 (!xmlStrEqual(attr->name, BAD_CAST "memberTypes"))) { |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9009 if ((ctxt == NULL) || (schema == NULL) || (node == NULL)) | 9030 if ((ctxt == NULL) || (schema == NULL) || (node == NULL)) |
9010 return (NULL); | 9031 return (NULL); |
9011 /* Not a component, don't create it. */ | 9032 /* Not a component, don't create it. */ |
9012 type = ctxt->ctxtType; | 9033 type = ctxt->ctxtType; |
9013 /* | 9034 /* |
9014 * Mark the type as being of variety "list". | 9035 * Mark the type as being of variety "list". |
9015 */ | 9036 */ |
9016 type->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST; | 9037 type->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST; |
9017 /* | 9038 /* |
9018 * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen, | 9039 * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen, |
9019 * then the �simple ur-type definition�." | 9040 * then the `simple ur-type definition`." |
9020 */ | 9041 */ |
9021 type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE); | 9042 type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE); |
9022 /* | 9043 /* |
9023 * Check for illegal attributes. | 9044 * Check for illegal attributes. |
9024 */ | 9045 */ |
9025 attr = node->properties; | 9046 attr = node->properties; |
9026 while (attr != NULL) { | 9047 while (attr != NULL) { |
9027 if (attr->ns == NULL) { | 9048 if (attr->ns == NULL) { |
9028 if ((!xmlStrEqual(attr->name, BAD_CAST "id")) && | 9049 if ((!xmlStrEqual(attr->name, BAD_CAST "id")) && |
9029 (!xmlStrEqual(attr->name, BAD_CAST "itemType"))) { | 9050 (!xmlStrEqual(attr->name, BAD_CAST "itemType"))) { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9154 return(NULL); | 9175 return(NULL); |
9155 } | 9176 } |
9156 biType = xmlSchemaGetPredefinedType(attrValue, xmlSchemaNs); | 9177 biType = xmlSchemaGetPredefinedType(attrValue, xmlSchemaNs); |
9157 if (biType != NULL) | 9178 if (biType != NULL) |
9158 return (biType); | 9179 return (biType); |
9159 } | 9180 } |
9160 } | 9181 } |
9161 } | 9182 } |
9162 /* | 9183 /* |
9163 * TargetNamespace: | 9184 * TargetNamespace: |
9164 * SPEC "The �actual value� of the targetNamespace [attribute] | 9185 * SPEC "The `actual value` of the targetNamespace [attribute] |
9165 * of the <schema> ancestor element information item if present, | 9186 * of the <schema> ancestor element information item if present, |
9166 * otherwise �absent�. | 9187 * otherwise `absent`. |
9167 */ | 9188 */ |
9168 if (topLevel == 0) { | 9189 if (topLevel == 0) { |
9169 #ifdef ENABLE_NAMED_LOCALS | 9190 #ifdef ENABLE_NAMED_LOCALS |
9170 char buf[40]; | 9191 char buf[40]; |
9171 #endif | 9192 #endif |
9172 /* | 9193 /* |
9173 * Parse as local simple type definition. | 9194 * Parse as local simple type definition. |
9174 */ | 9195 */ |
9175 #ifdef ENABLE_NAMED_LOCALS | 9196 #ifdef ENABLE_NAMED_LOCALS |
9176 snprintf(buf, 39, "#ST%d", ctxt->counter++ + 1); | 9197 snprintf(buf, 39, "#ST%d", ctxt->counter++ + 1); |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9291 child = child->next; | 9312 child = child->next; |
9292 } | 9313 } |
9293 if (child != NULL) { | 9314 if (child != NULL) { |
9294 xmlSchemaPContentErr(ctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED, | 9315 xmlSchemaPContentErr(ctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED, |
9295 NULL, node, child, NULL, | 9316 NULL, node, child, NULL, |
9296 "(annotation?, (restriction | list | union))"); | 9317 "(annotation?, (restriction | list | union))"); |
9297 } | 9318 } |
9298 /* | 9319 /* |
9299 * REDEFINE: SPEC src-redefine (5) | 9320 * REDEFINE: SPEC src-redefine (5) |
9300 * "Within the [children], each <simpleType> must have a | 9321 * "Within the [children], each <simpleType> must have a |
9301 * <restriction> among its [children] ... the �actual value� of whose | 9322 * <restriction> among its [children] ... the `actual value` of whose |
9302 * base [attribute] must be the same as the �actual value� of its own | 9323 * base [attribute] must be the same as the `actual value` of its own |
9303 * name attribute plus target namespace;" | 9324 * name attribute plus target namespace;" |
9304 */ | 9325 */ |
9305 if (topLevel && ctxt->isRedefine && (! hasRestriction)) { | 9326 if (topLevel && ctxt->isRedefine && (! hasRestriction)) { |
9306 xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE, | 9327 xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE, |
9307 NULL, node, "This is a redefinition, thus the " | 9328 NULL, node, "This is a redefinition, thus the " |
9308 "<simpleType> must have a <restriction> child", NULL); | 9329 "<simpleType> must have a <restriction> child", NULL); |
9309 } | 9330 } |
9310 | 9331 |
9311 ctxt->ctxtType = oldCtxtType; | 9332 ctxt->ctxtType = oldCtxtType; |
9312 return (type); | 9333 return (type); |
(...skipping 1063 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10376 schemaLocation, NULL); | 10397 schemaLocation, NULL); |
10377 goto exit; | 10398 goto exit; |
10378 } | 10399 } |
10379 } | 10400 } |
10380 } | 10401 } |
10381 | 10402 |
10382 if (WXS_IS_BUCKET_IMPMAIN(type)) { | 10403 if (WXS_IS_BUCKET_IMPMAIN(type)) { |
10383 /* | 10404 /* |
10384 * Given that the schemaLocation [attribute] is only a hint, it is open | 10405 * Given that the schemaLocation [attribute] is only a hint, it is open |
10385 * to applications to ignore all but the first <import> for a given | 10406 * to applications to ignore all but the first <import> for a given |
10386 » * namespace, regardless of the �actual value� of schemaLocation, but | 10407 » * namespace, regardless of the `actual value` of schemaLocation, but |
10387 * such a strategy risks missing useful information when new | 10408 * such a strategy risks missing useful information when new |
10388 * schemaLocations are offered. | 10409 * schemaLocations are offered. |
10389 * | 10410 * |
10390 * We will use the first <import> that comes with a location. | 10411 * We will use the first <import> that comes with a location. |
10391 * Further <import>s *with* a location, will result in an error. | 10412 * Further <import>s *with* a location, will result in an error. |
10392 * TODO: Better would be to just report a warning here, but | 10413 * TODO: Better would be to just report a warning here, but |
10393 * we'll try it this way until someone complains. | 10414 * we'll try it this way until someone complains. |
10394 * | 10415 * |
10395 * Schema Document Location Strategy: | 10416 * Schema Document Location Strategy: |
10396 * 3 Based on the namespace name, identify an existing schema document, | 10417 * 3 Based on the namespace name, identify an existing schema document, |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10729 return (pctxt->err); | 10750 return (pctxt->err); |
10730 } | 10751 } |
10731 | 10752 |
10732 if (xmlSchemaPValAttr(pctxt, NULL, node, | 10753 if (xmlSchemaPValAttr(pctxt, NULL, node, |
10733 "schemaLocation", xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI), | 10754 "schemaLocation", xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI), |
10734 &schemaLocation) != 0) { | 10755 &schemaLocation) != 0) { |
10735 xmlSchemaPSimpleTypeErr(pctxt, | 10756 xmlSchemaPSimpleTypeErr(pctxt, |
10736 XML_SCHEMAP_S4S_ATTR_INVALID_VALUE, | 10757 XML_SCHEMAP_S4S_ATTR_INVALID_VALUE, |
10737 NULL, node, | 10758 NULL, node, |
10738 xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI), | 10759 xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI), |
10739 » NULL, namespaceName, NULL, NULL, NULL); | 10760 » NULL, schemaLocation, NULL, NULL, NULL); |
10740 return (pctxt->err); | 10761 return (pctxt->err); |
10741 } | 10762 } |
10742 /* | 10763 /* |
10743 * And now for the children... | 10764 * And now for the children... |
10744 */ | 10765 */ |
10745 child = node->children; | 10766 child = node->children; |
10746 if (IS_SCHEMA(child, "annotation")) { | 10767 if (IS_SCHEMA(child, "annotation")) { |
10747 /* | 10768 /* |
10748 * the annotation here is simply discarded ... | 10769 * the annotation here is simply discarded ... |
10749 * TODO: really? | 10770 * TODO: really? |
(...skipping 10 matching lines...) Expand all Loading... |
10760 * Apply additional constraints. | 10781 * Apply additional constraints. |
10761 * | 10782 * |
10762 * Note that it is important to use the original @targetNamespace | 10783 * Note that it is important to use the original @targetNamespace |
10763 * (or none at all), to rule out imports of schemas _with_ a | 10784 * (or none at all), to rule out imports of schemas _with_ a |
10764 * @targetNamespace if the importing schema is a chameleon schema | 10785 * @targetNamespace if the importing schema is a chameleon schema |
10765 * (with no @targetNamespace). | 10786 * (with no @targetNamespace). |
10766 */ | 10787 */ |
10767 thisTargetNamespace = WXS_BUCKET(pctxt)->origTargetNamespace; | 10788 thisTargetNamespace = WXS_BUCKET(pctxt)->origTargetNamespace; |
10768 if (namespaceName != NULL) { | 10789 if (namespaceName != NULL) { |
10769 /* | 10790 /* |
10770 » * 1.1 If the namespace [attribute] is present, then its �actual value� | 10791 » * 1.1 If the namespace [attribute] is present, then its `actual value` |
10771 » * must not match the �actual value� of the enclosing <schema>'s | 10792 » * must not match the `actual value` of the enclosing <schema>'s |
10772 * targetNamespace [attribute]. | 10793 * targetNamespace [attribute]. |
10773 */ | 10794 */ |
10774 if (xmlStrEqual(thisTargetNamespace, namespaceName)) { | 10795 if (xmlStrEqual(thisTargetNamespace, namespaceName)) { |
10775 xmlSchemaPCustomErr(pctxt, | 10796 xmlSchemaPCustomErr(pctxt, |
10776 XML_SCHEMAP_SRC_IMPORT_1_1, | 10797 XML_SCHEMAP_SRC_IMPORT_1_1, |
10777 NULL, node, | 10798 NULL, node, |
10778 "The value of the attribute 'namespace' must not match " | 10799 "The value of the attribute 'namespace' must not match " |
10779 "the target namespace '%s' of the importing schema", | 10800 "the target namespace '%s' of the importing schema", |
10780 thisTargetNamespace); | 10801 thisTargetNamespace); |
10781 return (pctxt->err); | 10802 return (pctxt->err); |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10962 * a schema document. | 10983 * a schema document. |
10963 */ | 10984 */ |
10964 if ((bucket == NULL) || (bucket->doc == NULL)) { | 10985 if ((bucket == NULL) || (bucket->doc == NULL)) { |
10965 if (type == XML_SCHEMA_SCHEMA_INCLUDE) { | 10986 if (type == XML_SCHEMA_SCHEMA_INCLUDE) { |
10966 /* | 10987 /* |
10967 * WARNING for <include>: | 10988 * WARNING for <include>: |
10968 * We will raise an error if the schema cannot be located | 10989 * We will raise an error if the schema cannot be located |
10969 * for inclusions, since the that was the feedback from the | 10990 * for inclusions, since the that was the feedback from the |
10970 * schema people. I.e. the following spec piece will *not* be | 10991 * schema people. I.e. the following spec piece will *not* be |
10971 * satisfied: | 10992 * satisfied: |
10972 » * SPEC src-include: "It is not an error for the �actual value� of th
e | 10993 » * SPEC src-include: "It is not an error for the `actual value` of th
e |
10973 * schemaLocation [attribute] to fail to resolve it all, in which | 10994 * schemaLocation [attribute] to fail to resolve it all, in which |
10974 * case no corresponding inclusion is performed. | 10995 * case no corresponding inclusion is performed. |
10975 * So do we need a warning report here?" | 10996 * So do we need a warning report here?" |
10976 */ | 10997 */ |
10977 res = XML_SCHEMAP_SRC_INCLUDE; | 10998 res = XML_SCHEMAP_SRC_INCLUDE; |
10978 xmlSchemaCustomErr(ACTXT_CAST pctxt, res, | 10999 xmlSchemaCustomErr(ACTXT_CAST pctxt, res, |
10979 node, NULL, | 11000 node, NULL, |
10980 "Failed to load the document '%s' for inclusion", | 11001 "Failed to load the document '%s' for inclusion", |
10981 schemaLocation, NULL); | 11002 schemaLocation, NULL); |
10982 } else { | 11003 } else { |
10983 /* | 11004 /* |
10984 * NOTE: This was changed to raise an error even if no redefinitions | 11005 * NOTE: This was changed to raise an error even if no redefinitions |
10985 * are specified. | 11006 * are specified. |
10986 * | 11007 * |
10987 * SPEC src-redefine (1) | 11008 * SPEC src-redefine (1) |
10988 * "If there are any element information items among the [children] | 11009 * "If there are any element information items among the [children] |
10989 » * other than <annotation> then the �actual value� of the | 11010 » * other than <annotation> then the `actual value` of the |
10990 * schemaLocation [attribute] must successfully resolve." | 11011 * schemaLocation [attribute] must successfully resolve." |
10991 * TODO: Ask the WG if a the location has always to resolve | 11012 * TODO: Ask the WG if a the location has always to resolve |
10992 * here as well! | 11013 * here as well! |
10993 */ | 11014 */ |
10994 res = XML_SCHEMAP_SRC_REDEFINE; | 11015 res = XML_SCHEMAP_SRC_REDEFINE; |
10995 xmlSchemaCustomErr(ACTXT_CAST pctxt, res, | 11016 xmlSchemaCustomErr(ACTXT_CAST pctxt, res, |
10996 node, NULL, | 11017 node, NULL, |
10997 "Failed to load the document '%s' for redefinition", | 11018 "Failed to load the document '%s' for redefinition", |
10998 schemaLocation, NULL); | 11019 schemaLocation, NULL); |
10999 } | 11020 } |
11000 } else { | 11021 } else { |
11001 /* | 11022 /* |
11002 * Check targetNamespace sanity before parsing the new schema. | 11023 * Check targetNamespace sanity before parsing the new schema. |
11003 * TODO: Note that we won't check further content if the | 11024 * TODO: Note that we won't check further content if the |
11004 * targetNamespace was bad. | 11025 * targetNamespace was bad. |
11005 */ | 11026 */ |
11006 if (bucket->origTargetNamespace != NULL) { | 11027 if (bucket->origTargetNamespace != NULL) { |
11007 /* | 11028 /* |
11008 * SPEC src-include (2.1) | 11029 * SPEC src-include (2.1) |
11009 » * "SII has a targetNamespace [attribute], and its �actual | 11030 » * "SII has a targetNamespace [attribute], and its `actual |
11010 » * value� is identical to the �actual value� of the targetNamespace | 11031 » * value` is identical to the `actual value` of the targetNamespace |
11011 » * [attribute] of SII� (which must have such an [attribute])." | 11032 » * [attribute] of SII' (which must have such an [attribute])." |
11012 */ | 11033 */ |
11013 if (pctxt->targetNamespace == NULL) { | 11034 if (pctxt->targetNamespace == NULL) { |
11014 xmlSchemaCustomErr(ACTXT_CAST pctxt, | 11035 xmlSchemaCustomErr(ACTXT_CAST pctxt, |
11015 XML_SCHEMAP_SRC_INCLUDE, | 11036 XML_SCHEMAP_SRC_INCLUDE, |
11016 node, NULL, | 11037 node, NULL, |
11017 "The target namespace of the included/redefined schema " | 11038 "The target namespace of the included/redefined schema " |
11018 "'%s' has to be absent, since the including/redefining " | 11039 "'%s' has to be absent, since the including/redefining " |
11019 "schema has no target namespace", | 11040 "schema has no target namespace", |
11020 schemaLocation, NULL); | 11041 schemaLocation, NULL); |
11021 goto exit_error; | 11042 goto exit_error; |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11349 part && part->children) | 11370 part && part->children) |
11350 { | 11371 { |
11351 if ((xmlSchemaGetQNameRefName(part->children) == | 11372 if ((xmlSchemaGetQNameRefName(part->children) == |
11352 ctxt->redef->refName) && | 11373 ctxt->redef->refName) && |
11353 (xmlSchemaGetQNameRefTargetNs(part->children) == | 11374 (xmlSchemaGetQNameRefTargetNs(part->children) == |
11354 ctxt->redef->refTargetNs)) | 11375 ctxt->redef->refTargetNs)) |
11355 { | 11376 { |
11356 /* | 11377 /* |
11357 * SPEC src-redefine: | 11378 * SPEC src-redefine: |
11358 * (6.1) "If it has a <group> among its contents at | 11379 * (6.1) "If it has a <group> among its contents at |
11359 » » » * some level the �actual value� of whose ref | 11380 » » » * some level the `actual value` of whose ref |
11360 » » » * [attribute] is the same as the �actual value� of | 11381 » » » * [attribute] is the same as the `actual value` of |
11361 * its own name attribute plus target namespace, then | 11382 * its own name attribute plus target namespace, then |
11362 * all of the following must be true:" | 11383 * all of the following must be true:" |
11363 * (6.1.1) "It must have exactly one such group." | 11384 * (6.1.1) "It must have exactly one such group." |
11364 */ | 11385 */ |
11365 if (ctxt->redefCounter != 0) { | 11386 if (ctxt->redefCounter != 0) { |
11366 xmlChar *str = NULL; | 11387 xmlChar *str = NULL; |
11367 | 11388 |
11368 xmlSchemaCustomErr(ACTXT_CAST ctxt, | 11389 xmlSchemaCustomErr(ACTXT_CAST ctxt, |
11369 XML_SCHEMAP_SRC_REDEFINE, child, NULL, | 11390 XML_SCHEMAP_SRC_REDEFINE, child, NULL, |
11370 "The redefining model group definition " | 11391 "The redefining model group definition " |
11371 "'%s' must not contain more than one " | 11392 "'%s' must not contain more than one " |
11372 "reference to the redefined definition", | 11393 "reference to the redefined definition", |
11373 xmlSchemaFormatQName(&str, | 11394 xmlSchemaFormatQName(&str, |
11374 ctxt->redef->refTargetNs, | 11395 ctxt->redef->refTargetNs, |
11375 ctxt->redef->refName), | 11396 ctxt->redef->refName), |
11376 NULL); | 11397 NULL); |
11377 FREE_AND_NULL(str) | 11398 FREE_AND_NULL(str) |
11378 part = NULL; | 11399 part = NULL; |
11379 } else if (((WXS_PARTICLE(part))->minOccurs != 1) || | 11400 } else if (((WXS_PARTICLE(part))->minOccurs != 1) || |
11380 ((WXS_PARTICLE(part))->maxOccurs != 1)) | 11401 ((WXS_PARTICLE(part))->maxOccurs != 1)) |
11381 { | 11402 { |
11382 xmlChar *str = NULL; | 11403 xmlChar *str = NULL; |
11383 /* | 11404 /* |
11384 * SPEC src-redefine: | 11405 * SPEC src-redefine: |
11385 » » » * (6.1.2) "The �actual value� of both that | 11406 » » » * (6.1.2) "The `actual value` of both that |
11386 * group's minOccurs and maxOccurs [attribute] | 11407 * group's minOccurs and maxOccurs [attribute] |
11387 » » » * must be 1 (or �absent�). | 11408 » » » * must be 1 (or `absent`). |
11388 */ | 11409 */ |
11389 xmlSchemaCustomErr(ACTXT_CAST ctxt, | 11410 xmlSchemaCustomErr(ACTXT_CAST ctxt, |
11390 XML_SCHEMAP_SRC_REDEFINE, child, NULL, | 11411 XML_SCHEMAP_SRC_REDEFINE, child, NULL, |
11391 "The redefining model group definition " | 11412 "The redefining model group definition " |
11392 "'%s' must not contain a reference to the " | 11413 "'%s' must not contain a reference to the " |
11393 "redefined definition with a " | 11414 "redefined definition with a " |
11394 "maxOccurs/minOccurs other than 1", | 11415 "maxOccurs/minOccurs other than 1", |
11395 xmlSchemaFormatQName(&str, | 11416 xmlSchemaFormatQName(&str, |
11396 ctxt->redef->refTargetNs, | 11417 ctxt->redef->refTargetNs, |
11397 ctxt->redef->refName), | 11418 ctxt->redef->refName), |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11491 xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id"); | 11512 xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id"); |
11492 /* | 11513 /* |
11493 * Attribute | 11514 * Attribute |
11494 */ | 11515 */ |
11495 /* | 11516 /* |
11496 * Extract the base type. The "base" attribute is mandatory if inside | 11517 * Extract the base type. The "base" attribute is mandatory if inside |
11497 * a complex type or if redefining. | 11518 * a complex type or if redefining. |
11498 * | 11519 * |
11499 * SPEC (1.2) "...otherwise (<restriction> has no <simpleType> " | 11520 * SPEC (1.2) "...otherwise (<restriction> has no <simpleType> " |
11500 * among its [children]), the simple type definition which is | 11521 * among its [children]), the simple type definition which is |
11501 * the {content type} of the type definition �resolved� to by | 11522 * the {content type} of the type definition `resolved` to by |
11502 * the �actual value� of the base [attribute]" | 11523 * the `actual value` of the base [attribute]" |
11503 */ | 11524 */ |
11504 if (xmlSchemaPValAttrQName(ctxt, schema, NULL, node, "base", | 11525 if (xmlSchemaPValAttrQName(ctxt, schema, NULL, node, "base", |
11505 &(type->baseNs), &(type->base)) == 0) | 11526 &(type->baseNs), &(type->base)) == 0) |
11506 { | 11527 { |
11507 if ((type->base == NULL) && (type->type == XML_SCHEMA_TYPE_COMPLEX)) { | 11528 if ((type->base == NULL) && (type->type == XML_SCHEMA_TYPE_COMPLEX)) { |
11508 xmlSchemaPMissingAttrErr(ctxt, | 11529 xmlSchemaPMissingAttrErr(ctxt, |
11509 XML_SCHEMAP_S4S_ATTR_MISSING, | 11530 XML_SCHEMAP_S4S_ATTR_MISSING, |
11510 NULL, node, "base", NULL); | 11531 NULL, node, "base", NULL); |
11511 } else if ((ctxt->isRedefine) && | 11532 } else if ((ctxt->isRedefine) && |
11512 (type->flags & XML_SCHEMAS_TYPE_GLOBAL)) | 11533 (type->flags & XML_SCHEMAS_TYPE_GLOBAL)) |
11513 { | 11534 { |
11514 if (type->base == NULL) { | 11535 if (type->base == NULL) { |
11515 xmlSchemaPMissingAttrErr(ctxt, | 11536 xmlSchemaPMissingAttrErr(ctxt, |
11516 XML_SCHEMAP_S4S_ATTR_MISSING, | 11537 XML_SCHEMAP_S4S_ATTR_MISSING, |
11517 NULL, node, "base", NULL); | 11538 NULL, node, "base", NULL); |
11518 } else if ((! xmlStrEqual(type->base, type->name)) || | 11539 } else if ((! xmlStrEqual(type->base, type->name)) || |
11519 (! xmlStrEqual(type->baseNs, type->targetNamespace))) | 11540 (! xmlStrEqual(type->baseNs, type->targetNamespace))) |
11520 { | 11541 { |
11521 xmlChar *str1 = NULL, *str2 = NULL; | 11542 xmlChar *str1 = NULL, *str2 = NULL; |
11522 /* | 11543 /* |
11523 * REDEFINE: SPEC src-redefine (5) | 11544 * REDEFINE: SPEC src-redefine (5) |
11524 * "Within the [children], each <simpleType> must have a | 11545 * "Within the [children], each <simpleType> must have a |
11525 » » * <restriction> among its [children] ... the �actual value� of | 11546 » » * <restriction> among its [children] ... the `actual value` of |
11526 » » * whose base [attribute] must be the same as the �actual value� | 11547 » » * whose base [attribute] must be the same as the `actual value` |
11527 * of its own name attribute plus target namespace;" | 11548 * of its own name attribute plus target namespace;" |
11528 */ | 11549 */ |
11529 xmlSchemaPCustomErrExt(ctxt, XML_SCHEMAP_SRC_REDEFINE, | 11550 xmlSchemaPCustomErrExt(ctxt, XML_SCHEMAP_SRC_REDEFINE, |
11530 NULL, node, "This is a redefinition, but the QName " | 11551 NULL, node, "This is a redefinition, but the QName " |
11531 "value '%s' of the 'base' attribute does not match the " | 11552 "value '%s' of the 'base' attribute does not match the " |
11532 "type's designation '%s'", | 11553 "type's designation '%s'", |
11533 xmlSchemaFormatQName(&str1, type->baseNs, type->base), | 11554 xmlSchemaFormatQName(&str1, type->baseNs, type->base), |
11534 xmlSchemaFormatQName(&str2, type->targetNamespace, | 11555 xmlSchemaFormatQName(&str2, type->targetNamespace, |
11535 type->name), NULL); | 11556 type->name), NULL); |
11536 FREE_AND_NULL(str1); | 11557 FREE_AND_NULL(str1); |
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12277 xmlSchemaParseComplexContent(ctxt, schema, child, | 12298 xmlSchemaParseComplexContent(ctxt, schema, child, |
12278 &hasRestrictionOrExtension); | 12299 &hasRestrictionOrExtension); |
12279 child = child->next; | 12300 child = child->next; |
12280 } else { | 12301 } else { |
12281 /* | 12302 /* |
12282 * E.g <complexType><sequence>... or <complexType><attribute>... etc. | 12303 * E.g <complexType><sequence>... or <complexType><attribute>... etc. |
12283 * | 12304 * |
12284 * SPEC | 12305 * SPEC |
12285 * "...the third alternative (neither <simpleContent> nor | 12306 * "...the third alternative (neither <simpleContent> nor |
12286 * <complexContent>) is chosen. This case is understood as shorthand | 12307 * <complexContent>) is chosen. This case is understood as shorthand |
12287 » * for complex content restricting the �ur-type definition�, and the | 12308 » * for complex content restricting the `ur-type definition`, and the |
12288 * details of the mappings should be modified as necessary. | 12309 * details of the mappings should be modified as necessary. |
12289 */ | 12310 */ |
12290 type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE); | 12311 type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE); |
12291 type->flags |= XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION; | 12312 type->flags |= XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION; |
12292 /* | 12313 /* |
12293 * Parse model groups. | 12314 * Parse model groups. |
12294 */ | 12315 */ |
12295 if (IS_SCHEMA(child, "all")) { | 12316 if (IS_SCHEMA(child, "all")) { |
12296 type->subtypes = (xmlSchemaTypePtr) | 12317 type->subtypes = (xmlSchemaTypePtr) |
12297 xmlSchemaParseModelGroup(ctxt, schema, child, | 12318 xmlSchemaParseModelGroup(ctxt, schema, child, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12346 xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE, | 12367 xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE, |
12347 NULL, node, "This is a redefinition, thus the " | 12368 NULL, node, "This is a redefinition, thus the " |
12348 "<complexType> must have a <restriction> or <extension> " | 12369 "<complexType> must have a <restriction> or <extension> " |
12349 "grand-child", NULL); | 12370 "grand-child", NULL); |
12350 } | 12371 } |
12351 ctxt->ctxtType = ctxtType; | 12372 ctxt->ctxtType = ctxtType; |
12352 return (type); | 12373 return (type); |
12353 } | 12374 } |
12354 | 12375 |
12355 /************************************************************************ | 12376 /************************************************************************ |
12356 * » » » » » » » » » * | 12377 *» » » » » » » » » * |
12357 * » » » Validating using Schemas» » » * | 12378 *» » » Validating using Schemas» » » * |
12358 * » » » » » » » » » * | 12379 *» » » » » » » » » * |
12359 ************************************************************************/ | 12380 ************************************************************************/ |
12360 | 12381 |
12361 /************************************************************************ | 12382 /************************************************************************ |
12362 * » » » » » » » » » * | 12383 *» » » » » » » » » * |
12363 * » » » Reading/Writing Schemas»» » » * | 12384 *» » » Reading/Writing Schemas»» » » * |
12364 * » » » » » » » » » * | 12385 *» » » » » » » » » * |
12365 ************************************************************************/ | 12386 ************************************************************************/ |
12366 | 12387 |
12367 #if 0 /* Will be enabled if it is clear what options are needed. */ | 12388 #if 0 /* Will be enabled if it is clear what options are needed. */ |
12368 /** | 12389 /** |
12369 * xmlSchemaParserCtxtSetOptions: | 12390 * xmlSchemaParserCtxtSetOptions: |
12370 * @ctxt: a schema parser context | 12391 * @ctxt: a schema parser context |
12371 * @options: a combination of xmlSchemaParserOption | 12392 * @options: a combination of xmlSchemaParserOption |
12372 * | 12393 * |
12373 * Sets the options to be used during the parse. | 12394 * Sets the options to be used during the parse. |
12374 * | 12395 * |
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12931 ret = 1; | 12952 ret = 1; |
12932 } | 12953 } |
12933 } else { | 12954 } else { |
12934 sub = particle->children->children; | 12955 sub = particle->children->children; |
12935 while (sub != NULL) { | 12956 while (sub != NULL) { |
12936 tmp2 = xmlSchemaBuildAContentModel(pctxt, | 12957 tmp2 = xmlSchemaBuildAContentModel(pctxt, |
12937 (xmlSchemaParticlePtr) sub); | 12958 (xmlSchemaParticlePtr) sub); |
12938 if (tmp2 != 1) ret = 0; | 12959 if (tmp2 != 1) ret = 0; |
12939 sub = sub->next; | 12960 sub = sub->next; |
12940 } | 12961 } |
| 12962 |
| 12963 /* |
| 12964 * epsilon needed to block previous trans from |
| 12965 * being allowed to enter back from another |
| 12966 * construct |
| 12967 */ |
| 12968 pctxt->state = xmlAutomataNewEpsilon(pctxt->am, |
| 12969 pctxt->state, NULL); |
| 12970 |
12941 if (particle->minOccurs == 0) { | 12971 if (particle->minOccurs == 0) { |
12942 xmlAutomataNewEpsilon(pctxt->am, oldstate, | 12972 xmlAutomataNewEpsilon(pctxt->am, oldstate, |
12943 pctxt->state); | 12973 pctxt->state); |
12944 ret = 1; | 12974 ret = 1; |
12945 } | 12975 } |
12946 } | 12976 } |
12947 } | 12977 } |
12948 break; | 12978 break; |
12949 } | 12979 } |
12950 case XML_SCHEMA_TYPE_CHOICE:{ | 12980 case XML_SCHEMA_TYPE_CHOICE:{ |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13176 { | 13206 { |
13177 if ((ctxt == NULL) || (elemDecl == NULL) || | 13207 if ((ctxt == NULL) || (elemDecl == NULL) || |
13178 ((elemDecl != NULL) && | 13208 ((elemDecl != NULL) && |
13179 (elemDecl->flags & XML_SCHEMAS_ELEM_INTERNAL_RESOLVED))) | 13209 (elemDecl->flags & XML_SCHEMAS_ELEM_INTERNAL_RESOLVED))) |
13180 return; | 13210 return; |
13181 elemDecl->flags |= XML_SCHEMAS_ELEM_INTERNAL_RESOLVED; | 13211 elemDecl->flags |= XML_SCHEMAS_ELEM_INTERNAL_RESOLVED; |
13182 | 13212 |
13183 if ((elemDecl->subtypes == NULL) && (elemDecl->namedType != NULL)) { | 13213 if ((elemDecl->subtypes == NULL) && (elemDecl->namedType != NULL)) { |
13184 xmlSchemaTypePtr type; | 13214 xmlSchemaTypePtr type; |
13185 | 13215 |
13186 » /* (type definition) ... otherwise the type definition �resolved� | 13216 » /* (type definition) ... otherwise the type definition `resolved` |
13187 » * to by the �actual value� of the type [attribute] ... | 13217 » * to by the `actual value` of the type [attribute] ... |
13188 */ | 13218 */ |
13189 type = xmlSchemaGetType(ctxt->schema, elemDecl->namedType, | 13219 type = xmlSchemaGetType(ctxt->schema, elemDecl->namedType, |
13190 elemDecl->namedTypeNs); | 13220 elemDecl->namedTypeNs); |
13191 if (type == NULL) { | 13221 if (type == NULL) { |
13192 xmlSchemaPResCompAttrErr(ctxt, | 13222 xmlSchemaPResCompAttrErr(ctxt, |
13193 XML_SCHEMAP_SRC_RESOLVE, | 13223 XML_SCHEMAP_SRC_RESOLVE, |
13194 WXS_BASIC_CAST elemDecl, elemDecl->node, | 13224 WXS_BASIC_CAST elemDecl, elemDecl->node, |
13195 "type", elemDecl->namedType, elemDecl->namedTypeNs, | 13225 "type", elemDecl->namedType, elemDecl->namedTypeNs, |
13196 XML_SCHEMA_TYPE_BASIC, "type definition"); | 13226 XML_SCHEMA_TYPE_BASIC, "type definition"); |
13197 } else | 13227 } else |
(...skipping 17 matching lines...) Expand all Loading... |
13215 } else { | 13245 } else { |
13216 xmlSchemaResolveElementReferences(substHead, ctxt); | 13246 xmlSchemaResolveElementReferences(substHead, ctxt); |
13217 /* | 13247 /* |
13218 * Set the "substitution group affiliation". | 13248 * Set the "substitution group affiliation". |
13219 * NOTE that now we use the "refDecl" field for this. | 13249 * NOTE that now we use the "refDecl" field for this. |
13220 */ | 13250 */ |
13221 WXS_SUBST_HEAD(elemDecl) = substHead; | 13251 WXS_SUBST_HEAD(elemDecl) = substHead; |
13222 /* | 13252 /* |
13223 * The type definitions is set to: | 13253 * The type definitions is set to: |
13224 * SPEC "...the {type definition} of the element | 13254 * SPEC "...the {type definition} of the element |
13225 » * declaration �resolved� to by the �actual value� | 13255 » * declaration `resolved` to by the `actual value` |
13226 * of the substitutionGroup [attribute], if present" | 13256 * of the substitutionGroup [attribute], if present" |
13227 */ | 13257 */ |
13228 if (elemDecl->subtypes == NULL) | 13258 if (elemDecl->subtypes == NULL) |
13229 elemDecl->subtypes = substHead->subtypes; | 13259 elemDecl->subtypes = substHead->subtypes; |
13230 } | 13260 } |
13231 } | 13261 } |
13232 /* | 13262 /* |
13233 * SPEC "The definition of anyType serves as the default type definition | 13263 * SPEC "The definition of anyType serves as the default type definition |
13234 * for element declarations whose XML representation does not specify one." | 13264 * for element declarations whose XML representation does not specify one." |
13235 */ | 13265 */ |
(...skipping 17 matching lines...) Expand all Loading... |
13253 static int | 13283 static int |
13254 xmlSchemaResolveUnionMemberTypes(xmlSchemaParserCtxtPtr ctxt, | 13284 xmlSchemaResolveUnionMemberTypes(xmlSchemaParserCtxtPtr ctxt, |
13255 xmlSchemaTypePtr type) | 13285 xmlSchemaTypePtr type) |
13256 { | 13286 { |
13257 | 13287 |
13258 xmlSchemaTypeLinkPtr link, lastLink, newLink; | 13288 xmlSchemaTypeLinkPtr link, lastLink, newLink; |
13259 xmlSchemaTypePtr memberType; | 13289 xmlSchemaTypePtr memberType; |
13260 | 13290 |
13261 /* | 13291 /* |
13262 * SPEC (1) "If the <union> alternative is chosen, then [Definition:] | 13292 * SPEC (1) "If the <union> alternative is chosen, then [Definition:] |
13263 * define the explicit members as the type definitions �resolved� | 13293 * define the explicit members as the type definitions `resolved` |
13264 * to by the items in the �actual value� of the memberTypes [attribute], | 13294 * to by the items in the `actual value` of the memberTypes [attribute], |
13265 * if any, followed by the type definitions corresponding to the | 13295 * if any, followed by the type definitions corresponding to the |
13266 * <simpleType>s among the [children] of <union>, if any." | 13296 * <simpleType>s among the [children] of <union>, if any." |
13267 */ | 13297 */ |
13268 /* | 13298 /* |
13269 * Resolve references. | 13299 * Resolve references. |
13270 */ | 13300 */ |
13271 link = type->memberTypes; | 13301 link = type->memberTypes; |
13272 lastLink = NULL; | 13302 lastLink = NULL; |
13273 while (link != NULL) { | 13303 while (link != NULL) { |
13274 const xmlChar *name, *nsName; | 13304 const xmlChar *name, *nsName; |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13549 completeWild->nsSet = NULL; | 13579 completeWild->nsSet = NULL; |
13550 } | 13580 } |
13551 if (completeWild->negNsSet != NULL) { | 13581 if (completeWild->negNsSet != NULL) { |
13552 xmlFree(completeWild->negNsSet); | 13582 xmlFree(completeWild->negNsSet); |
13553 completeWild->negNsSet = NULL; | 13583 completeWild->negNsSet = NULL; |
13554 } | 13584 } |
13555 } | 13585 } |
13556 return (0); | 13586 return (0); |
13557 } | 13587 } |
13558 /* | 13588 /* |
13559 * 3 If both O1 and O2 are sets of (namespace names or �absent�), | 13589 * 3 If both O1 and O2 are sets of (namespace names or `absent`), |
13560 * then the union of those sets must be the value. | 13590 * then the union of those sets must be the value. |
13561 */ | 13591 */ |
13562 if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) { | 13592 if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) { |
13563 int found; | 13593 int found; |
13564 xmlSchemaWildcardNsPtr start; | 13594 xmlSchemaWildcardNsPtr start; |
13565 | 13595 |
13566 cur = curWild->nsSet; | 13596 cur = curWild->nsSet; |
13567 start = completeWild->nsSet; | 13597 start = completeWild->nsSet; |
13568 while (cur != NULL) { | 13598 while (cur != NULL) { |
13569 found = 0; | 13599 found = 0; |
(...skipping 13 matching lines...) Expand all Loading... |
13583 tmp->next = completeWild->nsSet; | 13613 tmp->next = completeWild->nsSet; |
13584 completeWild->nsSet = tmp; | 13614 completeWild->nsSet = tmp; |
13585 } | 13615 } |
13586 cur = cur->next; | 13616 cur = cur->next; |
13587 } | 13617 } |
13588 | 13618 |
13589 return(0); | 13619 return(0); |
13590 } | 13620 } |
13591 /* | 13621 /* |
13592 * 4 If the two are negations of different values (namespace names | 13622 * 4 If the two are negations of different values (namespace names |
13593 * or �absent�), then a pair of not and �absent� must be the value. | 13623 * or `absent`), then a pair of not and `absent` must be the value. |
13594 */ | 13624 */ |
13595 if ((completeWild->negNsSet != NULL) && | 13625 if ((completeWild->negNsSet != NULL) && |
13596 (curWild->negNsSet != NULL) && | 13626 (curWild->negNsSet != NULL) && |
13597 (completeWild->negNsSet->value != curWild->negNsSet->value)) { | 13627 (completeWild->negNsSet->value != curWild->negNsSet->value)) { |
13598 completeWild->negNsSet->value = NULL; | 13628 completeWild->negNsSet->value = NULL; |
13599 | 13629 |
13600 return(0); | 13630 return(0); |
13601 } | 13631 } |
13602 /* | 13632 /* |
13603 * 5. | 13633 * 5. |
(...skipping 21 matching lines...) Expand all Loading... |
13625 else if (cur->value == curB->value) | 13655 else if (cur->value == curB->value) |
13626 nsFound = 1; | 13656 nsFound = 1; |
13627 if (nsFound && absentFound) | 13657 if (nsFound && absentFound) |
13628 break; | 13658 break; |
13629 cur = cur->next; | 13659 cur = cur->next; |
13630 } | 13660 } |
13631 | 13661 |
13632 if (nsFound && absentFound) { | 13662 if (nsFound && absentFound) { |
13633 /* | 13663 /* |
13634 * 5.1 If the set S includes both the negated namespace | 13664 * 5.1 If the set S includes both the negated namespace |
13635 » * name and �absent�, then any must be the value. | 13665 » * name and `absent`, then any must be the value. |
13636 */ | 13666 */ |
13637 completeWild->any = 1; | 13667 completeWild->any = 1; |
13638 if (completeWild->nsSet != NULL) { | 13668 if (completeWild->nsSet != NULL) { |
13639 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); | 13669 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); |
13640 completeWild->nsSet = NULL; | 13670 completeWild->nsSet = NULL; |
13641 } | 13671 } |
13642 if (completeWild->negNsSet != NULL) { | 13672 if (completeWild->negNsSet != NULL) { |
13643 xmlFree(completeWild->negNsSet); | 13673 xmlFree(completeWild->negNsSet); |
13644 completeWild->negNsSet = NULL; | 13674 completeWild->negNsSet = NULL; |
13645 } | 13675 } |
13646 } else if (nsFound && (!absentFound)) { | 13676 } else if (nsFound && (!absentFound)) { |
13647 /* | 13677 /* |
13648 * 5.2 If the set S includes the negated namespace name | 13678 * 5.2 If the set S includes the negated namespace name |
13649 » * but not �absent�, then a pair of not and �absent� must | 13679 » * but not `absent`, then a pair of not and `absent` must |
13650 * be the value. | 13680 * be the value. |
13651 */ | 13681 */ |
13652 if (completeWild->nsSet != NULL) { | 13682 if (completeWild->nsSet != NULL) { |
13653 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); | 13683 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); |
13654 completeWild->nsSet = NULL; | 13684 completeWild->nsSet = NULL; |
13655 } | 13685 } |
13656 if (completeWild->negNsSet == NULL) { | 13686 if (completeWild->negNsSet == NULL) { |
13657 completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt); | 13687 completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt); |
13658 if (completeWild->negNsSet == NULL) | 13688 if (completeWild->negNsSet == NULL) |
13659 return (-1); | 13689 return (-1); |
13660 } | 13690 } |
13661 completeWild->negNsSet->value = NULL; | 13691 completeWild->negNsSet->value = NULL; |
13662 } else if ((!nsFound) && absentFound) { | 13692 } else if ((!nsFound) && absentFound) { |
13663 /* | 13693 /* |
13664 » * 5.3 If the set S includes �absent� but not the negated | 13694 » * 5.3 If the set S includes `absent` but not the negated |
13665 * namespace name, then the union is not expressible. | 13695 * namespace name, then the union is not expressible. |
13666 */ | 13696 */ |
13667 xmlSchemaPErr(ctxt, completeWild->node, | 13697 xmlSchemaPErr(ctxt, completeWild->node, |
13668 XML_SCHEMAP_UNION_NOT_EXPRESSIBLE, | 13698 XML_SCHEMAP_UNION_NOT_EXPRESSIBLE, |
13669 "The union of the wilcard is not expressible.\n", | 13699 "The union of the wilcard is not expressible.\n", |
13670 NULL, NULL); | 13700 NULL, NULL); |
13671 return(XML_SCHEMAP_UNION_NOT_EXPRESSIBLE); | 13701 return(XML_SCHEMAP_UNION_NOT_EXPRESSIBLE); |
13672 } else if ((!nsFound) && (!absentFound)) { | 13702 } else if ((!nsFound) && (!absentFound)) { |
13673 /* | 13703 /* |
13674 * 5.4 If the set S does not include either the negated namespace | 13704 * 5.4 If the set S does not include either the negated namespace |
13675 » * name or �absent�, then whichever of O1 or O2 is a pair of not | 13705 » * name or `absent`, then whichever of O1 or O2 is a pair of not |
13676 * and a namespace name must be the value. | 13706 * and a namespace name must be the value. |
13677 */ | 13707 */ |
13678 if (completeWild->negNsSet == NULL) { | 13708 if (completeWild->negNsSet == NULL) { |
13679 if (completeWild->nsSet != NULL) { | 13709 if (completeWild->nsSet != NULL) { |
13680 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); | 13710 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); |
13681 completeWild->nsSet = NULL; | 13711 completeWild->nsSet = NULL; |
13682 } | 13712 } |
13683 completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt); | 13713 completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt); |
13684 if (completeWild->negNsSet == NULL) | 13714 if (completeWild->negNsSet == NULL) |
13685 return (-1); | 13715 return (-1); |
(...skipping 13 matching lines...) Expand all Loading... |
13699 (completeWild->nsSet != NULL))) { | 13729 (completeWild->nsSet != NULL))) { |
13700 | 13730 |
13701 if (completeWild->nsSet != NULL) { | 13731 if (completeWild->nsSet != NULL) { |
13702 cur = completeWild->nsSet; | 13732 cur = completeWild->nsSet; |
13703 } else { | 13733 } else { |
13704 cur = curWild->nsSet; | 13734 cur = curWild->nsSet; |
13705 } | 13735 } |
13706 while (cur != NULL) { | 13736 while (cur != NULL) { |
13707 if (cur->value == NULL) { | 13737 if (cur->value == NULL) { |
13708 /* | 13738 /* |
13709 » » * 6.1 If the set S includes �absent�, then any must be the | 13739 » » * 6.1 If the set S includes `absent`, then any must be the |
13710 * value. | 13740 * value. |
13711 */ | 13741 */ |
13712 completeWild->any = 1; | 13742 completeWild->any = 1; |
13713 if (completeWild->nsSet != NULL) { | 13743 if (completeWild->nsSet != NULL) { |
13714 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); | 13744 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); |
13715 completeWild->nsSet = NULL; | 13745 completeWild->nsSet = NULL; |
13716 } | 13746 } |
13717 if (completeWild->negNsSet != NULL) { | 13747 if (completeWild->negNsSet != NULL) { |
13718 xmlFree(completeWild->negNsSet); | 13748 xmlFree(completeWild->negNsSet); |
13719 completeWild->negNsSet = NULL; | 13749 completeWild->negNsSet = NULL; |
13720 } | 13750 } |
13721 return (0); | 13751 return (0); |
13722 } | 13752 } |
13723 cur = cur->next; | 13753 cur = cur->next; |
13724 } | 13754 } |
13725 if (completeWild->negNsSet == NULL) { | 13755 if (completeWild->negNsSet == NULL) { |
13726 /* | 13756 /* |
13727 » * 6.2 If the set S does not include �absent�, then a pair of not | 13757 » * 6.2 If the set S does not include `absent`, then a pair of not |
13728 » * and �absent� must be the value. | 13758 » * and `absent` must be the value. |
13729 */ | 13759 */ |
13730 if (completeWild->nsSet != NULL) { | 13760 if (completeWild->nsSet != NULL) { |
13731 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); | 13761 xmlSchemaFreeWildcardNsSet(completeWild->nsSet); |
13732 completeWild->nsSet = NULL; | 13762 completeWild->nsSet = NULL; |
13733 } | 13763 } |
13734 completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt); | 13764 completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt); |
13735 if (completeWild->negNsSet == NULL) | 13765 if (completeWild->negNsSet == NULL) |
13736 return (-1); | 13766 return (-1); |
13737 completeWild->negNsSet->value = NULL; | 13767 completeWild->negNsSet->value = NULL; |
13738 } | 13768 } |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13801 /* | 13831 /* |
13802 * 2 If either O1 or O2 is any, then the other must be the value. | 13832 * 2 If either O1 or O2 is any, then the other must be the value. |
13803 */ | 13833 */ |
13804 if ((completeWild->any != curWild->any) && (completeWild->any)) { | 13834 if ((completeWild->any != curWild->any) && (completeWild->any)) { |
13805 if (xmlSchemaCloneWildcardNsConstraints(ctxt, completeWild, curWild) ==
-1) | 13835 if (xmlSchemaCloneWildcardNsConstraints(ctxt, completeWild, curWild) ==
-1) |
13806 return(-1); | 13836 return(-1); |
13807 return(0); | 13837 return(0); |
13808 } | 13838 } |
13809 /* | 13839 /* |
13810 * 3 If either O1 or O2 is a pair of not and a value (a namespace | 13840 * 3 If either O1 or O2 is a pair of not and a value (a namespace |
13811 * name or �absent�) and the other is a set of (namespace names or | 13841 * name or `absent`) and the other is a set of (namespace names or |
13812 * �absent�), then that set, minus the negated value if it was in | 13842 * `absent`), then that set, minus the negated value if it was in |
13813 * the set, minus �absent� if it was in the set, must be the value. | 13843 * the set, minus `absent` if it was in the set, must be the value. |
13814 */ | 13844 */ |
13815 if (((completeWild->negNsSet != NULL) && (curWild->nsSet != NULL)) || | 13845 if (((completeWild->negNsSet != NULL) && (curWild->nsSet != NULL)) || |
13816 ((curWild->negNsSet != NULL) && (completeWild->nsSet != NULL))) { | 13846 ((curWild->negNsSet != NULL) && (completeWild->nsSet != NULL))) { |
13817 const xmlChar *neg; | 13847 const xmlChar *neg; |
13818 | 13848 |
13819 if (completeWild->nsSet == NULL) { | 13849 if (completeWild->nsSet == NULL) { |
13820 neg = completeWild->negNsSet->value; | 13850 neg = completeWild->negNsSet->value; |
13821 if (xmlSchemaCloneWildcardNsConstraints(ctxt, completeWild, curWild)
== -1) | 13851 if (xmlSchemaCloneWildcardNsConstraints(ctxt, completeWild, curWild)
== -1) |
13822 return(-1); | 13852 return(-1); |
13823 } else | 13853 } else |
(...skipping 28 matching lines...) Expand all Loading... |
13852 break; | 13882 break; |
13853 } | 13883 } |
13854 prev = cur; | 13884 prev = cur; |
13855 cur = cur->next; | 13885 cur = cur->next; |
13856 } | 13886 } |
13857 } | 13887 } |
13858 | 13888 |
13859 return(0); | 13889 return(0); |
13860 } | 13890 } |
13861 /* | 13891 /* |
13862 * 4 If both O1 and O2 are sets of (namespace names or �absent�), | 13892 * 4 If both O1 and O2 are sets of (namespace names or `absent`), |
13863 * then the intersection of those sets must be the value. | 13893 * then the intersection of those sets must be the value. |
13864 */ | 13894 */ |
13865 if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) { | 13895 if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) { |
13866 int found; | 13896 int found; |
13867 | 13897 |
13868 cur = completeWild->nsSet; | 13898 cur = completeWild->nsSet; |
13869 prev = NULL; | 13899 prev = NULL; |
13870 while (cur != NULL) { | 13900 while (cur != NULL) { |
13871 found = 0; | 13901 found = 0; |
13872 curB = curWild->nsSet; | 13902 curB = curWild->nsSet; |
(...skipping 29 matching lines...) Expand all Loading... |
13902 (completeWild->negNsSet->value != NULL) && | 13932 (completeWild->negNsSet->value != NULL) && |
13903 (curWild->negNsSet->value != NULL)) { | 13933 (curWild->negNsSet->value != NULL)) { |
13904 | 13934 |
13905 xmlSchemaPErr(ctxt, completeWild->node, XML_SCHEMAP_INTERSECTION_NOT_EXP
RESSIBLE, | 13935 xmlSchemaPErr(ctxt, completeWild->node, XML_SCHEMAP_INTERSECTION_NOT_EXP
RESSIBLE, |
13906 "The intersection of the wilcard is not expressible.\n", | 13936 "The intersection of the wilcard is not expressible.\n", |
13907 NULL, NULL); | 13937 NULL, NULL); |
13908 return(XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE); | 13938 return(XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE); |
13909 } | 13939 } |
13910 /* | 13940 /* |
13911 * 6 If the one is a negation of a namespace name and the other | 13941 * 6 If the one is a negation of a namespace name and the other |
13912 * is a negation of �absent�, then the one which is the negation | 13942 * is a negation of `absent`, then the one which is the negation |
13913 * of a namespace name must be the value. | 13943 * of a namespace name must be the value. |
13914 */ | 13944 */ |
13915 if ((completeWild->negNsSet != NULL) && (curWild->negNsSet != NULL) && | 13945 if ((completeWild->negNsSet != NULL) && (curWild->negNsSet != NULL) && |
13916 (completeWild->negNsSet->value != curWild->negNsSet->value) && | 13946 (completeWild->negNsSet->value != curWild->negNsSet->value) && |
13917 (completeWild->negNsSet->value == NULL)) { | 13947 (completeWild->negNsSet->value == NULL)) { |
13918 completeWild->negNsSet->value = curWild->negNsSet->value; | 13948 completeWild->negNsSet->value = curWild->negNsSet->value; |
13919 } | 13949 } |
13920 return(0); | 13950 return(0); |
13921 } | 13951 } |
13922 | 13952 |
(...skipping 11 matching lines...) Expand all Loading... |
13934 static int | 13964 static int |
13935 xmlSchemaCheckCOSNSSubset(xmlSchemaWildcardPtr sub, | 13965 xmlSchemaCheckCOSNSSubset(xmlSchemaWildcardPtr sub, |
13936 xmlSchemaWildcardPtr super) | 13966 xmlSchemaWildcardPtr super) |
13937 { | 13967 { |
13938 /* | 13968 /* |
13939 * 1 super must be any. | 13969 * 1 super must be any. |
13940 */ | 13970 */ |
13941 if (super->any) | 13971 if (super->any) |
13942 return (0); | 13972 return (0); |
13943 /* | 13973 /* |
13944 * 2.1 sub must be a pair of not and a namespace name or �absent�. | 13974 * 2.1 sub must be a pair of not and a namespace name or `absent`. |
13945 * 2.2 super must be a pair of not and the same value. | 13975 * 2.2 super must be a pair of not and the same value. |
13946 */ | 13976 */ |
13947 if ((sub->negNsSet != NULL) && | 13977 if ((sub->negNsSet != NULL) && |
13948 (super->negNsSet != NULL) && | 13978 (super->negNsSet != NULL) && |
13949 (sub->negNsSet->value == super->negNsSet->value)) | 13979 (sub->negNsSet->value == super->negNsSet->value)) |
13950 return (0); | 13980 return (0); |
13951 /* | 13981 /* |
13952 * 3.1 sub must be a set whose members are either namespace names or �absent�
. | 13982 * 3.1 sub must be a set whose members are either namespace names or `absent`
. |
13953 */ | 13983 */ |
13954 if (sub->nsSet != NULL) { | 13984 if (sub->nsSet != NULL) { |
13955 /* | 13985 /* |
13956 * 3.2.1 super must be the same set or a superset thereof. | 13986 * 3.2.1 super must be the same set or a superset thereof. |
13957 */ | 13987 */ |
13958 if (super->nsSet != NULL) { | 13988 if (super->nsSet != NULL) { |
13959 xmlSchemaWildcardNsPtr cur, curB; | 13989 xmlSchemaWildcardNsPtr cur, curB; |
13960 int found = 0; | 13990 int found = 0; |
13961 | 13991 |
13962 cur = sub->nsSet; | 13992 cur = sub->nsSet; |
(...skipping 10 matching lines...) Expand all Loading... |
13973 if (!found) | 14003 if (!found) |
13974 return (1); | 14004 return (1); |
13975 cur = cur->next; | 14005 cur = cur->next; |
13976 } | 14006 } |
13977 if (found) | 14007 if (found) |
13978 return (0); | 14008 return (0); |
13979 } else if (super->negNsSet != NULL) { | 14009 } else if (super->negNsSet != NULL) { |
13980 xmlSchemaWildcardNsPtr cur; | 14010 xmlSchemaWildcardNsPtr cur; |
13981 /* | 14011 /* |
13982 * 3.2.2 super must be a pair of not and a namespace name or | 14012 * 3.2.2 super must be a pair of not and a namespace name or |
13983 » * �absent� and that value must not be in sub's set. | 14013 » * `absent` and that value must not be in sub's set. |
13984 */ | 14014 */ |
13985 cur = sub->nsSet; | 14015 cur = sub->nsSet; |
13986 while (cur != NULL) { | 14016 while (cur != NULL) { |
13987 if (cur->value == super->negNsSet->value) | 14017 if (cur->value == super->negNsSet->value) |
13988 return (1); | 14018 return (1); |
13989 cur = cur->next; | 14019 cur = cur->next; |
13990 } | 14020 } |
13991 return (0); | 14021 return (0); |
13992 } | 14022 } |
13993 } | 14023 } |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14135 } else if (xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST pctxt, | 14165 } else if (xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST pctxt, |
14136 WXS_ATTRUSE_TYPEDEF(cur), | 14166 WXS_ATTRUSE_TYPEDEF(cur), |
14137 WXS_ATTRUSE_TYPEDEF(bcur), 0) != 0) | 14167 WXS_ATTRUSE_TYPEDEF(bcur), 0) != 0) |
14138 { | 14168 { |
14139 xmlChar *strA = NULL, *strB = NULL, *strC = NULL; | 14169 xmlChar *strA = NULL, *strB = NULL, *strC = NULL; |
14140 | 14170 |
14141 /* | 14171 /* |
14142 * SPEC (2.1.2) "R's {attribute declaration}'s | 14172 * SPEC (2.1.2) "R's {attribute declaration}'s |
14143 * {type definition} must be validly derived from | 14173 * {type definition} must be validly derived from |
14144 * B's {type definition} given the empty set as | 14174 * B's {type definition} given the empty set as |
14145 » » » * defined in Type Derivation OK (Simple) (�3.14.6)." | 14175 » » » * defined in Type Derivation OK (Simple) ($3.14.6)." |
14146 */ | 14176 */ |
14147 xmlSchemaPAttrUseErr4(pctxt, | 14177 xmlSchemaPAttrUseErr4(pctxt, |
14148 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2, | 14178 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2, |
14149 WXS_ITEM_NODE(item), item, cur, | 14179 WXS_ITEM_NODE(item), item, cur, |
14150 "The attribute declaration's %s " | 14180 "The attribute declaration's %s " |
14151 "is not validly derived from " | 14181 "is not validly derived from " |
14152 "the corresponding %s of the " | 14182 "the corresponding %s of the " |
14153 "attribute declaration in the %s %s", | 14183 "attribute declaration in the %s %s", |
14154 xmlSchemaGetComponentDesignation(&strA, | 14184 xmlSchemaGetComponentDesignation(&strA, |
14155 WXS_ATTRUSE_TYPEDEF(cur)), | 14185 WXS_ATTRUSE_TYPEDEF(cur)), |
(...skipping 11 matching lines...) Expand all Loading... |
14167 * 2.1.3 [Definition:] Let the effective value | 14197 * 2.1.3 [Definition:] Let the effective value |
14168 * constraint of an attribute use be its {value | 14198 * constraint of an attribute use be its {value |
14169 * constraint}, if present, otherwise its {attribute | 14199 * constraint}, if present, otherwise its {attribute |
14170 * declaration}'s {value constraint} . | 14200 * declaration}'s {value constraint} . |
14171 */ | 14201 */ |
14172 xmlSchemaGetEffectiveValueConstraint(bcur, | 14202 xmlSchemaGetEffectiveValueConstraint(bcur, |
14173 &effFixed, &bEffValue, NULL); | 14203 &effFixed, &bEffValue, NULL); |
14174 /* | 14204 /* |
14175 * 2.1.3 ... one of the following must be true | 14205 * 2.1.3 ... one of the following must be true |
14176 * | 14206 * |
14177 » » » * 2.1.3.1 B's �effective value constraint� is | 14207 » » » * 2.1.3.1 B's `effective value constraint` is |
14178 » » » * �absent� or default. | 14208 » » » * `absent` or default. |
14179 */ | 14209 */ |
14180 if ((bEffValue != NULL) && | 14210 if ((bEffValue != NULL) && |
14181 (effFixed == 1)) { | 14211 (effFixed == 1)) { |
14182 const xmlChar *rEffValue = NULL; | 14212 const xmlChar *rEffValue = NULL; |
14183 | 14213 |
14184 xmlSchemaGetEffectiveValueConstraint(bcur, | 14214 xmlSchemaGetEffectiveValueConstraint(bcur, |
14185 &effFixed, &rEffValue, NULL); | 14215 &effFixed, &rEffValue, NULL); |
14186 /* | 14216 /* |
14187 » » » * 2.1.3.2 R's �effective value constraint� is | 14217 » » » * 2.1.3.2 R's `effective value constraint` is |
14188 * fixed with the same string as B's. | 14218 * fixed with the same string as B's. |
14189 * MAYBE TODO: Compare the computed values. | 14219 * MAYBE TODO: Compare the computed values. |
14190 * Hmm, it says "same string" so | 14220 * Hmm, it says "same string" so |
14191 * string-equality might really be sufficient. | 14221 * string-equality might really be sufficient. |
14192 */ | 14222 */ |
14193 if ((effFixed == 0) || | 14223 if ((effFixed == 0) || |
14194 (! WXS_ARE_DEFAULT_STR_EQUAL(rEffValue, bEffValu
e))) | 14224 (! WXS_ARE_DEFAULT_STR_EQUAL(rEffValue, bEffValu
e))) |
14195 { | 14225 { |
14196 xmlChar *str = NULL; | 14226 xmlChar *str = NULL; |
14197 | 14227 |
(...skipping 13 matching lines...) Expand all Loading... |
14211 } | 14241 } |
14212 } | 14242 } |
14213 break; | 14243 break; |
14214 } | 14244 } |
14215 } | 14245 } |
14216 not_found: | 14246 not_found: |
14217 if (!found) { | 14247 if (!found) { |
14218 /* | 14248 /* |
14219 * (2.2) "otherwise the {base type definition} must have an | 14249 * (2.2) "otherwise the {base type definition} must have an |
14220 * {attribute wildcard} and the {target namespace} of the | 14250 * {attribute wildcard} and the {target namespace} of the |
14221 » » * R's {attribute declaration} must be �valid� with respect | 14251 » » * R's {attribute declaration} must be `valid` with respect |
14222 * to that wildcard, as defined in Wildcard allows Namespace | 14252 * to that wildcard, as defined in Wildcard allows Namespace |
14223 » » * Name (�3.10.4)." | 14253 » » * Name ($3.10.4)." |
14224 */ | 14254 */ |
14225 if ((baseWild == NULL) || | 14255 if ((baseWild == NULL) || |
14226 (xmlSchemaCheckCVCWildcardNamespace(baseWild, | 14256 (xmlSchemaCheckCVCWildcardNamespace(baseWild, |
14227 (WXS_ATTRUSE_DECL(cur))->targetNamespace) != 0)) | 14257 (WXS_ATTRUSE_DECL(cur))->targetNamespace) != 0)) |
14228 { | 14258 { |
14229 xmlChar *str = NULL; | 14259 xmlChar *str = NULL; |
14230 | 14260 |
14231 xmlSchemaPAttrUseErr4(pctxt, | 14261 xmlSchemaPAttrUseErr4(pctxt, |
14232 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2, | 14262 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2, |
14233 WXS_ITEM_NODE(item), item, cur, | 14263 WXS_ITEM_NODE(item), item, cur, |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14311 FREE_AND_NULL(str); | 14341 FREE_AND_NULL(str); |
14312 return(pctxt->err); | 14342 return(pctxt->err); |
14313 } else if ((baseWild->any == 0) && | 14343 } else if ((baseWild->any == 0) && |
14314 xmlSchemaCheckCOSNSSubset(wild, baseWild)) | 14344 xmlSchemaCheckCOSNSSubset(wild, baseWild)) |
14315 { | 14345 { |
14316 xmlChar *str = NULL; | 14346 xmlChar *str = NULL; |
14317 /* | 14347 /* |
14318 * (4.2) "The complex type definition's {attribute wildcard}'s | 14348 * (4.2) "The complex type definition's {attribute wildcard}'s |
14319 * {namespace constraint} must be a subset of the {base type | 14349 * {namespace constraint} must be a subset of the {base type |
14320 * definition}'s {attribute wildcard}'s {namespace constraint}, | 14350 * definition}'s {attribute wildcard}'s {namespace constraint}, |
14321 » * as defined by Wildcard Subset (�3.10.6)." | 14351 » * as defined by Wildcard Subset ($3.10.6)." |
14322 */ | 14352 */ |
14323 xmlSchemaCustomErr4(ACTXT_CAST pctxt, | 14353 xmlSchemaCustomErr4(ACTXT_CAST pctxt, |
14324 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2, | 14354 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2, |
14325 NULL, item, | 14355 NULL, item, |
14326 "The attribute wildcard is not a valid " | 14356 "The attribute wildcard is not a valid " |
14327 "subset of the wildcard in the %s %s '%s'", | 14357 "subset of the wildcard in the %s %s '%s'", |
14328 WXS_ACTION_STR(action), | 14358 WXS_ACTION_STR(action), |
14329 WXS_ITEM_TYPE_NAME(baseItem), | 14359 WXS_ITEM_TYPE_NAME(baseItem), |
14330 xmlSchemaGetComponentQName(&str, baseItem), | 14360 xmlSchemaGetComponentQName(&str, baseItem), |
14331 NULL); | 14361 NULL); |
14332 FREE_AND_NULL(str); | 14362 FREE_AND_NULL(str); |
14333 return(pctxt->err); | 14363 return(pctxt->err); |
14334 } | 14364 } |
14335 » /* 4.3 Unless the {base type definition} is the �ur-type | 14365 » /* 4.3 Unless the {base type definition} is the `ur-type |
14336 » * definition�, the complex type definition's {attribute | 14366 » * definition`, the complex type definition's {attribute |
14337 * wildcard}'s {process contents} must be identical to or | 14367 * wildcard}'s {process contents} must be identical to or |
14338 * stronger than the {base type definition}'s {attribute | 14368 * stronger than the {base type definition}'s {attribute |
14339 * wildcard}'s {process contents}, where strict is stronger | 14369 * wildcard}'s {process contents}, where strict is stronger |
14340 * than lax is stronger than skip. | 14370 * than lax is stronger than skip. |
14341 */ | 14371 */ |
14342 if ((! WXS_IS_ANYTYPE(baseItem)) && | 14372 if ((! WXS_IS_ANYTYPE(baseItem)) && |
14343 (wild->processContents < baseWild->processContents)) { | 14373 (wild->processContents < baseWild->processContents)) { |
14344 xmlChar *str = NULL; | 14374 xmlChar *str = NULL; |
14345 xmlSchemaCustomErr4(ACTXT_CAST pctxt, | 14375 xmlSchemaCustomErr4(ACTXT_CAST pctxt, |
14346 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3, | 14376 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3, |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14512 * TODO: We could shrink the size of the array | 14542 * TODO: We could shrink the size of the array |
14513 * to fit the actual number of items. | 14543 * to fit the actual number of items. |
14514 */ | 14544 */ |
14515 } | 14545 } |
14516 /* | 14546 /* |
14517 * Compute the complete wildcard. | 14547 * Compute the complete wildcard. |
14518 */ | 14548 */ |
14519 if (WXS_IS_EXTENSION(type)) { | 14549 if (WXS_IS_EXTENSION(type)) { |
14520 if (baseType->attributeWildcard != NULL) { | 14550 if (baseType->attributeWildcard != NULL) { |
14521 /* | 14551 /* |
14522 » * (3.2.2.1) "If the �base wildcard� is non-�absent�, then | 14552 » * (3.2.2.1) "If the `base wildcard` is non-`absent`, then |
14523 * the appropriate case among the following:" | 14553 * the appropriate case among the following:" |
14524 */ | 14554 */ |
14525 if (type->attributeWildcard != NULL) { | 14555 if (type->attributeWildcard != NULL) { |
14526 /* | 14556 /* |
14527 * Union the complete wildcard with the base wildcard. | 14557 * Union the complete wildcard with the base wildcard. |
14528 * SPEC {attribute wildcard} | 14558 * SPEC {attribute wildcard} |
14529 * (3.2.2.1.2) "otherwise a wildcard whose {process contents} | 14559 * (3.2.2.1.2) "otherwise a wildcard whose {process contents} |
14530 » » * and {annotation} are those of the �complete wildcard�, | 14560 » » * and {annotation} are those of the `complete wildcard`, |
14531 * and whose {namespace constraint} is the intensional union | 14561 * and whose {namespace constraint} is the intensional union |
14532 » » * of the {namespace constraint} of the �complete wildcard� | 14562 » » * of the {namespace constraint} of the `complete wildcard` |
14533 » » * and of the �base wildcard�, as defined in Attribute | 14563 » » * and of the `base wildcard`, as defined in Attribute |
14534 » » * Wildcard Union (�3.10.6)." | 14564 » » * Wildcard Union ($3.10.6)." |
14535 */ | 14565 */ |
14536 if (xmlSchemaUnionWildcards(pctxt, type->attributeWildcard, | 14566 if (xmlSchemaUnionWildcards(pctxt, type->attributeWildcard, |
14537 baseType->attributeWildcard) == -1) | 14567 baseType->attributeWildcard) == -1) |
14538 goto exit_failure; | 14568 goto exit_failure; |
14539 } else { | 14569 } else { |
14540 /* | 14570 /* |
14541 » » * (3.2.2.1.1) "If the �complete wildcard� is �absent�, | 14571 » » * (3.2.2.1.1) "If the `complete wildcard` is `absent`, |
14542 » » * then the �base wildcard�." | 14572 » » * then the `base wildcard`." |
14543 */ | 14573 */ |
14544 type->attributeWildcard = baseType->attributeWildcard; | 14574 type->attributeWildcard = baseType->attributeWildcard; |
14545 } | 14575 } |
14546 } else { | 14576 } else { |
14547 /* | 14577 /* |
14548 » * (3.2.2.2) "otherwise (the �base wildcard� is �absent�) the | 14578 » * (3.2.2.2) "otherwise (the `base wildcard` is `absent`) the |
14549 » * �complete wildcard" | 14579 » * `complete wildcard`" |
14550 * NOOP | 14580 * NOOP |
14551 */ | 14581 */ |
14552 } | 14582 } |
14553 } else { | 14583 } else { |
14554 /* | 14584 /* |
14555 * SPEC {attribute wildcard} | 14585 * SPEC {attribute wildcard} |
14556 * (3.1) "If the <restriction> alternative is chosen, then the | 14586 * (3.1) "If the <restriction> alternative is chosen, then the |
14557 » * �complete wildcard�;" | 14587 » * `complete wildcard`;" |
14558 * NOOP | 14588 * NOOP |
14559 */ | 14589 */ |
14560 } | 14590 } |
14561 | 14591 |
14562 return (0); | 14592 return (0); |
14563 | 14593 |
14564 exit_failure: | 14594 exit_failure: |
14565 return(-1); | 14595 return(-1); |
14566 } | 14596 } |
14567 | 14597 |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14796 if (xmlSchemaTypeFixup(baseType, actxt) == -1) | 14826 if (xmlSchemaTypeFixup(baseType, actxt) == -1) |
14797 return(-1); | 14827 return(-1); |
14798 if ((subset & SUBSET_RESTRICTION) || | 14828 if ((subset & SUBSET_RESTRICTION) || |
14799 (xmlSchemaTypeFinalContains(type->baseType, | 14829 (xmlSchemaTypeFinalContains(type->baseType, |
14800 XML_SCHEMAS_TYPE_FINAL_RESTRICTION))) { | 14830 XML_SCHEMAS_TYPE_FINAL_RESTRICTION))) { |
14801 return (XML_SCHEMAP_COS_ST_DERIVED_OK_2_1); | 14831 return (XML_SCHEMAP_COS_ST_DERIVED_OK_2_1); |
14802 } | 14832 } |
14803 /* 2.2 */ | 14833 /* 2.2 */ |
14804 if (type->baseType == baseType) { | 14834 if (type->baseType == baseType) { |
14805 /* | 14835 /* |
14806 » * 2.2.1 D's �base type definition� is B. | 14836 » * 2.2.1 D's `base type definition` is B. |
14807 */ | 14837 */ |
14808 return (0); | 14838 return (0); |
14809 } | 14839 } |
14810 /* | 14840 /* |
14811 * 2.2.2 D's �base type definition� is not the �ur-type definition� | 14841 * 2.2.2 D's `base type definition` is not the `ur-type definition` |
14812 * and is validly derived from B given the subset, as defined by this | 14842 * and is validly derived from B given the subset, as defined by this |
14813 * constraint. | 14843 * constraint. |
14814 */ | 14844 */ |
14815 if ((! WXS_IS_ANYTYPE(type->baseType)) && | 14845 if ((! WXS_IS_ANYTYPE(type->baseType)) && |
14816 (xmlSchemaCheckCOSSTDerivedOK(actxt, type->baseType, | 14846 (xmlSchemaCheckCOSSTDerivedOK(actxt, type->baseType, |
14817 baseType, subset) == 0)) { | 14847 baseType, subset) == 0)) { |
14818 return (0); | 14848 return (0); |
14819 } | 14849 } |
14820 /* | 14850 /* |
14821 * 2.2.3 D's {variety} is list or union and B is the �simple ur-type | 14851 * 2.2.3 D's {variety} is list or union and B is the `simple ur-type |
14822 * definition�. | 14852 * definition`. |
14823 */ | 14853 */ |
14824 if (WXS_IS_ANY_SIMPLE_TYPE(baseType) && | 14854 if (WXS_IS_ANY_SIMPLE_TYPE(baseType) && |
14825 (WXS_IS_LIST(type) || WXS_IS_UNION(type))) { | 14855 (WXS_IS_LIST(type) || WXS_IS_UNION(type))) { |
14826 return (0); | 14856 return (0); |
14827 } | 14857 } |
14828 /* | 14858 /* |
14829 * 2.2.4 B's {variety} is union and D is validly derived from a type | 14859 * 2.2.4 B's {variety} is union and D is validly derived from a type |
14830 * definition in B's {member type definitions} given the subset, as | 14860 * definition in B's {member type definitions} given the subset, as |
14831 * defined by this constraint. | 14861 * defined by this constraint. |
14832 * | 14862 * |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15124 xmlSchemaTypePtr baseType = type->baseType; | 15154 xmlSchemaTypePtr baseType = type->baseType; |
15125 xmlChar *str = NULL; | 15155 xmlChar *str = NULL; |
15126 | 15156 |
15127 /* STATE: error funcs converted. */ | 15157 /* STATE: error funcs converted. */ |
15128 /* | 15158 /* |
15129 * Schema Component Constraint: Simple Type Definition Properties Correct | 15159 * Schema Component Constraint: Simple Type Definition Properties Correct |
15130 * | 15160 * |
15131 * NOTE: This is somehow redundant, since we actually built a simple type | 15161 * NOTE: This is somehow redundant, since we actually built a simple type |
15132 * to have all the needed information; this acts as an self test. | 15162 * to have all the needed information; this acts as an self test. |
15133 */ | 15163 */ |
15134 /* Base type: If the datatype has been �derived� by �restriction� | 15164 /* Base type: If the datatype has been `derived` by `restriction` |
15135 * then the Simple Type Definition component from which it is �derived�, | 15165 * then the Simple Type Definition component from which it is `derived`, |
15136 * otherwise the Simple Type Definition for anySimpleType (�4.1.6). | 15166 * otherwise the Simple Type Definition for anySimpleType ($4.1.6). |
15137 */ | 15167 */ |
15138 if (baseType == NULL) { | 15168 if (baseType == NULL) { |
15139 /* | 15169 /* |
15140 * TODO: Think about: "modulo the impact of Missing | 15170 * TODO: Think about: "modulo the impact of Missing |
15141 » * Sub-components (�5.3)." | 15171 » * Sub-components ($5.3)." |
15142 */ | 15172 */ |
15143 xmlSchemaPCustomErr(ctxt, | 15173 xmlSchemaPCustomErr(ctxt, |
15144 XML_SCHEMAP_ST_PROPS_CORRECT_1, | 15174 XML_SCHEMAP_ST_PROPS_CORRECT_1, |
15145 WXS_BASIC_CAST type, NULL, | 15175 WXS_BASIC_CAST type, NULL, |
15146 "No base type existent", NULL); | 15176 "No base type existent", NULL); |
15147 return (XML_SCHEMAP_ST_PROPS_CORRECT_1); | 15177 return (XML_SCHEMAP_ST_PROPS_CORRECT_1); |
15148 | 15178 |
15149 } | 15179 } |
15150 if (! WXS_IS_SIMPLE(baseType)) { | 15180 if (! WXS_IS_SIMPLE(baseType)) { |
15151 xmlSchemaPCustomErr(ctxt, | 15181 xmlSchemaPCustomErr(ctxt, |
15152 XML_SCHEMAP_ST_PROPS_CORRECT_1, | 15182 XML_SCHEMAP_ST_PROPS_CORRECT_1, |
15153 WXS_BASIC_CAST type, NULL, | 15183 WXS_BASIC_CAST type, NULL, |
15154 "The base type '%s' is not a simple type", | 15184 "The base type '%s' is not a simple type", |
15155 xmlSchemaGetComponentQName(&str, baseType)); | 15185 xmlSchemaGetComponentQName(&str, baseType)); |
15156 FREE_AND_NULL(str) | 15186 FREE_AND_NULL(str) |
15157 return (XML_SCHEMAP_ST_PROPS_CORRECT_1); | 15187 return (XML_SCHEMAP_ST_PROPS_CORRECT_1); |
15158 } | 15188 } |
15159 if ( (WXS_IS_LIST(type) || WXS_IS_UNION(type)) && | 15189 if ((WXS_IS_LIST(type) || WXS_IS_UNION(type)) && |
15160 » (WXS_IS_RESTRICTION(type) == 0) && | 15190 » (WXS_IS_RESTRICTION(type) == 0) && |
15161 » (! WXS_IS_ANY_SIMPLE_TYPE(baseType))) { | 15191 » ((! WXS_IS_ANY_SIMPLE_TYPE(baseType)) && |
| 15192 (baseType->type != XML_SCHEMA_TYPE_SIMPLE))) { |
15162 xmlSchemaPCustomErr(ctxt, | 15193 xmlSchemaPCustomErr(ctxt, |
15163 XML_SCHEMAP_ST_PROPS_CORRECT_1, | 15194 XML_SCHEMAP_ST_PROPS_CORRECT_1, |
15164 WXS_BASIC_CAST type, NULL, | 15195 WXS_BASIC_CAST type, NULL, |
15165 "A type, derived by list or union, must have " | 15196 "A type, derived by list or union, must have " |
15166 "the simple ur-type definition as base type, not '%s'", | 15197 "the simple ur-type definition as base type, not '%s'", |
15167 xmlSchemaGetComponentQName(&str, baseType)); | 15198 xmlSchemaGetComponentQName(&str, baseType)); |
15168 FREE_AND_NULL(str) | 15199 FREE_AND_NULL(str) |
15169 return (XML_SCHEMAP_ST_PROPS_CORRECT_1); | 15200 return (XML_SCHEMAP_ST_PROPS_CORRECT_1); |
15170 } | 15201 } |
15171 /* | 15202 /* |
(...skipping 18 matching lines...) Expand all Loading... |
15190 XML_SCHEMAP_ST_PROPS_CORRECT_3, | 15221 XML_SCHEMAP_ST_PROPS_CORRECT_3, |
15191 WXS_BASIC_CAST type, NULL, | 15222 WXS_BASIC_CAST type, NULL, |
15192 "The 'final' of its base type '%s' must not contain " | 15223 "The 'final' of its base type '%s' must not contain " |
15193 "'restriction'", | 15224 "'restriction'", |
15194 xmlSchemaGetComponentQName(&str, baseType)); | 15225 xmlSchemaGetComponentQName(&str, baseType)); |
15195 FREE_AND_NULL(str) | 15226 FREE_AND_NULL(str) |
15196 return (XML_SCHEMAP_ST_PROPS_CORRECT_3); | 15227 return (XML_SCHEMAP_ST_PROPS_CORRECT_3); |
15197 } | 15228 } |
15198 | 15229 |
15199 /* | 15230 /* |
15200 * 2 All simple type definitions must be derived ultimately from the �simple | 15231 * 2 All simple type definitions must be derived ultimately from the `simple |
15201 * ur-type definition (so� circular definitions are disallowed). That is, it | 15232 * ur-type definition` (so circular definitions are disallowed). That is, it |
15202 * must be possible to reach a built-in primitive datatype or the �simple | 15233 * must be possible to reach a built-in primitive datatype or the `simple |
15203 * ur-type definition� by repeatedly following the {base type definition}. | 15234 * ur-type definition` by repeatedly following the {base type definition}. |
15204 * | 15235 * |
15205 * NOTE: this is done in xmlSchemaCheckTypeDefCircular(). | 15236 * NOTE: this is done in xmlSchemaCheckTypeDefCircular(). |
15206 */ | 15237 */ |
15207 return (0); | 15238 return (0); |
15208 } | 15239 } |
15209 | 15240 |
15210 /** | 15241 /** |
15211 * xmlSchemaCheckCOSSTRestricts: | 15242 * xmlSchemaCheckCOSSTRestricts: |
15212 * @ctxt: the schema parser context | 15243 * @ctxt: the schema parser context |
15213 * @type: the simple type definition | 15244 * @type: the simple type definition |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15377 xmlSchemaPIllegalFacetListUnionErr(pctxt, | 15408 xmlSchemaPIllegalFacetListUnionErr(pctxt, |
15378 XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2, | 15409 XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2, |
15379 type, facet); | 15410 type, facet); |
15380 return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2); | 15411 return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2); |
15381 } | 15412 } |
15382 facet = facet->next; | 15413 facet = facet->next; |
15383 } while (facet != NULL); | 15414 } while (facet != NULL); |
15384 } | 15415 } |
15385 /* | 15416 /* |
15386 * MAYBE TODO: (Hmm, not really) Datatypes states: | 15417 * MAYBE TODO: (Hmm, not really) Datatypes states: |
15387 » * A �list� datatype can be �derived� from an �atomic� datatype | 15418 » * A `list` datatype can be `derived` from an `atomic` datatype |
15388 » * whose �lexical space� allows space (such as string or anyURI)or | 15419 » * whose `lexical space` allows space (such as string or anyURI)or |
15389 » * a �union� datatype any of whose {member type definitions}'s | 15420 » * a `union` datatype any of whose {member type definitions}'s |
15390 » * �lexical space� allows space. | 15421 » * `lexical space` allows space. |
15391 */ | 15422 */ |
15392 } else { | 15423 } else { |
15393 /* | 15424 /* |
15394 * This is the case if we have: <simpleType><restriction ... | 15425 * This is the case if we have: <simpleType><restriction ... |
15395 * I.e. the variety of "list" is inherited. | 15426 * I.e. the variety of "list" is inherited. |
15396 */ | 15427 */ |
15397 /* | 15428 /* |
15398 * 2.3.2 | 15429 * 2.3.2 |
15399 * 2.3.2.1 The {base type definition} must have a {variety} of list. | 15430 * 2.3.2.1 The {base type definition} must have a {variety} of list. |
15400 */ | 15431 */ |
(...skipping 16 matching lines...) Expand all Loading... |
15417 XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2, | 15448 XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2, |
15418 WXS_BASIC_CAST type, NULL, | 15449 WXS_BASIC_CAST type, NULL, |
15419 "The 'final' of the base type '%s' must not contain 'restric
tion'", | 15450 "The 'final' of the base type '%s' must not contain 'restric
tion'", |
15420 xmlSchemaGetComponentQName(&str, type->baseType)); | 15451 xmlSchemaGetComponentQName(&str, type->baseType)); |
15421 FREE_AND_NULL(str) | 15452 FREE_AND_NULL(str) |
15422 return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2); | 15453 return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2); |
15423 } | 15454 } |
15424 /* | 15455 /* |
15425 * 2.3.2.3 The {item type definition} must be validly derived | 15456 * 2.3.2.3 The {item type definition} must be validly derived |
15426 * from the {base type definition}'s {item type definition} given | 15457 * from the {base type definition}'s {item type definition} given |
15427 » * the empty set, as defined in Type Derivation OK (Simple) (�3.14.6)
. | 15458 » * the empty set, as defined in Type Derivation OK (Simple) ($3.14.6)
. |
15428 */ | 15459 */ |
15429 { | 15460 { |
15430 xmlSchemaTypePtr baseItemType; | 15461 xmlSchemaTypePtr baseItemType; |
15431 | 15462 |
15432 baseItemType = type->baseType->subtypes; | 15463 baseItemType = type->baseType->subtypes; |
15433 if ((baseItemType == NULL) || (! WXS_IS_SIMPLE(baseItemType))) { | 15464 if ((baseItemType == NULL) || (! WXS_IS_SIMPLE(baseItemType))) { |
15434 PERROR_INT("xmlSchemaCheckCOSSTRestricts", | 15465 PERROR_INT("xmlSchemaCheckCOSSTRestricts", |
15435 "failed to eval the item type of a base type"); | 15466 "failed to eval the item type of a base type"); |
15436 return (-1); | 15467 return (-1); |
15437 } | 15468 } |
(...skipping 26 matching lines...) Expand all Loading... |
15464 */ | 15495 */ |
15465 facet = type->facets; | 15496 facet = type->facets; |
15466 do { | 15497 do { |
15467 switch (facet->type) { | 15498 switch (facet->type) { |
15468 case XML_SCHEMA_FACET_LENGTH: | 15499 case XML_SCHEMA_FACET_LENGTH: |
15469 case XML_SCHEMA_FACET_MINLENGTH: | 15500 case XML_SCHEMA_FACET_MINLENGTH: |
15470 case XML_SCHEMA_FACET_MAXLENGTH: | 15501 case XML_SCHEMA_FACET_MAXLENGTH: |
15471 case XML_SCHEMA_FACET_WHITESPACE: | 15502 case XML_SCHEMA_FACET_WHITESPACE: |
15472 /* | 15503 /* |
15473 * TODO: 2.5.1.2 List datatypes | 15504 * TODO: 2.5.1.2 List datatypes |
15474 » » » * The value of �whiteSpace� is fixed to the value co
llapse. | 15505 » » » * The value of `whiteSpace` is fixed to the value co
llapse. |
15475 */ | 15506 */ |
15476 case XML_SCHEMA_FACET_PATTERN: | 15507 case XML_SCHEMA_FACET_PATTERN: |
15477 case XML_SCHEMA_FACET_ENUMERATION: | 15508 case XML_SCHEMA_FACET_ENUMERATION: |
15478 break; | 15509 break; |
15479 default: { | 15510 default: { |
15480 xmlSchemaPIllegalFacetListUnionErr(pctxt, | 15511 xmlSchemaPIllegalFacetListUnionErr(pctxt, |
15481 XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4, | 15512 XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4, |
15482 type, facet); | 15513 type, facet); |
15483 /* | 15514 /* |
15484 * We could return, but it's nicer to report all | 15515 * We could return, but it's nicer to report all |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15517 XML_SCHEMAP_COS_ST_RESTRICTS_3_1, | 15548 XML_SCHEMAP_COS_ST_RESTRICTS_3_1, |
15518 WXS_BASIC_CAST type, NULL, | 15549 WXS_BASIC_CAST type, NULL, |
15519 "The member type '%s' is neither an atomic, nor a list type"
, | 15550 "The member type '%s' is neither an atomic, nor a list type"
, |
15520 xmlSchemaGetComponentQName(&str, member->type)); | 15551 xmlSchemaGetComponentQName(&str, member->type)); |
15521 FREE_AND_NULL(str) | 15552 FREE_AND_NULL(str) |
15522 return (XML_SCHEMAP_COS_ST_RESTRICTS_3_1); | 15553 return (XML_SCHEMAP_COS_ST_RESTRICTS_3_1); |
15523 } | 15554 } |
15524 member = member->next; | 15555 member = member->next; |
15525 } | 15556 } |
15526 /* | 15557 /* |
15527 » * 3.3.1 If the {base type definition} is the �simple ur-type | 15558 » * 3.3.1 If the {base type definition} is the `simple ur-type |
15528 » * definition� | 15559 » * definition` |
15529 */ | 15560 */ |
15530 if (type->baseType->builtInType == XML_SCHEMAS_ANYSIMPLETYPE) { | 15561 if (type->baseType->builtInType == XML_SCHEMAS_ANYSIMPLETYPE) { |
15531 /* | 15562 /* |
15532 * 3.3.1.1 All of the {member type definitions} must have a | 15563 * 3.3.1.1 All of the {member type definitions} must have a |
15533 * {final} which does not contain union. | 15564 * {final} which does not contain union. |
15534 */ | 15565 */ |
15535 member = type->memberTypes; | 15566 member = type->memberTypes; |
15536 while (member != NULL) { | 15567 while (member != NULL) { |
15537 if (xmlSchemaTypeFinalContains(member->type, | 15568 if (xmlSchemaTypeFinalContains(member->type, |
15538 XML_SCHEMAS_TYPE_FINAL_UNION)) { | 15569 XML_SCHEMAS_TYPE_FINAL_UNION)) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15580 WXS_BASIC_CAST type, NULL, | 15611 WXS_BASIC_CAST type, NULL, |
15581 "The 'final' of its base type '%s' must not contain 'restric
tion'", | 15612 "The 'final' of its base type '%s' must not contain 'restric
tion'", |
15582 xmlSchemaGetComponentQName(&str, type->baseType)); | 15613 xmlSchemaGetComponentQName(&str, type->baseType)); |
15583 FREE_AND_NULL(str) | 15614 FREE_AND_NULL(str) |
15584 return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2); | 15615 return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2); |
15585 } | 15616 } |
15586 /* | 15617 /* |
15587 * 3.3.2.3 The {member type definitions}, in order, must be validly | 15618 * 3.3.2.3 The {member type definitions}, in order, must be validly |
15588 * derived from the corresponding type definitions in the {base | 15619 * derived from the corresponding type definitions in the {base |
15589 * type definition}'s {member type definitions} given the empty set, | 15620 * type definition}'s {member type definitions} given the empty set, |
15590 » * as defined in Type Derivation OK (Simple) (�3.14.6). | 15621 » * as defined in Type Derivation OK (Simple) ($3.14.6). |
15591 */ | 15622 */ |
15592 { | 15623 { |
15593 xmlSchemaTypeLinkPtr baseMember; | 15624 xmlSchemaTypeLinkPtr baseMember; |
15594 | 15625 |
15595 /* | 15626 /* |
15596 * OPTIMIZE: if the type is restricting, it has no local defined | 15627 * OPTIMIZE: if the type is restricting, it has no local defined |
15597 * member types and inherits the member types of the base type; | 15628 * member types and inherits the member types of the base type; |
15598 * thus a check for equality can be skipped. | 15629 * thus a check for equality can be skipped. |
15599 */ | 15630 */ |
15600 /* | 15631 /* |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15687 * errors. | 15718 * errors. |
15688 */ | 15719 */ |
15689 #if 0 | 15720 #if 0 |
15690 static int | 15721 static int |
15691 xmlSchemaCheckSRCSimpleType(xmlSchemaParserCtxtPtr ctxt, | 15722 xmlSchemaCheckSRCSimpleType(xmlSchemaParserCtxtPtr ctxt, |
15692 xmlSchemaTypePtr type) | 15723 xmlSchemaTypePtr type) |
15693 { | 15724 { |
15694 /* | 15725 /* |
15695 * src-simple-type.1 The corresponding simple type definition, if any, | 15726 * src-simple-type.1 The corresponding simple type definition, if any, |
15696 * must satisfy the conditions set out in Constraints on Simple Type | 15727 * must satisfy the conditions set out in Constraints on Simple Type |
15697 * Definition Schema Components (�3.14.6). | 15728 * Definition Schema Components ($3.14.6). |
15698 */ | 15729 */ |
15699 if (WXS_IS_RESTRICTION(type)) { | 15730 if (WXS_IS_RESTRICTION(type)) { |
15700 /* | 15731 /* |
15701 * src-simple-type.2 "If the <restriction> alternative is chosen, | 15732 * src-simple-type.2 "If the <restriction> alternative is chosen, |
15702 * either it must have a base [attribute] or a <simpleType> among its | 15733 * either it must have a base [attribute] or a <simpleType> among its |
15703 * [children], but not both." | 15734 * [children], but not both." |
15704 * NOTE: This is checked in the parse function of <restriction>. | 15735 * NOTE: This is checked in the parse function of <restriction>. |
15705 */ | 15736 */ |
15706 /* | 15737 /* |
15707 * | 15738 * |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15785 * For a string to be a valid default with respect to a type | 15816 * For a string to be a valid default with respect to a type |
15786 * definition the appropriate case among the following must be true: | 15817 * definition the appropriate case among the following must be true: |
15787 */ | 15818 */ |
15788 if WXS_IS_COMPLEX(type) { | 15819 if WXS_IS_COMPLEX(type) { |
15789 /* | 15820 /* |
15790 * Complex type. | 15821 * Complex type. |
15791 * | 15822 * |
15792 * SPEC (2.1) "its {content type} must be a simple type definition | 15823 * SPEC (2.1) "its {content type} must be a simple type definition |
15793 * or mixed." | 15824 * or mixed." |
15794 * SPEC (2.2.2) "If the {content type} is mixed, then the {content | 15825 * SPEC (2.2.2) "If the {content type} is mixed, then the {content |
15795 » * type}'s particle must be �emptiable� as defined by | 15826 » * type}'s particle must be `emptiable` as defined by |
15796 » * Particle Emptiable (�3.9.6)." | 15827 » * Particle Emptiable ($3.9.6)." |
15797 */ | 15828 */ |
15798 if ((! WXS_HAS_SIMPLE_CONTENT(type)) && | 15829 if ((! WXS_HAS_SIMPLE_CONTENT(type)) && |
15799 ((! WXS_HAS_MIXED_CONTENT(type)) || (! WXS_EMPTIABLE(type)))) { | 15830 ((! WXS_HAS_MIXED_CONTENT(type)) || (! WXS_EMPTIABLE(type)))) { |
15800 /* NOTE that this covers (2.2.2) as well. */ | 15831 /* NOTE that this covers (2.2.2) as well. */ |
15801 xmlSchemaPCustomErr(pctxt, | 15832 xmlSchemaPCustomErr(pctxt, |
15802 XML_SCHEMAP_COS_VALID_DEFAULT_2_1, | 15833 XML_SCHEMAP_COS_VALID_DEFAULT_2_1, |
15803 WXS_BASIC_CAST type, type->node, | 15834 WXS_BASIC_CAST type, type->node, |
15804 "For a string to be a valid default, the type definition " | 15835 "For a string to be a valid default, the type definition " |
15805 "must be a simple type or a complex type with mixed content " | 15836 "must be a simple type or a complex type with mixed content " |
15806 "and a particle emptiable", NULL); | 15837 "and a particle emptiable", NULL); |
15807 return(XML_SCHEMAP_COS_VALID_DEFAULT_2_1); | 15838 return(XML_SCHEMAP_COS_VALID_DEFAULT_2_1); |
15808 } | 15839 } |
15809 } | 15840 } |
15810 /* | 15841 /* |
15811 * 1 If the type definition is a simple type definition, then the string | 15842 * 1 If the type definition is a simple type definition, then the string |
15812 * must be �valid� with respect to that definition as defined by String | 15843 * must be `valid` with respect to that definition as defined by String |
15813 * Valid (�3.14.4). | 15844 * Valid ($3.14.4). |
15814 * | 15845 * |
15815 * AND | 15846 * AND |
15816 * | 15847 * |
15817 * 2.2.1 If the {content type} is a simple type definition, then the | 15848 * 2.2.1 If the {content type} is a simple type definition, then the |
15818 * string must be �valid� with respect to that simple type definition | 15849 * string must be `valid` with respect to that simple type definition |
15819 * as defined by String Valid (�3.14.4). | 15850 * as defined by String Valid ($3.14.4). |
15820 */ | 15851 */ |
15821 if (WXS_IS_SIMPLE(type)) | 15852 if (WXS_IS_SIMPLE(type)) |
15822 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, node, | 15853 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, node, |
15823 type, value, val, 1, 1, 0); | 15854 type, value, val, 1, 1, 0); |
15824 else if (WXS_HAS_SIMPLE_CONTENT(type)) | 15855 else if (WXS_HAS_SIMPLE_CONTENT(type)) |
15825 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, node, | 15856 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, node, |
15826 type->contentTypeDef, value, val, 1, 1, 0); | 15857 type->contentTypeDef, value, val, 1, 1, 0); |
15827 else | 15858 else |
15828 return (ret); | 15859 return (ret); |
15829 | 15860 |
(...skipping 20 matching lines...) Expand all Loading... |
15850 */ | 15881 */ |
15851 static int | 15882 static int |
15852 xmlSchemaCheckCTPropsCorrect(xmlSchemaParserCtxtPtr pctxt, | 15883 xmlSchemaCheckCTPropsCorrect(xmlSchemaParserCtxtPtr pctxt, |
15853 xmlSchemaTypePtr type) | 15884 xmlSchemaTypePtr type) |
15854 { | 15885 { |
15855 /* | 15886 /* |
15856 * TODO: Correct the error code; XML_SCHEMAP_SRC_CT_1 is used temporarily. | 15887 * TODO: Correct the error code; XML_SCHEMAP_SRC_CT_1 is used temporarily. |
15857 * | 15888 * |
15858 * SPEC (1) "The values of the properties of a complex type definition must | 15889 * SPEC (1) "The values of the properties of a complex type definition must |
15859 * be as described in the property tableau in The Complex Type Definition | 15890 * be as described in the property tableau in The Complex Type Definition |
15860 * Schema Component (�3.4.1), modulo the impact of Missing | 15891 * Schema Component ($3.4.1), modulo the impact of Missing |
15861 * Sub-components (�5.3)." | 15892 * Sub-components ($5.3)." |
15862 */ | 15893 */ |
15863 if ((type->baseType != NULL) && | 15894 if ((type->baseType != NULL) && |
15864 (WXS_IS_SIMPLE(type->baseType)) && | 15895 (WXS_IS_SIMPLE(type->baseType)) && |
15865 (WXS_IS_EXTENSION(type) == 0)) { | 15896 (WXS_IS_EXTENSION(type) == 0)) { |
15866 /* | 15897 /* |
15867 * SPEC (2) "If the {base type definition} is a simple type definition, | 15898 * SPEC (2) "If the {base type definition} is a simple type definition, |
15868 * the {derivation method} must be extension." | 15899 * the {derivation method} must be extension." |
15869 */ | 15900 */ |
15870 xmlSchemaCustomErr(ACTXT_CAST pctxt, | 15901 xmlSchemaCustomErr(ACTXT_CAST pctxt, |
15871 XML_SCHEMAP_SRC_CT_1, | 15902 XML_SCHEMAP_SRC_CT_1, |
15872 NULL, WXS_BASIC_CAST type, | 15903 NULL, WXS_BASIC_CAST type, |
15873 "If the base type is a simple type, the derivation method must be " | 15904 "If the base type is a simple type, the derivation method must be " |
15874 "'extension'", NULL, NULL); | 15905 "'extension'", NULL, NULL); |
15875 return (XML_SCHEMAP_SRC_CT_1); | 15906 return (XML_SCHEMAP_SRC_CT_1); |
15876 } | 15907 } |
15877 /* | 15908 /* |
15878 * SPEC (3) "Circular definitions are disallowed, except for the �ur-type | 15909 * SPEC (3) "Circular definitions are disallowed, except for the `ur-type |
15879 * definition�. That is, it must be possible to reach the �ur-type | 15910 * definition`. That is, it must be possible to reach the `ur-type |
15880 * definition by repeatedly following the {base type definition}." | 15911 * definition` by repeatedly following the {base type definition}." |
15881 * | 15912 * |
15882 * NOTE (3) is done in xmlSchemaCheckTypeDefCircular(). | 15913 * NOTE (3) is done in xmlSchemaCheckTypeDefCircular(). |
15883 */ | 15914 */ |
15884 /* | 15915 /* |
15885 * NOTE that (4) and (5) need the following: | 15916 * NOTE that (4) and (5) need the following: |
15886 * - attribute uses need to be already inherited (apply attr. prohibitions) | 15917 * - attribute uses need to be already inherited (apply attr. prohibitions) |
15887 * - attribute group references need to be expanded already | 15918 * - attribute group references need to be expanded already |
15888 * - simple types need to be typefixed already | 15919 * - simple types need to be typefixed already |
15889 */ | 15920 */ |
15890 if (type->attrUses && | 15921 if (type->attrUses && |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16022 * SPEC (2.1) "B and D must be the same type definition." | 16053 * SPEC (2.1) "B and D must be the same type definition." |
16023 */ | 16054 */ |
16024 return (0); | 16055 return (0); |
16025 } | 16056 } |
16026 /* | 16057 /* |
16027 * SPEC (2.2) "B must be D's {base type definition}." | 16058 * SPEC (2.2) "B must be D's {base type definition}." |
16028 */ | 16059 */ |
16029 if (type->baseType == baseType) | 16060 if (type->baseType == baseType) |
16030 return (0); | 16061 return (0); |
16031 /* | 16062 /* |
16032 * SPEC (2.3.1) "D's {base type definition} must not be the �ur-type | 16063 * SPEC (2.3.1) "D's {base type definition} must not be the `ur-type |
16033 * definition�." | 16064 * definition`." |
16034 */ | 16065 */ |
16035 if (WXS_IS_ANYTYPE(type->baseType)) | 16066 if (WXS_IS_ANYTYPE(type->baseType)) |
16036 return (1); | 16067 return (1); |
16037 | 16068 |
16038 if (WXS_IS_COMPLEX(type->baseType)) { | 16069 if (WXS_IS_COMPLEX(type->baseType)) { |
16039 /* | 16070 /* |
16040 * SPEC (2.3.2.1) "If D's {base type definition} is complex, then it | 16071 * SPEC (2.3.2.1) "If D's {base type definition} is complex, then it |
16041 * must be validly derived from B given the subset as defined by this | 16072 * must be validly derived from B given the subset as defined by this |
16042 * constraint." | 16073 * constraint." |
16043 */ | 16074 */ |
16044 return (xmlSchemaCheckCOSCTDerivedOK(actxt, type->baseType, | 16075 return (xmlSchemaCheckCOSCTDerivedOK(actxt, type->baseType, |
16045 baseType, set)); | 16076 baseType, set)); |
16046 } else { | 16077 } else { |
16047 /* | 16078 /* |
16048 * SPEC (2.3.2.2) "If D's {base type definition} is simple, then it | 16079 * SPEC (2.3.2.2) "If D's {base type definition} is simple, then it |
16049 * must be validly derived from B given the subset as defined in Type | 16080 * must be validly derived from B given the subset as defined in Type |
16050 » * Derivation OK (Simple) (�3.14.6). | 16081 » * Derivation OK (Simple) ($3.14.6). |
16051 */ | 16082 */ |
16052 return (xmlSchemaCheckCOSSTDerivedOK(actxt, type->baseType, | 16083 return (xmlSchemaCheckCOSSTDerivedOK(actxt, type->baseType, |
16053 baseType, set)); | 16084 baseType, set)); |
16054 } | 16085 } |
16055 } | 16086 } |
16056 | 16087 |
16057 /** | 16088 /** |
16058 * xmlSchemaCheckCOSDerivedOK: | 16089 * xmlSchemaCheckCOSDerivedOK: |
16059 * @type: the derived simple type definition | 16090 * @type: the derived simple type definition |
16060 * @baseType: the base type definition | 16091 * @baseType: the base type definition |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16180 NULL); | 16211 NULL); |
16181 FREE_AND_NULL(str) | 16212 FREE_AND_NULL(str) |
16182 } | 16213 } |
16183 } | 16214 } |
16184 } | 16215 } |
16185 /* | 16216 /* |
16186 * SPEC (1.3) "If it has an {attribute wildcard}, the complex type | 16217 * SPEC (1.3) "If it has an {attribute wildcard}, the complex type |
16187 * definition must also have one, and the base type definition's | 16218 * definition must also have one, and the base type definition's |
16188 * {attribute wildcard}'s {namespace constraint} must be a subset | 16219 * {attribute wildcard}'s {namespace constraint} must be a subset |
16189 * of the complex type definition's {attribute wildcard}'s {namespace | 16220 * of the complex type definition's {attribute wildcard}'s {namespace |
16190 » * constraint}, as defined by Wildcard Subset (�3.10.6)." | 16221 » * constraint}, as defined by Wildcard Subset ($3.10.6)." |
16191 */ | 16222 */ |
16192 | 16223 |
16193 /* | 16224 /* |
16194 * MAYBE TODO: Enable if ever needed. But this will be needed only | 16225 * MAYBE TODO: Enable if ever needed. But this will be needed only |
16195 * if created the type via a schema construction API. | 16226 * if created the type via a schema construction API. |
16196 */ | 16227 */ |
16197 if (base->attributeWildcard != NULL) { | 16228 if (base->attributeWildcard != NULL) { |
16198 if (type->attributeWilcard == NULL) { | 16229 if (type->attributeWilcard == NULL) { |
16199 xmlChar *str = NULL; | 16230 xmlChar *str = NULL; |
16200 | 16231 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16277 */ | 16308 */ |
16278 xmlSchemaPCustomErr(ctxt, | 16309 xmlSchemaPCustomErr(ctxt, |
16279 XML_SCHEMAP_COS_CT_EXTENDS_1_1, | 16310 XML_SCHEMAP_COS_CT_EXTENDS_1_1, |
16280 WXS_BASIC_CAST type, NULL, | 16311 WXS_BASIC_CAST type, NULL, |
16281 "The content type of both, the type and its base " | 16312 "The content type of both, the type and its base " |
16282 "type, must either 'mixed' or 'element-only'", NULL); | 16313 "type, must either 'mixed' or 'element-only'", NULL); |
16283 return (XML_SCHEMAP_COS_CT_EXTENDS_1_1); | 16314 return (XML_SCHEMAP_COS_CT_EXTENDS_1_1); |
16284 } | 16315 } |
16285 /* | 16316 /* |
16286 * URGENT TODO SPEC (1.4.3.2.2.2) "The particle of the | 16317 * URGENT TODO SPEC (1.4.3.2.2.2) "The particle of the |
16287 » » * complex type definition must be a �valid extension� | 16318 » » * complex type definition must be a `valid extension` |
16288 * of the {base type definition}'s particle, as defined | 16319 * of the {base type definition}'s particle, as defined |
16289 » » * in Particle Valid (Extension) (�3.9.6)." | 16320 » » * in Particle Valid (Extension) ($3.9.6)." |
16290 * | 16321 * |
16291 * NOTE that we won't check "Particle Valid (Extension)", | 16322 * NOTE that we won't check "Particle Valid (Extension)", |
16292 * since it is ensured by the derivation process in | 16323 * since it is ensured by the derivation process in |
16293 * xmlSchemaTypeFixup(). We need to implement this when heading | 16324 * xmlSchemaTypeFixup(). We need to implement this when heading |
16294 * for a construction API | 16325 * for a construction API |
16295 * TODO: !! This is needed to be checked if redefining a type !! | 16326 * TODO: !! This is needed to be checked if redefining a type !! |
16296 */ | 16327 */ |
16297 } | 16328 } |
16298 /* | 16329 /* |
16299 * URGENT TODO (1.5) | 16330 * URGENT TODO (1.5) |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16396 base->attributeWildcard) == -1) | 16427 base->attributeWildcard) == -1) |
16397 { | 16428 { |
16398 return(-1); | 16429 return(-1); |
16399 } | 16430 } |
16400 /* | 16431 /* |
16401 * SPEC (5) "One of the following must be true:" | 16432 * SPEC (5) "One of the following must be true:" |
16402 */ | 16433 */ |
16403 if (base->builtInType == XML_SCHEMAS_ANYTYPE) { | 16434 if (base->builtInType == XML_SCHEMAS_ANYTYPE) { |
16404 /* | 16435 /* |
16405 * SPEC (5.1) "The {base type definition} must be the | 16436 * SPEC (5.1) "The {base type definition} must be the |
16406 » * �ur-type definition�." | 16437 » * `ur-type definition`." |
16407 * PASS | 16438 * PASS |
16408 */ | 16439 */ |
16409 } else if ((type->contentType == XML_SCHEMA_CONTENT_SIMPLE) || | 16440 } else if ((type->contentType == XML_SCHEMA_CONTENT_SIMPLE) || |
16410 (type->contentType == XML_SCHEMA_CONTENT_BASIC)) { | 16441 (type->contentType == XML_SCHEMA_CONTENT_BASIC)) { |
16411 /* | 16442 /* |
16412 * SPEC (5.2.1) "The {content type} of the complex type definition | 16443 * SPEC (5.2.1) "The {content type} of the complex type definition |
16413 * must be a simple type definition" | 16444 * must be a simple type definition" |
16414 * | 16445 * |
16415 * SPEC (5.2.2) "One of the following must be true:" | 16446 * SPEC (5.2.2) "One of the following must be true:" |
16416 */ | 16447 */ |
16417 if ((base->contentType == XML_SCHEMA_CONTENT_SIMPLE) || | 16448 if ((base->contentType == XML_SCHEMA_CONTENT_SIMPLE) || |
16418 (base->contentType == XML_SCHEMA_CONTENT_BASIC)) | 16449 (base->contentType == XML_SCHEMA_CONTENT_BASIC)) |
16419 { | 16450 { |
16420 int err; | 16451 int err; |
16421 /* | 16452 /* |
16422 * SPEC (5.2.2.1) "The {content type} of the {base type | 16453 * SPEC (5.2.2.1) "The {content type} of the {base type |
16423 * definition} must be a simple type definition from which | 16454 * definition} must be a simple type definition from which |
16424 * the {content type} is validly derived given the empty | 16455 * the {content type} is validly derived given the empty |
16425 » * set as defined in Type Derivation OK (Simple) (�3.14.6)." | 16456 » * set as defined in Type Derivation OK (Simple) ($3.14.6)." |
16426 * | 16457 * |
16427 * ATTENTION TODO: This seems not needed if the type implicitely | 16458 * ATTENTION TODO: This seems not needed if the type implicitely |
16428 * derived from the base type. | 16459 * derived from the base type. |
16429 * | 16460 * |
16430 */ | 16461 */ |
16431 err = xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST ctxt, | 16462 err = xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST ctxt, |
16432 type->contentTypeDef, base->contentTypeDef, 0); | 16463 type->contentTypeDef, base->contentTypeDef, 0); |
16433 if (err != 0) { | 16464 if (err != 0) { |
16434 xmlChar *strA = NULL, *strB = NULL; | 16465 xmlChar *strA = NULL, *strB = NULL; |
16435 | 16466 |
(...skipping 10 matching lines...) Expand all Loading... |
16446 base->contentTypeDef)); | 16477 base->contentTypeDef)); |
16447 FREE_AND_NULL(strA); | 16478 FREE_AND_NULL(strA); |
16448 FREE_AND_NULL(strB); | 16479 FREE_AND_NULL(strB); |
16449 return(ctxt->err); | 16480 return(ctxt->err); |
16450 } | 16481 } |
16451 } else if ((base->contentType == XML_SCHEMA_CONTENT_MIXED) && | 16482 } else if ((base->contentType == XML_SCHEMA_CONTENT_MIXED) && |
16452 (xmlSchemaIsParticleEmptiable( | 16483 (xmlSchemaIsParticleEmptiable( |
16453 (xmlSchemaParticlePtr) base->subtypes))) { | 16484 (xmlSchemaParticlePtr) base->subtypes))) { |
16454 /* | 16485 /* |
16455 * SPEC (5.2.2.2) "The {base type definition} must be mixed | 16486 * SPEC (5.2.2.2) "The {base type definition} must be mixed |
16456 » * and have a particle which is �emptiable� as defined in | 16487 » * and have a particle which is `emptiable` as defined in |
16457 » * Particle Emptiable (�3.9.6)." | 16488 » * Particle Emptiable ($3.9.6)." |
16458 * PASS | 16489 * PASS |
16459 */ | 16490 */ |
16460 } else { | 16491 } else { |
16461 xmlSchemaPCustomErr(ctxt, | 16492 xmlSchemaPCustomErr(ctxt, |
16462 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, | 16493 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, |
16463 WXS_BASIC_CAST type, NULL, | 16494 WXS_BASIC_CAST type, NULL, |
16464 "The content type of the base type must be either " | 16495 "The content type of the base type must be either " |
16465 "a simple type or 'mixed' and an emptiable particle", NULL); | 16496 "a simple type or 'mixed' and an emptiable particle", NULL); |
16466 return (ctxt->err); | 16497 return (ctxt->err); |
16467 } | 16498 } |
16468 } else if (type->contentType == XML_SCHEMA_CONTENT_EMPTY) { | 16499 } else if (type->contentType == XML_SCHEMA_CONTENT_EMPTY) { |
16469 /* | 16500 /* |
16470 * SPEC (5.3.1) "The {content type} of the complex type itself must | 16501 * SPEC (5.3.1) "The {content type} of the complex type itself must |
16471 * be empty" | 16502 * be empty" |
16472 */ | 16503 */ |
16473 if (base->contentType == XML_SCHEMA_CONTENT_EMPTY) { | 16504 if (base->contentType == XML_SCHEMA_CONTENT_EMPTY) { |
16474 /* | 16505 /* |
16475 * SPEC (5.3.2.1) "The {content type} of the {base type | 16506 * SPEC (5.3.2.1) "The {content type} of the {base type |
16476 * definition} must also be empty." | 16507 * definition} must also be empty." |
16477 * PASS | 16508 * PASS |
16478 */ | 16509 */ |
16479 } else if (((base->contentType == XML_SCHEMA_CONTENT_ELEMENTS) || | 16510 } else if (((base->contentType == XML_SCHEMA_CONTENT_ELEMENTS) || |
16480 (base->contentType == XML_SCHEMA_CONTENT_MIXED)) && | 16511 (base->contentType == XML_SCHEMA_CONTENT_MIXED)) && |
16481 xmlSchemaIsParticleEmptiable( | 16512 xmlSchemaIsParticleEmptiable( |
16482 (xmlSchemaParticlePtr) base->subtypes)) { | 16513 (xmlSchemaParticlePtr) base->subtypes)) { |
16483 /* | 16514 /* |
16484 * SPEC (5.3.2.2) "The {content type} of the {base type | 16515 * SPEC (5.3.2.2) "The {content type} of the {base type |
16485 * definition} must be elementOnly or mixed and have a particle | 16516 * definition} must be elementOnly or mixed and have a particle |
16486 » * which is �emptiable� as defined in Particle Emptiable (�3.9.6)." | 16517 » * which is `emptiable` as defined in Particle Emptiable ($3.9.6)." |
16487 * PASS | 16518 * PASS |
16488 */ | 16519 */ |
16489 } else { | 16520 } else { |
16490 xmlSchemaPCustomErr(ctxt, | 16521 xmlSchemaPCustomErr(ctxt, |
16491 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, | 16522 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, |
16492 WXS_BASIC_CAST type, NULL, | 16523 WXS_BASIC_CAST type, NULL, |
16493 "The content type of the base type must be either " | 16524 "The content type of the base type must be either " |
16494 "empty or 'mixed' (or 'elements-only') and an emptiable " | 16525 "empty or 'mixed' (or 'elements-only') and an emptiable " |
16495 "particle", NULL); | 16526 "particle", NULL); |
16496 return (ctxt->err); | 16527 return (ctxt->err); |
(...skipping 12 matching lines...) Expand all Loading... |
16509 */ | 16540 */ |
16510 xmlSchemaPCustomErr(ctxt, | 16541 xmlSchemaPCustomErr(ctxt, |
16511 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, | 16542 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, |
16512 WXS_BASIC_CAST type, NULL, | 16543 WXS_BASIC_CAST type, NULL, |
16513 "If the content type is 'mixed', then the content type of the " | 16544 "If the content type is 'mixed', then the content type of the " |
16514 "base type must also be 'mixed'", NULL); | 16545 "base type must also be 'mixed'", NULL); |
16515 return (ctxt->err); | 16546 return (ctxt->err); |
16516 } | 16547 } |
16517 /* | 16548 /* |
16518 * SPEC (5.4.2) "The particle of the complex type definition itself | 16549 * SPEC (5.4.2) "The particle of the complex type definition itself |
16519 » * must be a �valid restriction� of the particle of the {content | 16550 » * must be a `valid restriction` of the particle of the {content |
16520 * type} of the {base type definition} as defined in Particle Valid | 16551 * type} of the {base type definition} as defined in Particle Valid |
16521 » * (Restriction) (�3.9.6). | 16552 » * (Restriction) ($3.9.6). |
16522 * | 16553 * |
16523 * URGENT TODO: (5.4.2) | 16554 * URGENT TODO: (5.4.2) |
16524 */ | 16555 */ |
16525 } else { | 16556 } else { |
16526 xmlSchemaPCustomErr(ctxt, | 16557 xmlSchemaPCustomErr(ctxt, |
16527 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, | 16558 XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, |
16528 WXS_BASIC_CAST type, NULL, | 16559 WXS_BASIC_CAST type, NULL, |
16529 "The type is not a valid restriction of its base type", NULL); | 16560 "The type is not a valid restriction of its base type", NULL); |
16530 return (ctxt->err); | 16561 return (ctxt->err); |
16531 } | 16562 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16580 int ret = 0; | 16611 int ret = 0; |
16581 | 16612 |
16582 /* | 16613 /* |
16583 * TODO: Adjust the error codes here, as I used | 16614 * TODO: Adjust the error codes here, as I used |
16584 * XML_SCHEMAP_SRC_CT_1 only yet. | 16615 * XML_SCHEMAP_SRC_CT_1 only yet. |
16585 */ | 16616 */ |
16586 base = type->baseType; | 16617 base = type->baseType; |
16587 if (! WXS_HAS_SIMPLE_CONTENT(type)) { | 16618 if (! WXS_HAS_SIMPLE_CONTENT(type)) { |
16588 /* | 16619 /* |
16589 * 1 If the <complexContent> alternative is chosen, the type definition | 16620 * 1 If the <complexContent> alternative is chosen, the type definition |
16590 » * �resolved� to by the �actual value� of the base [attribute] | 16621 » * `resolved` to by the `actual value` of the base [attribute] |
16591 * must be a complex type definition; | 16622 * must be a complex type definition; |
16592 */ | 16623 */ |
16593 if (! WXS_IS_COMPLEX(base)) { | 16624 if (! WXS_IS_COMPLEX(base)) { |
16594 xmlChar *str = NULL; | 16625 xmlChar *str = NULL; |
16595 xmlSchemaPCustomErr(ctxt, | 16626 xmlSchemaPCustomErr(ctxt, |
16596 XML_SCHEMAP_SRC_CT_1, | 16627 XML_SCHEMAP_SRC_CT_1, |
16597 WXS_BASIC_CAST type, type->node, | 16628 WXS_BASIC_CAST type, type->node, |
16598 "If using <complexContent>, the base type is expected to be " | 16629 "If using <complexContent>, the base type is expected to be " |
16599 "a complex type. The base type '%s' is a simple type", | 16630 "a complex type. The base type '%s' is a simple type", |
16600 xmlSchemaFormatQName(&str, base->targetNamespace, | 16631 xmlSchemaFormatQName(&str, base->targetNamespace, |
16601 base->name)); | 16632 base->name)); |
16602 FREE_AND_NULL(str) | 16633 FREE_AND_NULL(str) |
16603 return (XML_SCHEMAP_SRC_CT_1); | 16634 return (XML_SCHEMAP_SRC_CT_1); |
16604 } | 16635 } |
16605 } else { | 16636 } else { |
16606 /* | 16637 /* |
16607 * SPEC | 16638 * SPEC |
16608 * 2 If the <simpleContent> alternative is chosen, all of the | 16639 * 2 If the <simpleContent> alternative is chosen, all of the |
16609 * following must be true: | 16640 * following must be true: |
16610 » * 2.1 The type definition �resolved� to by the �actual value� of the | 16641 » * 2.1 The type definition `resolved` to by the `actual value` of the |
16611 * base [attribute] must be one of the following: | 16642 * base [attribute] must be one of the following: |
16612 */ | 16643 */ |
16613 if (WXS_IS_SIMPLE(base)) { | 16644 if (WXS_IS_SIMPLE(base)) { |
16614 if (WXS_IS_EXTENSION(type) == 0) { | 16645 if (WXS_IS_EXTENSION(type) == 0) { |
16615 xmlChar *str = NULL; | 16646 xmlChar *str = NULL; |
16616 /* | 16647 /* |
16617 * 2.1.3 only if the <extension> alternative is also | 16648 * 2.1.3 only if the <extension> alternative is also |
16618 * chosen, a simple type definition. | 16649 * chosen, a simple type definition. |
16619 */ | 16650 */ |
16620 /* TODO: Change error code to ..._SRC_CT_2_1_3. */ | 16651 /* TODO: Change error code to ..._SRC_CT_2_1_3. */ |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16706 "is a complex type", | 16737 "is a complex type", |
16707 xmlSchemaFormatQName(&str, base->targetNamespace, | 16738 xmlSchemaFormatQName(&str, base->targetNamespace, |
16708 base->name)); | 16739 base->name)); |
16709 } | 16740 } |
16710 FREE_AND_NULL(str) | 16741 FREE_AND_NULL(str) |
16711 } | 16742 } |
16712 } | 16743 } |
16713 /* | 16744 /* |
16714 * SPEC (3) "The corresponding complex type definition component must | 16745 * SPEC (3) "The corresponding complex type definition component must |
16715 * satisfy the conditions set out in Constraints on Complex Type | 16746 * satisfy the conditions set out in Constraints on Complex Type |
16716 * Definition Schema Components (�3.4.6);" | 16747 * Definition Schema Components ($3.4.6);" |
16717 * NOTE (3) will be done in xmlSchemaTypeFixup(). | 16748 * NOTE (3) will be done in xmlSchemaTypeFixup(). |
16718 */ | 16749 */ |
16719 /* | 16750 /* |
16720 * SPEC (4) If clause 2.2.1 or clause 2.2.2 in the correspondence specificati
on | 16751 * SPEC (4) If clause 2.2.1 or clause 2.2.2 in the correspondence specificati
on |
16721 * above for {attribute wildcard} is satisfied, the intensional | 16752 * above for {attribute wildcard} is satisfied, the intensional |
16722 * intersection must be expressible, as defined in Attribute Wildcard | 16753 * intersection must be expressible, as defined in Attribute Wildcard |
16723 * Intersection (�3.10.6). | 16754 * Intersection ($3.10.6). |
16724 * NOTE (4) is done in xmlSchemaFixupTypeAttributeUses(). | 16755 * NOTE (4) is done in xmlSchemaFixupTypeAttributeUses(). |
16725 */ | 16756 */ |
16726 return (ret); | 16757 return (ret); |
16727 } | 16758 } |
16728 | 16759 |
16729 #ifdef ENABLE_PARTICLE_RESTRICTION | 16760 #ifdef ENABLE_PARTICLE_RESTRICTION |
16730 /** | 16761 /** |
16731 * xmlSchemaCheckParticleRangeOK: | 16762 * xmlSchemaCheckParticleRangeOK: |
16732 * @ctxt: the schema parser context | 16763 * @ctxt: the schema parser context |
16733 * @type: the complex type definition | 16764 * @type: the complex type definition |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16784 /* | 16815 /* |
16785 * SPEC (1) "The declarations' {name}s and {target namespace}s are | 16816 * SPEC (1) "The declarations' {name}s and {target namespace}s are |
16786 * the same." | 16817 * the same." |
16787 */ | 16818 */ |
16788 if ((elemR != elemB) && | 16819 if ((elemR != elemB) && |
16789 ((! xmlStrEqual(elemR->name, elemB->name)) || | 16820 ((! xmlStrEqual(elemR->name, elemB->name)) || |
16790 (! xmlStrEqual(elemR->targetNamespace, elemB->targetNamespace)))) | 16821 (! xmlStrEqual(elemR->targetNamespace, elemB->targetNamespace)))) |
16791 return (1); | 16822 return (1); |
16792 /* | 16823 /* |
16793 * SPEC (2) "R's occurrence range is a valid restriction of B's | 16824 * SPEC (2) "R's occurrence range is a valid restriction of B's |
16794 * occurrence range as defined by Occurrence Range OK (�3.9.6)." | 16825 * occurrence range as defined by Occurrence Range OK ($3.9.6)." |
16795 */ | 16826 */ |
16796 if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs, | 16827 if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs, |
16797 b->minOccurs, b->maxOccurs) != 0) | 16828 b->minOccurs, b->maxOccurs) != 0) |
16798 return (1); | 16829 return (1); |
16799 /* | 16830 /* |
16800 * SPEC (3.1) "Both B's declaration's {scope} and R's declaration's | 16831 * SPEC (3.1) "Both B's declaration's {scope} and R's declaration's |
16801 * {scope} are global." | 16832 * {scope} are global." |
16802 */ | 16833 */ |
16803 if (elemR == elemB) | 16834 if (elemR == elemB) |
16804 return (0); | 16835 return (0); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16876 * Returns 0 if the constraints are satisfied, a positive | 16907 * Returns 0 if the constraints are satisfied, a positive |
16877 * error code if not and -1 if an internal error occured. | 16908 * error code if not and -1 if an internal error occured. |
16878 */ | 16909 */ |
16879 static int | 16910 static int |
16880 xmlSchemaCheckRCaseNSCompat(xmlSchemaParserCtxtPtr ctxt, | 16911 xmlSchemaCheckRCaseNSCompat(xmlSchemaParserCtxtPtr ctxt, |
16881 xmlSchemaParticlePtr r, | 16912 xmlSchemaParticlePtr r, |
16882 xmlSchemaParticlePtr b) | 16913 xmlSchemaParticlePtr b) |
16883 { | 16914 { |
16884 /* TODO:Error codes (rcase-NSCompat). */ | 16915 /* TODO:Error codes (rcase-NSCompat). */ |
16885 /* | 16916 /* |
16886 * SPEC "For an element declaration particle to be a �valid restriction� | 16917 * SPEC "For an element declaration particle to be a `valid restriction` |
16887 * of a wildcard particle all of the following must be true:" | 16918 * of a wildcard particle all of the following must be true:" |
16888 * | 16919 * |
16889 * SPEC (1) "The element declaration's {target namespace} is �valid� | 16920 * SPEC (1) "The element declaration's {target namespace} is `valid` |
16890 * with respect to the wildcard's {namespace constraint} as defined by | 16921 * with respect to the wildcard's {namespace constraint} as defined by |
16891 * Wildcard allows Namespace Name (�3.10.4)." | 16922 * Wildcard allows Namespace Name ($3.10.4)." |
16892 */ | 16923 */ |
16893 if (xmlSchemaCheckCVCWildcardNamespace((xmlSchemaWildcardPtr) b->children, | 16924 if (xmlSchemaCheckCVCWildcardNamespace((xmlSchemaWildcardPtr) b->children, |
16894 ((xmlSchemaElementPtr) r->children)->targetNamespace) != 0) | 16925 ((xmlSchemaElementPtr) r->children)->targetNamespace) != 0) |
16895 return (1); | 16926 return (1); |
16896 /* | 16927 /* |
16897 * SPEC (2) "R's occurrence range is a valid restriction of B's | 16928 * SPEC (2) "R's occurrence range is a valid restriction of B's |
16898 * occurrence range as defined by Occurrence Range OK (�3.9.6)." | 16929 * occurrence range as defined by Occurrence Range OK ($3.9.6)." |
16899 */ | 16930 */ |
16900 if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs, | 16931 if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs, |
16901 b->minOccurs, b->maxOccurs) != 0) | 16932 b->minOccurs, b->maxOccurs) != 0) |
16902 return (1); | 16933 return (1); |
16903 | 16934 |
16904 return (0); | 16935 return (0); |
16905 } | 16936 } |
16906 | 16937 |
16907 /** | 16938 /** |
16908 * xmlSchemaCheckRCaseRecurseAsIfGroup: | 16939 * xmlSchemaCheckRCaseRecurseAsIfGroup: |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16948 */ | 16979 */ |
16949 static int | 16980 static int |
16950 xmlSchemaCheckRCaseNSSubset(xmlSchemaParserCtxtPtr ctxt, | 16981 xmlSchemaCheckRCaseNSSubset(xmlSchemaParserCtxtPtr ctxt, |
16951 xmlSchemaParticlePtr r, | 16982 xmlSchemaParticlePtr r, |
16952 xmlSchemaParticlePtr b, | 16983 xmlSchemaParticlePtr b, |
16953 int isAnyTypeBase) | 16984 int isAnyTypeBase) |
16954 { | 16985 { |
16955 /* TODO: Error codes (rcase-NSSubset). */ | 16986 /* TODO: Error codes (rcase-NSSubset). */ |
16956 /* | 16987 /* |
16957 * SPEC (1) "R's occurrence range is a valid restriction of B's | 16988 * SPEC (1) "R's occurrence range is a valid restriction of B's |
16958 * occurrence range as defined by Occurrence Range OK (�3.9.6)." | 16989 * occurrence range as defined by Occurrence Range OK ($3.9.6)." |
16959 */ | 16990 */ |
16960 if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs, | 16991 if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs, |
16961 b->minOccurs, b->maxOccurs)) | 16992 b->minOccurs, b->maxOccurs)) |
16962 return (1); | 16993 return (1); |
16963 /* | 16994 /* |
16964 * SPEC (2) "R's {namespace constraint} must be an intensional subset | 16995 * SPEC (2) "R's {namespace constraint} must be an intensional subset |
16965 * of B's {namespace constraint} as defined by Wildcard Subset (�3.10.6)." | 16996 * of B's {namespace constraint} as defined by Wildcard Subset ($3.10.6)." |
16966 */ | 16997 */ |
16967 if (xmlSchemaCheckCOSNSSubset((xmlSchemaWildcardPtr) r->children, | 16998 if (xmlSchemaCheckCOSNSSubset((xmlSchemaWildcardPtr) r->children, |
16968 (xmlSchemaWildcardPtr) b->children)) | 16999 (xmlSchemaWildcardPtr) b->children)) |
16969 return (1); | 17000 return (1); |
16970 /* | 17001 /* |
16971 * SPEC (3) "Unless B is the content model wildcard of the �ur-type | 17002 * SPEC (3) "Unless B is the content model wildcard of the `ur-type |
16972 * definition�, R's {process contents} must be identical to or stronger | 17003 * definition`, R's {process contents} must be identical to or stronger |
16973 * than B's {process contents}, where strict is stronger than lax is | 17004 * than B's {process contents}, where strict is stronger than lax is |
16974 * stronger than skip." | 17005 * stronger than skip." |
16975 */ | 17006 */ |
16976 if (! isAnyTypeBase) { | 17007 if (! isAnyTypeBase) { |
16977 if ( ((xmlSchemaWildcardPtr) r->children)->processContents < | 17008 if ( ((xmlSchemaWildcardPtr) r->children)->processContents < |
16978 ((xmlSchemaWildcardPtr) b->children)->processContents) | 17009 ((xmlSchemaWildcardPtr) b->children)->processContents) |
16979 return (1); | 17010 return (1); |
16980 } | 17011 } |
16981 | 17012 |
16982 return (0); | 17013 return (0); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17040 static int | 17071 static int |
17041 xmlSchemaCheckRCaseNSRecurseCheckCardinality(xmlSchemaParserCtxtPtr ctxt, | 17072 xmlSchemaCheckRCaseNSRecurseCheckCardinality(xmlSchemaParserCtxtPtr ctxt, |
17042 xmlSchemaParticlePtr r, | 17073 xmlSchemaParticlePtr r, |
17043 xmlSchemaParticlePtr b) | 17074 xmlSchemaParticlePtr b) |
17044 { | 17075 { |
17045 xmlSchemaParticlePtr part; | 17076 xmlSchemaParticlePtr part; |
17046 /* TODO: Error codes (rcase-NSRecurseCheckCardinality). */ | 17077 /* TODO: Error codes (rcase-NSRecurseCheckCardinality). */ |
17047 if ((r->children == NULL) || (r->children->children == NULL)) | 17078 if ((r->children == NULL) || (r->children->children == NULL)) |
17048 return (-1); | 17079 return (-1); |
17049 /* | 17080 /* |
17050 * SPEC "For a group particle to be a �valid restriction� of a | 17081 * SPEC "For a group particle to be a `valid restriction` of a |
17051 * wildcard particle..." | 17082 * wildcard particle..." |
17052 * | 17083 * |
17053 * SPEC (1) "Every member of the {particles} of the group is a �valid | 17084 * SPEC (1) "Every member of the {particles} of the group is a `valid |
17054 * restriction� of the wildcard as defined by | 17085 * restriction` of the wildcard as defined by |
17055 * Particle Valid (Restriction) (�3.9.6)." | 17086 * Particle Valid (Restriction) ($3.9.6)." |
17056 */ | 17087 */ |
17057 part = (xmlSchemaParticlePtr) r->children->children; | 17088 part = (xmlSchemaParticlePtr) r->children->children; |
17058 do { | 17089 do { |
17059 if (xmlSchemaCheckCOSParticleRestrict(ctxt, part, b)) | 17090 if (xmlSchemaCheckCOSParticleRestrict(ctxt, part, b)) |
17060 return (1); | 17091 return (1); |
17061 part = (xmlSchemaParticlePtr) part->next; | 17092 part = (xmlSchemaParticlePtr) part->next; |
17062 } while (part != NULL); | 17093 } while (part != NULL); |
17063 /* | 17094 /* |
17064 * SPEC (2) "The effective total range of the group [...] is a | 17095 * SPEC (2) "The effective total range of the group [...] is a |
17065 * valid restriction of B's occurrence range as defined by | 17096 * valid restriction of B's occurrence range as defined by |
17066 * Occurrence Range OK (�3.9.6)." | 17097 * Occurrence Range OK ($3.9.6)." |
17067 */ | 17098 */ |
17068 if (xmlSchemaCheckParticleRangeOK( | 17099 if (xmlSchemaCheckParticleRangeOK( |
17069 xmlSchemaGetParticleTotalRangeMin(r), | 17100 xmlSchemaGetParticleTotalRangeMin(r), |
17070 xmlSchemaGetParticleTotalRangeMax(r), | 17101 xmlSchemaGetParticleTotalRangeMax(r), |
17071 b->minOccurs, b->maxOccurs) != 0) | 17102 b->minOccurs, b->maxOccurs) != 0) |
17072 return (1); | 17103 return (1); |
17073 return (0); | 17104 return (0); |
17074 } | 17105 } |
17075 #endif | 17106 #endif |
17076 | 17107 |
(...skipping 19 matching lines...) Expand all Loading... |
17096 xmlSchemaCheckRCaseRecurse(xmlSchemaParserCtxtPtr ctxt, | 17127 xmlSchemaCheckRCaseRecurse(xmlSchemaParserCtxtPtr ctxt, |
17097 xmlSchemaParticlePtr r, | 17128 xmlSchemaParticlePtr r, |
17098 xmlSchemaParticlePtr b) | 17129 xmlSchemaParticlePtr b) |
17099 { | 17130 { |
17100 /* xmlSchemaParticlePtr part; */ | 17131 /* xmlSchemaParticlePtr part; */ |
17101 /* TODO: Error codes (rcase-Recurse). */ | 17132 /* TODO: Error codes (rcase-Recurse). */ |
17102 if ((r->children == NULL) || (b->children == NULL) || | 17133 if ((r->children == NULL) || (b->children == NULL) || |
17103 (r->children->type != b->children->type)) | 17134 (r->children->type != b->children->type)) |
17104 return (-1); | 17135 return (-1); |
17105 /* | 17136 /* |
17106 * SPEC "For an all or sequence group particle to be a �valid | 17137 * SPEC "For an all or sequence group particle to be a `valid |
17107 * restriction� of another group particle with the same {compositor}..." | 17138 * restriction` of another group particle with the same {compositor}..." |
17108 * | 17139 * |
17109 * SPEC (1) "R's occurrence range is a valid restriction of B's | 17140 * SPEC (1) "R's occurrence range is a valid restriction of B's |
17110 * occurrence range as defined by Occurrence Range OK (�3.9.6)." | 17141 * occurrence range as defined by Occurrence Range OK ($3.9.6)." |
17111 */ | 17142 */ |
17112 if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs, | 17143 if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs, |
17113 b->minOccurs, b->maxOccurs)) | 17144 b->minOccurs, b->maxOccurs)) |
17114 return (1); | 17145 return (1); |
17115 | 17146 |
17116 | 17147 |
17117 return (0); | 17148 return (0); |
17118 } | 17149 } |
17119 | 17150 |
17120 #endif | 17151 #endif |
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17724 return (-1); | 17755 return (-1); |
17725 } | 17756 } |
17726 | 17757 |
17727 static int | 17758 static int |
17728 xmlSchemaFinishMemberTypeDefinitionsProperty(xmlSchemaParserCtxtPtr pctxt, | 17759 xmlSchemaFinishMemberTypeDefinitionsProperty(xmlSchemaParserCtxtPtr pctxt, |
17729 xmlSchemaTypePtr type) | 17760 xmlSchemaTypePtr type) |
17730 { | 17761 { |
17731 xmlSchemaTypeLinkPtr link, lastLink, prevLink, subLink, newLink; | 17762 xmlSchemaTypeLinkPtr link, lastLink, prevLink, subLink, newLink; |
17732 /* | 17763 /* |
17733 * The actual value is then formed by replacing any union type | 17764 * The actual value is then formed by replacing any union type |
17734 * definition in the �explicit members� with the members of their | 17765 * definition in the `explicit members` with the members of their |
17735 * {member type definitions}, in order. | 17766 * {member type definitions}, in order. |
17736 * | 17767 * |
17737 * TODO: There's a bug entry at | 17768 * TODO: There's a bug entry at |
17738 * "http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005JulSep/02
87.html" | 17769 * "http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005JulSep/02
87.html" |
17739 * which indicates that we'll keep the union types the future. | 17770 * which indicates that we'll keep the union types the future. |
17740 */ | 17771 */ |
17741 link = type->memberTypes; | 17772 link = type->memberTypes; |
17742 while (link != NULL) { | 17773 while (link != NULL) { |
17743 | 17774 |
17744 if (WXS_IS_TYPE_NOT_FIXED(link->type)) | 17775 if (WXS_IS_TYPE_NOT_FIXED(link->type)) |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17858 type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE; | 17889 type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE; |
17859 break; | 17890 break; |
17860 default: | 17891 default: |
17861 return (-1); | 17892 return (-1); |
17862 } | 17893 } |
17863 return (0); | 17894 return (0); |
17864 } | 17895 } |
17865 } | 17896 } |
17866 } | 17897 } |
17867 /* | 17898 /* |
17868 * For all �atomic� datatypes other than string (and types �derived� | 17899 * For all `atomic` datatypes other than string (and types `derived` |
17869 * by �restriction� from it) the value of whiteSpace is fixed to | 17900 * by `restriction` from it) the value of whiteSpace is fixed to |
17870 * collapse | 17901 * collapse |
17871 */ | 17902 */ |
17872 { | 17903 { |
17873 xmlSchemaTypePtr anc; | 17904 xmlSchemaTypePtr anc; |
17874 | 17905 |
17875 for (anc = type->baseType; anc != NULL && | 17906 for (anc = type->baseType; anc != NULL && |
17876 anc->builtInType != XML_SCHEMAS_ANYTYPE; | 17907 anc->builtInType != XML_SCHEMAS_ANYTYPE; |
17877 anc = anc->baseType) { | 17908 anc = anc->baseType) { |
17878 | 17909 |
17879 if (anc->type == XML_SCHEMA_TYPE_BASIC) { | 17910 if (anc->type == XML_SCHEMA_TYPE_BASIC) { |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
18048 * NOTE that this might change in WXS 1.1; i.e. we will keep the union | 18079 * NOTE that this might change in WXS 1.1; i.e. we will keep the union |
18049 * types in WXS 1.1. | 18080 * types in WXS 1.1. |
18050 */ | 18081 */ |
18051 if ((type->memberTypes != NULL) && | 18082 if ((type->memberTypes != NULL) && |
18052 (xmlSchemaFinishMemberTypeDefinitionsProperty(pctxt, type) == -1)) | 18083 (xmlSchemaFinishMemberTypeDefinitionsProperty(pctxt, type) == -1)) |
18053 return(-1); | 18084 return(-1); |
18054 /* | 18085 /* |
18055 * SPEC src-simple-type 1 | 18086 * SPEC src-simple-type 1 |
18056 * "The corresponding simple type definition, if any, must satisfy | 18087 * "The corresponding simple type definition, if any, must satisfy |
18057 * the conditions set out in Constraints on Simple Type Definition | 18088 * the conditions set out in Constraints on Simple Type Definition |
18058 * Schema Components (�3.14.6)." | 18089 * Schema Components ($3.14.6)." |
18059 */ | 18090 */ |
18060 /* | 18091 /* |
18061 * Schema Component Constraint: Simple Type Definition Properties Correct | 18092 * Schema Component Constraint: Simple Type Definition Properties Correct |
18062 * (st-props-correct) | 18093 * (st-props-correct) |
18063 */ | 18094 */ |
18064 res = xmlSchemaCheckSTPropsCorrect(pctxt, type); | 18095 res = xmlSchemaCheckSTPropsCorrect(pctxt, type); |
18065 HFAILURE HERROR | 18096 HFAILURE HERROR |
18066 /* | 18097 /* |
18067 * Schema Component Constraint: Derivation Valid (Restriction, Simple) | 18098 * Schema Component Constraint: Derivation Valid (Restriction, Simple) |
18068 * (cos-st-restricts) | 18099 * (cos-st-restricts) |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
18308 */ | 18339 */ |
18309 if ((particle == NULL) || | 18340 if ((particle == NULL) || |
18310 ((particle->type == XML_SCHEMA_TYPE_PARTICLE) && | 18341 ((particle->type == XML_SCHEMA_TYPE_PARTICLE) && |
18311 ((particle->children->type == XML_SCHEMA_TYPE_ALL) || | 18342 ((particle->children->type == XML_SCHEMA_TYPE_ALL) || |
18312 (particle->children->type == XML_SCHEMA_TYPE_SEQUENCE) || | 18343 (particle->children->type == XML_SCHEMA_TYPE_SEQUENCE) || |
18313 ((particle->children->type == XML_SCHEMA_TYPE_CHOICE) && | 18344 ((particle->children->type == XML_SCHEMA_TYPE_CHOICE) && |
18314 (particle->minOccurs == 0))) && | 18345 (particle->minOccurs == 0))) && |
18315 ( ((xmlSchemaTreeItemPtr) particle->children)->children == NULL))) { | 18346 ( ((xmlSchemaTreeItemPtr) particle->children)->children == NULL))) { |
18316 if (type->flags & XML_SCHEMAS_TYPE_MIXED) { | 18347 if (type->flags & XML_SCHEMAS_TYPE_MIXED) { |
18317 /* | 18348 /* |
18318 » » * SPEC (2.1.4) "If the �effective mixed� is true, then | 18349 » » * SPEC (2.1.4) "If the `effective mixed` is true, then |
18319 * a particle whose properties are as follows:..." | 18350 * a particle whose properties are as follows:..." |
18320 * | 18351 * |
18321 * Empty sequence model group with | 18352 * Empty sequence model group with |
18322 * minOccurs/maxOccurs = 1 (i.e. a "particle emptiable"). | 18353 * minOccurs/maxOccurs = 1 (i.e. a "particle emptiable"). |
18323 * NOTE that we sill assign it the <complexType> node to | 18354 * NOTE that we sill assign it the <complexType> node to |
18324 * somehow anchor it in the doc. | 18355 * somehow anchor it in the doc. |
18325 */ | 18356 */ |
18326 if ((particle == NULL) || | 18357 if ((particle == NULL) || |
18327 (particle->children->type != XML_SCHEMA_TYPE_SEQUENCE)) { | 18358 (particle->children->type != XML_SCHEMA_TYPE_SEQUENCE)) { |
18328 /* | 18359 /* |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
18370 if (type->flags & XML_SCHEMAS_TYPE_MIXED) | 18401 if (type->flags & XML_SCHEMAS_TYPE_MIXED) |
18371 type->contentType = XML_SCHEMA_CONTENT_MIXED; | 18402 type->contentType = XML_SCHEMA_CONTENT_MIXED; |
18372 } | 18403 } |
18373 } else { | 18404 } else { |
18374 /* | 18405 /* |
18375 * SPEC (3.2) "If <extension>..." | 18406 * SPEC (3.2) "If <extension>..." |
18376 */ | 18407 */ |
18377 if (type->contentType == XML_SCHEMA_CONTENT_EMPTY) { | 18408 if (type->contentType == XML_SCHEMA_CONTENT_EMPTY) { |
18378 /* | 18409 /* |
18379 * SPEC (3.2.1) | 18410 * SPEC (3.2.1) |
18380 » » * "If the �effective content� is empty, then the | 18411 » » * "If the `effective content` is empty, then the |
18381 * {content type} of the [...] base ..." | 18412 * {content type} of the [...] base ..." |
18382 */ | 18413 */ |
18383 type->contentType = baseType->contentType; | 18414 type->contentType = baseType->contentType; |
18384 type->subtypes = baseType->subtypes; | 18415 type->subtypes = baseType->subtypes; |
18385 /* | 18416 /* |
18386 * Fixes bug #347316: | 18417 * Fixes bug #347316: |
18387 * This is the case when the base type has a simple | 18418 * This is the case when the base type has a simple |
18388 * type definition as content. | 18419 * type definition as content. |
18389 */ | 18420 */ |
18390 type->contentTypeDef = baseType->contentTypeDef; | 18421 type->contentTypeDef = baseType->contentTypeDef; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
18468 WXS_TYPE_CONTENTTYPE(type) = (xmlSchemaTypePtr) particle; | 18499 WXS_TYPE_CONTENTTYPE(type) = (xmlSchemaTypePtr) particle; |
18469 /* | 18500 /* |
18470 * SPEC "the particle of the {content type} of | 18501 * SPEC "the particle of the {content type} of |
18471 * the ... base ..." | 18502 * the ... base ..." |
18472 * Create a duplicate of the base type's particle | 18503 * Create a duplicate of the base type's particle |
18473 * and assign its "term" to it. | 18504 * and assign its "term" to it. |
18474 */ | 18505 */ |
18475 particle->children->children = | 18506 particle->children->children = |
18476 (xmlSchemaTreeItemPtr) xmlSchemaAddParticle(pctxt, | 18507 (xmlSchemaTreeItemPtr) xmlSchemaAddParticle(pctxt, |
18477 type->node, | 18508 type->node, |
18478 » » » ((xmlSchemaParticlePtr) type->subtypes)->minOccurs, | 18509 » » » ((xmlSchemaParticlePtr) baseType->subtypes)->minOccurs, |
18479 » » » ((xmlSchemaParticlePtr) type->subtypes)->maxOccurs); | 18510 » » » ((xmlSchemaParticlePtr) baseType->subtypes)->maxOccurs); |
18480 if (particle->children->children == NULL) | 18511 if (particle->children->children == NULL) |
18481 goto exit_failure; | 18512 goto exit_failure; |
18482 particle = (xmlSchemaParticlePtr) | 18513 particle = (xmlSchemaParticlePtr) |
18483 particle->children->children; | 18514 particle->children->children; |
18484 particle->children = | 18515 particle->children = |
18485 ((xmlSchemaParticlePtr) baseType->subtypes)->children; | 18516 ((xmlSchemaParticlePtr) baseType->subtypes)->children; |
18486 /* | 18517 /* |
18487 » » * SPEC "followed by the �effective content�." | 18518 » » * SPEC "followed by the `effective content`." |
18488 */ | 18519 */ |
18489 particle->next = effectiveContent; | 18520 particle->next = effectiveContent; |
18490 /* | 18521 /* |
18491 * This all will result in: | 18522 * This all will result in: |
18492 * new-particle | 18523 * new-particle |
18493 * --> new-sequence( | 18524 * --> new-sequence( |
18494 * new-particle | 18525 * new-particle |
18495 * --> base-model, | 18526 * --> base-model, |
18496 * this-particle | 18527 * this-particle |
18497 * --> this-model | 18528 * --> this-model |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
18621 case XML_SCHEMA_FACET_MAXEXCLUSIVE: | 18652 case XML_SCHEMA_FACET_MAXEXCLUSIVE: |
18622 case XML_SCHEMA_FACET_ENUMERATION: { | 18653 case XML_SCHEMA_FACET_ENUMERATION: { |
18623 /* | 18654 /* |
18624 * Okay we need to validate the value | 18655 * Okay we need to validate the value |
18625 * at that point. | 18656 * at that point. |
18626 */ | 18657 */ |
18627 xmlSchemaTypePtr base; | 18658 xmlSchemaTypePtr base; |
18628 | 18659 |
18629 /* 4.3.5.5 Constraints on enumeration Schema Components | 18660 /* 4.3.5.5 Constraints on enumeration Schema Components |
18630 * Schema Component Constraint: enumeration valid restriction | 18661 * Schema Component Constraint: enumeration valid restriction |
18631 » » * It is an �error� if any member of {value} is not in the | 18662 » » * It is an `error` if any member of {value} is not in the |
18632 » » * �value space� of {base type definition}. | 18663 » » * `value space` of {base type definition}. |
18633 * | 18664 * |
18634 * minInclusive, maxInclusive, minExclusive, maxExclusive: | 18665 * minInclusive, maxInclusive, minExclusive, maxExclusive: |
18635 » » * The value �must� be in the | 18666 » » * The value `must` be in the |
18636 » » * �value space� of the �base type�. | 18667 » » * `value space` of the `base type`. |
18637 */ | 18668 */ |
18638 /* | 18669 /* |
18639 * This function is intended to deliver a compiled value | 18670 * This function is intended to deliver a compiled value |
18640 * on the facet. In this implementation of XML Schemata the | 18671 * on the facet. In this implementation of XML Schemata the |
18641 * type holding a facet, won't be a built-in type. | 18672 * type holding a facet, won't be a built-in type. |
18642 * Thus to ensure that other API | 18673 * Thus to ensure that other API |
18643 * calls (relaxng) do work, if the given type is a built-in | 18674 * calls (relaxng) do work, if the given type is a built-in |
18644 * type, we will assume that the given built-in type *is | 18675 * type, we will assume that the given built-in type *is |
18645 * already* the base type. | 18676 * already* the base type. |
18646 */ | 18677 */ |
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19061 { | 19092 { |
19062 /* | 19093 /* |
19063 * Schema Representation Constraint: | 19094 * Schema Representation Constraint: |
19064 * Attribute Group Definition Representation OK | 19095 * Attribute Group Definition Representation OK |
19065 * 3 Circular group reference is disallowed outside <redefine>. | 19096 * 3 Circular group reference is disallowed outside <redefine>. |
19066 * That is, unless this element information item's parent is | 19097 * That is, unless this element information item's parent is |
19067 * <redefine>, then among the [children], if any, there must | 19098 * <redefine>, then among the [children], if any, there must |
19068 * not be an <attributeGroup> with ref [attribute] which resolves | 19099 * not be an <attributeGroup> with ref [attribute] which resolves |
19069 * to the component corresponding to this <attributeGroup>. Indirect | 19100 * to the component corresponding to this <attributeGroup>. Indirect |
19070 * circularity is also ruled out. That is, when QName resolution | 19101 * circularity is also ruled out. That is, when QName resolution |
19071 * (Schema Document) (�3.15.3) is applied to a �QName� arising from | 19102 * (Schema Document) ($3.15.3) is applied to a `QName` arising from |
19072 * any <attributeGroup>s with a ref [attribute] among the [children], | 19103 * any <attributeGroup>s with a ref [attribute] among the [children], |
19073 * it must not be the case that a �QName� is encountered at any depth | 19104 * it must not be the case that a `QName` is encountered at any depth |
19074 * which resolves to the component corresponding to this <attributeGroup>. | 19105 * which resolves to the component corresponding to this <attributeGroup>. |
19075 */ | 19106 */ |
19076 if (attrGr->attrUses == NULL) | 19107 if (attrGr->attrUses == NULL) |
19077 return(0); | 19108 return(0); |
19078 else if ((attrGr->flags & XML_SCHEMAS_ATTRGROUP_HAS_REFS) == 0) | 19109 else if ((attrGr->flags & XML_SCHEMAS_ATTRGROUP_HAS_REFS) == 0) |
19079 return(0); | 19110 return(0); |
19080 else { | 19111 else { |
19081 xmlSchemaQNameRefPtr circ; | 19112 xmlSchemaQNameRefPtr circ; |
19082 | 19113 |
19083 circ = xmlSchemaCheckAttrGroupCircularRecur(attrGr, | 19114 circ = xmlSchemaCheckAttrGroupCircularRecur(attrGr, |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19320 * Attribute Group Definition Properties Correct (ag-props-correct) | 19351 * Attribute Group Definition Properties Correct (ag-props-correct) |
19321 */ | 19352 */ |
19322 static int | 19353 static int |
19323 xmlSchemaCheckAGPropsCorrect(xmlSchemaParserCtxtPtr pctxt, | 19354 xmlSchemaCheckAGPropsCorrect(xmlSchemaParserCtxtPtr pctxt, |
19324 xmlSchemaAttributeGroupPtr attrGr) | 19355 xmlSchemaAttributeGroupPtr attrGr) |
19325 { | 19356 { |
19326 /* | 19357 /* |
19327 * SPEC ag-props-correct | 19358 * SPEC ag-props-correct |
19328 * (1) "The values of the properties of an attribute group definition | 19359 * (1) "The values of the properties of an attribute group definition |
19329 * must be as described in the property tableau in The Attribute | 19360 * must be as described in the property tableau in The Attribute |
19330 * Group Definition Schema Component (�3.6.1), modulo the impact of | 19361 * Group Definition Schema Component ($3.6.1), modulo the impact of |
19331 * Missing Sub-components (�5.3);" | 19362 * Missing Sub-components ($5.3);" |
19332 */ | 19363 */ |
19333 | 19364 |
19334 if ((attrGr->attrUses != NULL) && | 19365 if ((attrGr->attrUses != NULL) && |
19335 (WXS_LIST_CAST attrGr->attrUses)->nbItems > 1) | 19366 (WXS_LIST_CAST attrGr->attrUses)->nbItems > 1) |
19336 { | 19367 { |
19337 xmlSchemaItemListPtr uses = WXS_LIST_CAST attrGr->attrUses; | 19368 xmlSchemaItemListPtr uses = WXS_LIST_CAST attrGr->attrUses; |
19338 xmlSchemaAttributeUsePtr use, tmp; | 19369 xmlSchemaAttributeUsePtr use, tmp; |
19339 int i, j, hasId = 0; | 19370 int i, j, hasId = 0; |
19340 | 19371 |
19341 for (i = uses->nbItems -1; i >= 0; i--) { | 19372 for (i = uses->nbItems -1; i >= 0; i--) { |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19455 */ | 19486 */ |
19456 static int | 19487 static int |
19457 xmlSchemaCheckAttrPropsCorrect(xmlSchemaParserCtxtPtr pctxt, | 19488 xmlSchemaCheckAttrPropsCorrect(xmlSchemaParserCtxtPtr pctxt, |
19458 xmlSchemaAttributePtr attr) | 19489 xmlSchemaAttributePtr attr) |
19459 { | 19490 { |
19460 | 19491 |
19461 /* | 19492 /* |
19462 * SPEC a-props-correct (1) | 19493 * SPEC a-props-correct (1) |
19463 * "The values of the properties of an attribute declaration must | 19494 * "The values of the properties of an attribute declaration must |
19464 * be as described in the property tableau in The Attribute | 19495 * be as described in the property tableau in The Attribute |
19465 * Declaration Schema Component (�3.2.1), modulo the impact of | 19496 * Declaration Schema Component ($3.2.1), modulo the impact of |
19466 * Missing Sub-components (�5.3)." | 19497 * Missing Sub-components ($5.3)." |
19467 */ | 19498 */ |
19468 | 19499 |
19469 if (WXS_ATTR_TYPEDEF(attr) == NULL) | 19500 if (WXS_ATTR_TYPEDEF(attr) == NULL) |
19470 return(0); | 19501 return(0); |
19471 | 19502 |
19472 if (attr->defValue != NULL) { | 19503 if (attr->defValue != NULL) { |
19473 int ret; | 19504 int ret; |
19474 | 19505 |
19475 /* | 19506 /* |
19476 * SPEC a-props-correct (3) | 19507 * SPEC a-props-correct (3) |
19477 * "If the {type definition} is or is derived from ID then there | 19508 * "If the {type definition} is or is derived from ID then there |
19478 * must not be a {value constraint}." | 19509 * must not be a {value constraint}." |
19479 */ | 19510 */ |
19480 if (xmlSchemaIsDerivedFromBuiltInType( | 19511 if (xmlSchemaIsDerivedFromBuiltInType( |
19481 WXS_ATTR_TYPEDEF(attr), XML_SCHEMAS_ID)) | 19512 WXS_ATTR_TYPEDEF(attr), XML_SCHEMAS_ID)) |
19482 { | 19513 { |
19483 xmlSchemaCustomErr(ACTXT_CAST pctxt, | 19514 xmlSchemaCustomErr(ACTXT_CAST pctxt, |
19484 XML_SCHEMAP_A_PROPS_CORRECT_3, | 19515 XML_SCHEMAP_A_PROPS_CORRECT_3, |
19485 NULL, WXS_BASIC_CAST attr, | 19516 NULL, WXS_BASIC_CAST attr, |
19486 "Value constraints are not allowed if the type definition " | 19517 "Value constraints are not allowed if the type definition " |
19487 "is or is derived from xs:ID", | 19518 "is or is derived from xs:ID", |
19488 NULL, NULL); | 19519 NULL, NULL); |
19489 return(pctxt->err); | 19520 return(pctxt->err); |
19490 } | 19521 } |
19491 /* | 19522 /* |
19492 * SPEC a-props-correct (2) | 19523 * SPEC a-props-correct (2) |
19493 * "if there is a {value constraint}, the canonical lexical | 19524 * "if there is a {value constraint}, the canonical lexical |
19494 » * representation of its value must be �valid� with respect | 19525 » * representation of its value must be `valid` with respect |
19495 » * to the {type definition} as defined in String Valid (�3.14.4)." | 19526 » * to the {type definition} as defined in String Valid ($3.14.4)." |
19496 » * TODO: Don't care about the *cononical* stuff here, this requirement | 19527 » * TODO: Don't care about the *canonical* stuff here, this requirement |
19497 * will be removed in WXS 1.1 anyway. | 19528 * will be removed in WXS 1.1 anyway. |
19498 */ | 19529 */ |
19499 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, | 19530 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, |
19500 attr->node, WXS_ATTR_TYPEDEF(attr), | 19531 attr->node, WXS_ATTR_TYPEDEF(attr), |
19501 attr->defValue, &(attr->defVal), | 19532 attr->defValue, &(attr->defVal), |
19502 1, 1, 0); | 19533 1, 1, 0); |
19503 if (ret != 0) { | 19534 if (ret != 0) { |
19504 if (ret < 0) { | 19535 if (ret < 0) { |
19505 PERROR_INT("xmlSchemaCheckAttrPropsCorrect", | 19536 PERROR_INT("xmlSchemaCheckAttrPropsCorrect", |
19506 "calling xmlSchemaVCheckCVCSimpleType()"); | 19537 "calling xmlSchemaVCheckCVCSimpleType()"); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19553 */ | 19584 */ |
19554 static int | 19585 static int |
19555 xmlSchemaCheckElemPropsCorrect(xmlSchemaParserCtxtPtr pctxt, | 19586 xmlSchemaCheckElemPropsCorrect(xmlSchemaParserCtxtPtr pctxt, |
19556 xmlSchemaElementPtr elemDecl) | 19587 xmlSchemaElementPtr elemDecl) |
19557 { | 19588 { |
19558 int ret = 0; | 19589 int ret = 0; |
19559 xmlSchemaTypePtr typeDef = WXS_ELEM_TYPEDEF(elemDecl); | 19590 xmlSchemaTypePtr typeDef = WXS_ELEM_TYPEDEF(elemDecl); |
19560 /* | 19591 /* |
19561 * SPEC (1) "The values of the properties of an element declaration | 19592 * SPEC (1) "The values of the properties of an element declaration |
19562 * must be as described in the property tableau in The Element | 19593 * must be as described in the property tableau in The Element |
19563 * Declaration Schema Component (�3.3.1), modulo the impact of Missing | 19594 * Declaration Schema Component ($3.3.1), modulo the impact of Missing |
19564 * Sub-components (�5.3)." | 19595 * Sub-components ($5.3)." |
19565 */ | 19596 */ |
19566 if (WXS_SUBST_HEAD(elemDecl) != NULL) { | 19597 if (WXS_SUBST_HEAD(elemDecl) != NULL) { |
19567 xmlSchemaElementPtr head = WXS_SUBST_HEAD(elemDecl), circ; | 19598 xmlSchemaElementPtr head = WXS_SUBST_HEAD(elemDecl), circ; |
19568 | 19599 |
19569 xmlSchemaCheckElementDeclComponent(head, pctxt); | 19600 xmlSchemaCheckElementDeclComponent(head, pctxt); |
19570 /* | 19601 /* |
19571 » * SPEC (3) "If there is a non-�absent� {substitution group | 19602 » * SPEC (3) "If there is a non-`absent` {substitution group |
19572 * affiliation}, then {scope} must be global." | 19603 * affiliation}, then {scope} must be global." |
19573 */ | 19604 */ |
19574 if ((elemDecl->flags & XML_SCHEMAS_ELEM_GLOBAL) == 0) { | 19605 if ((elemDecl->flags & XML_SCHEMAS_ELEM_GLOBAL) == 0) { |
19575 xmlSchemaPCustomErr(pctxt, | 19606 xmlSchemaPCustomErr(pctxt, |
19576 XML_SCHEMAP_E_PROPS_CORRECT_3, | 19607 XML_SCHEMAP_E_PROPS_CORRECT_3, |
19577 WXS_BASIC_CAST elemDecl, NULL, | 19608 WXS_BASIC_CAST elemDecl, NULL, |
19578 "Only global element declarations can have a " | 19609 "Only global element declarations can have a " |
19579 "substitution group affiliation", NULL); | 19610 "substitution group affiliation", NULL); |
19580 ret = XML_SCHEMAP_E_PROPS_CORRECT_3; | 19611 ret = XML_SCHEMAP_E_PROPS_CORRECT_3; |
19581 } | 19612 } |
(...skipping 23 matching lines...) Expand all Loading... |
19605 FREE_AND_NULL(strA) | 19636 FREE_AND_NULL(strA) |
19606 FREE_AND_NULL(strB) | 19637 FREE_AND_NULL(strB) |
19607 ret = XML_SCHEMAP_E_PROPS_CORRECT_6; | 19638 ret = XML_SCHEMAP_E_PROPS_CORRECT_6; |
19608 } | 19639 } |
19609 /* | 19640 /* |
19610 * SPEC (4) "If there is a {substitution group affiliation}, | 19641 * SPEC (4) "If there is a {substitution group affiliation}, |
19611 * the {type definition} | 19642 * the {type definition} |
19612 * of the element declaration must be validly derived from the {type | 19643 * of the element declaration must be validly derived from the {type |
19613 * definition} of the {substitution group affiliation}, given the value | 19644 * definition} of the {substitution group affiliation}, given the value |
19614 * of the {substitution group exclusions} of the {substitution group | 19645 * of the {substitution group exclusions} of the {substitution group |
19615 » * affiliation}, as defined in Type Derivation OK (Complex) (�3.4.6) | 19646 » * affiliation}, as defined in Type Derivation OK (Complex) ($3.4.6) |
19616 * (if the {type definition} is complex) or as defined in | 19647 * (if the {type definition} is complex) or as defined in |
19617 » * Type Derivation OK (Simple) (�3.14.6) (if the {type definition} is | 19648 » * Type Derivation OK (Simple) ($3.14.6) (if the {type definition} is |
19618 * simple)." | 19649 * simple)." |
19619 * | 19650 * |
19620 * NOTE: {substitution group exclusions} means the values of the | 19651 * NOTE: {substitution group exclusions} means the values of the |
19621 * attribute "final". | 19652 * attribute "final". |
19622 */ | 19653 */ |
19623 | 19654 |
19624 if (typeDef != WXS_ELEM_TYPEDEF(WXS_SUBST_HEAD(elemDecl))) { | 19655 if (typeDef != WXS_ELEM_TYPEDEF(WXS_SUBST_HEAD(elemDecl))) { |
19625 int set = 0; | 19656 int set = 0; |
19626 | 19657 |
19627 if (head->flags & XML_SCHEMAS_ELEM_FINAL_EXTENSION) | 19658 if (head->flags & XML_SCHEMAS_ELEM_FINAL_EXTENSION) |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19671 WXS_BASIC_CAST elemDecl, NULL, | 19702 WXS_BASIC_CAST elemDecl, NULL, |
19672 "The type definition (or type definition's content type) is or " | 19703 "The type definition (or type definition's content type) is or " |
19673 "is derived from ID; value constraints are not allowed in " | 19704 "is derived from ID; value constraints are not allowed in " |
19674 "conjunction with such a type definition", NULL); | 19705 "conjunction with such a type definition", NULL); |
19675 } else if (elemDecl->value != NULL) { | 19706 } else if (elemDecl->value != NULL) { |
19676 int vcret; | 19707 int vcret; |
19677 xmlNodePtr node = NULL; | 19708 xmlNodePtr node = NULL; |
19678 | 19709 |
19679 /* | 19710 /* |
19680 * SPEC (2) "If there is a {value constraint}, the canonical lexical | 19711 * SPEC (2) "If there is a {value constraint}, the canonical lexical |
19681 » * representation of its value must be �valid� with respect to the | 19712 » * representation of its value must be `valid` with respect to the |
19682 * {type definition} as defined in Element Default Valid (Immediate) | 19713 * {type definition} as defined in Element Default Valid (Immediate) |
19683 » * (�3.3.6)." | 19714 » * ($3.3.6)." |
19684 */ | 19715 */ |
19685 if (typeDef == NULL) { | 19716 if (typeDef == NULL) { |
19686 xmlSchemaPErr(pctxt, elemDecl->node, | 19717 xmlSchemaPErr(pctxt, elemDecl->node, |
19687 XML_SCHEMAP_INTERNAL, | 19718 XML_SCHEMAP_INTERNAL, |
19688 "Internal error: xmlSchemaCheckElemPropsCorrect, " | 19719 "Internal error: xmlSchemaCheckElemPropsCorrect, " |
19689 "type is missing... skipping validation of " | 19720 "type is missing... skipping validation of " |
19690 "the value constraint", NULL, NULL); | 19721 "the value constraint", NULL, NULL); |
19691 return (-1); | 19722 return (-1); |
19692 } | 19723 } |
19693 if (elemDecl->node != NULL) { | 19724 if (elemDecl->node != NULL) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19741 /* SPEC (1) "Its {abstract} is false." */ | 19772 /* SPEC (1) "Its {abstract} is false." */ |
19742 (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT)) | 19773 (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT)) |
19743 return; | 19774 return; |
19744 { | 19775 { |
19745 xmlSchemaElementPtr head; | 19776 xmlSchemaElementPtr head; |
19746 xmlSchemaTypePtr headType, type; | 19777 xmlSchemaTypePtr headType, type; |
19747 int set, methSet; | 19778 int set, methSet; |
19748 /* | 19779 /* |
19749 * SPEC (2) "It is validly substitutable for HEAD subject to HEAD's | 19780 * SPEC (2) "It is validly substitutable for HEAD subject to HEAD's |
19750 * {disallowed substitutions} as the blocking constraint, as defined in | 19781 * {disallowed substitutions} as the blocking constraint, as defined in |
19751 » * Substitution Group OK (Transitive) (�3.3.6)." | 19782 » * Substitution Group OK (Transitive) ($3.3.6)." |
19752 */ | 19783 */ |
19753 for (head = WXS_SUBST_HEAD(elemDecl); head != NULL; | 19784 for (head = WXS_SUBST_HEAD(elemDecl); head != NULL; |
19754 head = WXS_SUBST_HEAD(head)) { | 19785 head = WXS_SUBST_HEAD(head)) { |
19755 set = 0; | 19786 set = 0; |
19756 methSet = 0; | 19787 methSet = 0; |
19757 /* | 19788 /* |
19758 * The blocking constraints. | 19789 * The blocking constraints. |
19759 */ | 19790 */ |
19760 if (head->flags & XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION) | 19791 if (head->flags & XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION) |
19761 continue; | 19792 continue; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19874 ctxtComponent, ctxtParticle, cur, ctxtParticle, 1); | 19905 ctxtComponent, ctxtParticle, cur, ctxtParticle, 1); |
19875 if (ret != 0) | 19906 if (ret != 0) |
19876 return(ret); | 19907 return(ret); |
19877 } else { | 19908 } else { |
19878 xmlSchemaElementPtr elem = | 19909 xmlSchemaElementPtr elem = |
19879 WXS_ELEM_CAST(WXS_PARTICLE_TERM(cur)); | 19910 WXS_ELEM_CAST(WXS_PARTICLE_TERM(cur)); |
19880 /* | 19911 /* |
19881 * SPEC Element Declarations Consistent: | 19912 * SPEC Element Declarations Consistent: |
19882 * "If the {particles} contains, either directly, | 19913 * "If the {particles} contains, either directly, |
19883 * indirectly (that is, within the {particles} of a | 19914 * indirectly (that is, within the {particles} of a |
19884 » » * contained model group, recursively) or �implicitly� | 19915 » » * contained model group, recursively) or `implicitly` |
19885 * two or more element declaration particles with | 19916 * two or more element declaration particles with |
19886 * the same {name} and {target namespace}, then | 19917 * the same {name} and {target namespace}, then |
19887 * all their type definitions must be the same | 19918 * all their type definitions must be the same |
19888 * top-level definition [...]" | 19919 * top-level definition [...]" |
19889 */ | 19920 */ |
19890 if (xmlStrEqual(WXS_PARTICLE_TERM_AS_ELEM(cur)->name, | 19921 if (xmlStrEqual(WXS_PARTICLE_TERM_AS_ELEM(cur)->name, |
19891 WXS_PARTICLE_TERM_AS_ELEM(searchParticle)->name) && | 19922 WXS_PARTICLE_TERM_AS_ELEM(searchParticle)->name) && |
19892 xmlStrEqual(WXS_PARTICLE_TERM_AS_ELEM(cur)->targetNamesp
ace, | 19923 xmlStrEqual(WXS_PARTICLE_TERM_AS_ELEM(cur)->targetNamesp
ace, |
19893 WXS_PARTICLE_TERM_AS_ELEM(searchParticle)->targetNam
espace)) | 19924 WXS_PARTICLE_TERM_AS_ELEM(searchParticle)->targetNam
espace)) |
19894 { | 19925 { |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20072 xmlSchemaTypePtr tx, ty, ptx, pty; | 20103 xmlSchemaTypePtr tx, ty, ptx, pty; |
20073 int ret; | 20104 int ret; |
20074 | 20105 |
20075 while (x != NULL) { | 20106 while (x != NULL) { |
20076 /* Same types. */ | 20107 /* Same types. */ |
20077 tx = xmlSchemaGetBuiltInType(xmlSchemaGetValType(x)); | 20108 tx = xmlSchemaGetBuiltInType(xmlSchemaGetValType(x)); |
20078 ty = xmlSchemaGetBuiltInType(xmlSchemaGetValType(y)); | 20109 ty = xmlSchemaGetBuiltInType(xmlSchemaGetValType(y)); |
20079 ptx = xmlSchemaGetPrimitiveType(tx); | 20110 ptx = xmlSchemaGetPrimitiveType(tx); |
20080 pty = xmlSchemaGetPrimitiveType(ty); | 20111 pty = xmlSchemaGetPrimitiveType(ty); |
20081 /* | 20112 /* |
20082 » * (1) if a datatype T' is �derived� by �restriction� from an | 20113 » * (1) if a datatype T' is `derived` by `restriction` from an |
20083 » * atomic datatype T then the �value space� of T' is a subset of | 20114 » * atomic datatype T then the `value space` of T' is a subset of |
20084 » * the �value space� of T. */ | 20115 » * the `value space` of T. */ |
20085 /* | 20116 /* |
20086 » * (2) if datatypes T' and T'' are �derived� by �restriction� | 20117 » * (2) if datatypes T' and T'' are `derived` by `restriction` |
20087 » * from a common atomic ancestor T then the �value space�s of T' | 20118 » * from a common atomic ancestor T then the `value space`s of T' |
20088 * and T'' may overlap. | 20119 * and T'' may overlap. |
20089 */ | 20120 */ |
20090 if (ptx != pty) | 20121 if (ptx != pty) |
20091 return(0); | 20122 return(0); |
20092 /* | 20123 /* |
20093 * We assume computed values to be normalized, so do a fast | 20124 * We assume computed values to be normalized, so do a fast |
20094 * string comparison for string based types. | 20125 * string comparison for string based types. |
20095 */ | 20126 */ |
20096 if ((ptx->builtInType == XML_SCHEMAS_STRING) || | 20127 if ((ptx->builtInType == XML_SCHEMAS_STRING) || |
20097 WXS_IS_ANY_SIMPLE_TYPE(ptx)) { | 20128 WXS_IS_ANY_SIMPLE_TYPE(ptx)) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20145 xmlSchemaQNameRefPtr ref = WXS_QNAME_CAST ause->attrDecl; | 20176 xmlSchemaQNameRefPtr ref = WXS_QNAME_CAST ause->attrDecl; |
20146 | 20177 |
20147 /* | 20178 /* |
20148 * TODO: Evaluate, what errors could occur if the declaration is not | 20179 * TODO: Evaluate, what errors could occur if the declaration is not |
20149 * found. | 20180 * found. |
20150 */ | 20181 */ |
20151 ause->attrDecl = xmlSchemaGetAttributeDecl(ctxt->schema, | 20182 ause->attrDecl = xmlSchemaGetAttributeDecl(ctxt->schema, |
20152 ref->name, ref->targetNamespace); | 20183 ref->name, ref->targetNamespace); |
20153 if (ause->attrDecl == NULL) { | 20184 if (ause->attrDecl == NULL) { |
20154 xmlSchemaPResCompAttrErr(ctxt, | 20185 xmlSchemaPResCompAttrErr(ctxt, |
20155 » » XML_SCHEMAP_SRC_RESOLVE, | 20186 » » XML_SCHEMAP_SRC_RESOLVE, |
20156 WXS_BASIC_CAST ause, ause->node, | 20187 WXS_BASIC_CAST ause, ause->node, |
20157 "ref", ref->name, ref->targetNamespace, | 20188 "ref", ref->name, ref->targetNamespace, |
20158 XML_SCHEMA_TYPE_ATTRIBUTE, NULL); | 20189 XML_SCHEMA_TYPE_ATTRIBUTE, NULL); |
20159 return(ctxt->err);; | 20190 return(ctxt->err);; |
20160 } | 20191 } |
20161 } | 20192 } |
20162 return(0); | 20193 return(0); |
20163 } | 20194 } |
20164 | 20195 |
20165 /** | 20196 /** |
(...skipping 12 matching lines...) Expand all Loading... |
20178 if ((ctxt == NULL) || (use == NULL)) | 20209 if ((ctxt == NULL) || (use == NULL)) |
20179 return(-1); | 20210 return(-1); |
20180 if ((use->defValue == NULL) || (WXS_ATTRUSE_DECL(use) == NULL) || | 20211 if ((use->defValue == NULL) || (WXS_ATTRUSE_DECL(use) == NULL) || |
20181 ((WXS_ATTRUSE_DECL(use))->type != XML_SCHEMA_TYPE_ATTRIBUTE)) | 20212 ((WXS_ATTRUSE_DECL(use))->type != XML_SCHEMA_TYPE_ATTRIBUTE)) |
20182 return(0); | 20213 return(0); |
20183 | 20214 |
20184 /* | 20215 /* |
20185 * SPEC au-props-correct (1) | 20216 * SPEC au-props-correct (1) |
20186 * "The values of the properties of an attribute use must be as | 20217 * "The values of the properties of an attribute use must be as |
20187 * described in the property tableau in The Attribute Use Schema | 20218 * described in the property tableau in The Attribute Use Schema |
20188 * Component (�3.5.1), modulo the impact of Missing | 20219 * Component ($3.5.1), modulo the impact of Missing |
20189 * Sub-components (�5.3)." | 20220 * Sub-components ($5.3)." |
20190 */ | 20221 */ |
20191 | 20222 |
20192 if (((WXS_ATTRUSE_DECL(use))->defValue != NULL) && | 20223 if (((WXS_ATTRUSE_DECL(use))->defValue != NULL) && |
20193 ((WXS_ATTRUSE_DECL(use))->flags & XML_SCHEMAS_ATTR_FIXED) && | 20224 ((WXS_ATTRUSE_DECL(use))->flags & XML_SCHEMAS_ATTR_FIXED) && |
20194 ((use->flags & XML_SCHEMA_ATTR_USE_FIXED) == 0)) | 20225 ((use->flags & XML_SCHEMA_ATTR_USE_FIXED) == 0)) |
20195 { | 20226 { |
20196 xmlSchemaPCustomErr(ctxt, | 20227 xmlSchemaPCustomErr(ctxt, |
20197 XML_SCHEMAP_AU_PROPS_CORRECT_2, | 20228 XML_SCHEMAP_AU_PROPS_CORRECT_2, |
20198 WXS_BASIC_CAST use, NULL, | 20229 WXS_BASIC_CAST use, NULL, |
20199 "The attribute declaration has a 'fixed' value constraint " | 20230 "The attribute declaration has a 'fixed' value constraint " |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20280 * | 20311 * |
20281 * Resolves the referenced type definition component. | 20312 * Resolves the referenced type definition component. |
20282 */ | 20313 */ |
20283 static int | 20314 static int |
20284 xmlSchemaResolveAttrTypeReferences(xmlSchemaAttributePtr item, | 20315 xmlSchemaResolveAttrTypeReferences(xmlSchemaAttributePtr item, |
20285 xmlSchemaParserCtxtPtr ctxt) | 20316 xmlSchemaParserCtxtPtr ctxt) |
20286 { | 20317 { |
20287 /* | 20318 /* |
20288 * The simple type definition corresponding to the <simpleType> element | 20319 * The simple type definition corresponding to the <simpleType> element |
20289 * information item in the [children], if present, otherwise the simple | 20320 * information item in the [children], if present, otherwise the simple |
20290 * type definition �resolved� to by the �actual value� of the type | 20321 * type definition `resolved` to by the `actual value` of the type |
20291 * [attribute], if present, otherwise the �simple ur-type definition�. | 20322 * [attribute], if present, otherwise the `simple ur-type definition`. |
20292 */ | 20323 */ |
20293 if (item->flags & XML_SCHEMAS_ATTR_INTERNAL_RESOLVED) | 20324 if (item->flags & XML_SCHEMAS_ATTR_INTERNAL_RESOLVED) |
20294 return(0); | 20325 return(0); |
20295 item->flags |= XML_SCHEMAS_ATTR_INTERNAL_RESOLVED; | 20326 item->flags |= XML_SCHEMAS_ATTR_INTERNAL_RESOLVED; |
20296 if (item->subtypes != NULL) | 20327 if (item->subtypes != NULL) |
20297 return(0); | 20328 return(0); |
20298 if (item->typeName != NULL) { | 20329 if (item->typeName != NULL) { |
20299 xmlSchemaTypePtr type; | 20330 xmlSchemaTypePtr type; |
20300 | 20331 |
20301 type = xmlSchemaGetType(ctxt->schema, item->typeName, | 20332 type = xmlSchemaGetType(ctxt->schema, item->typeName, |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20445 */ | 20476 */ |
20446 prev = xmlSchemaFindRedefCompInGraph( | 20477 prev = xmlSchemaFindRedefCompInGraph( |
20447 redef->targetBucket, item->type, | 20478 redef->targetBucket, item->type, |
20448 redef->refName, redef->refTargetNs); | 20479 redef->refName, redef->refTargetNs); |
20449 if (prev == NULL) { | 20480 if (prev == NULL) { |
20450 xmlChar *str = NULL; | 20481 xmlChar *str = NULL; |
20451 xmlNodePtr node; | 20482 xmlNodePtr node; |
20452 | 20483 |
20453 /* | 20484 /* |
20454 * SPEC src-redefine: | 20485 * SPEC src-redefine: |
20455 » * (6.2.1) "The �actual value� of its own name attribute plus | 20486 » * (6.2.1) "The `actual value` of its own name attribute plus |
20456 » * target namespace must successfully �resolve� to a model | 20487 » * target namespace must successfully `resolve` to a model |
20457 * group definition in I." | 20488 * group definition in I." |
20458 » * (7.2.1) "The �actual value� of its own name attribute plus | 20489 » * (7.2.1) "The `actual value` of its own name attribute plus |
20459 » * target namespace must successfully �resolve� to an attribute | 20490 » * target namespace must successfully `resolve` to an attribute |
20460 * group definition in I." | 20491 * group definition in I." |
20461 | 20492 |
20462 * | 20493 * |
20463 * Note that, if we are redefining with the use of references | 20494 * Note that, if we are redefining with the use of references |
20464 * to components, the spec assumes the src-resolve to be used; | 20495 * to components, the spec assumes the src-resolve to be used; |
20465 * but this won't assure that we search only *inside* the | 20496 * but this won't assure that we search only *inside* the |
20466 * redefined schema. | 20497 * redefined schema. |
20467 */ | 20498 */ |
20468 if (redef->reference) | 20499 if (redef->reference) |
20469 node = WXS_ITEM_NODE(redef->reference); | 20500 node = WXS_ITEM_NODE(redef->reference); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20622 * TODO: Seems like there's nothing more to do. The normal | 20653 * TODO: Seems like there's nothing more to do. The normal |
20623 * inheritance mechanism is used. But not 100% sure. | 20654 * inheritance mechanism is used. But not 100% sure. |
20624 */ | 20655 */ |
20625 break; | 20656 break; |
20626 case XML_SCHEMA_TYPE_GROUP: | 20657 case XML_SCHEMA_TYPE_GROUP: |
20627 /* | 20658 /* |
20628 * URGENT TODO: | 20659 * URGENT TODO: |
20629 * SPEC src-redefine: | 20660 * SPEC src-redefine: |
20630 * (6.2.2) "The {model group} of the model group definition | 20661 * (6.2.2) "The {model group} of the model group definition |
20631 * which corresponds to it per XML Representation of Model | 20662 * which corresponds to it per XML Representation of Model |
20632 » » * Group Definition Schema Components (�3.7.2) must be a | 20663 » » * Group Definition Schema Components ($3.7.2) must be a |
20633 » » * �valid restriction� of the {model group} of that model | 20664 » » * `valid restriction` of the {model group} of that model |
20634 * group definition in I, as defined in Particle Valid | 20665 * group definition in I, as defined in Particle Valid |
20635 » » * (Restriction) (�3.9.6)." | 20666 » » * (Restriction) ($3.9.6)." |
20636 */ | 20667 */ |
20637 break; | 20668 break; |
20638 case XML_SCHEMA_TYPE_ATTRIBUTEGROUP: | 20669 case XML_SCHEMA_TYPE_ATTRIBUTEGROUP: |
20639 /* | 20670 /* |
20640 * SPEC src-redefine: | 20671 * SPEC src-redefine: |
20641 * (7.2.2) "The {attribute uses} and {attribute wildcard} of | 20672 * (7.2.2) "The {attribute uses} and {attribute wildcard} of |
20642 * the attribute group definition which corresponds to it | 20673 * the attribute group definition which corresponds to it |
20643 * per XML Representation of Attribute Group Definition Schema | 20674 * per XML Representation of Attribute Group Definition Schema |
20644 » » * Components (�3.6.2) must be �valid restrictions� of the | 20675 » » * Components ($3.6.2) must be `valid restrictions` of the |
20645 * {attribute uses} and {attribute wildcard} of that attribute | 20676 * {attribute uses} and {attribute wildcard} of that attribute |
20646 * group definition in I, as defined in clause 2, clause 3 and | 20677 * group definition in I, as defined in clause 2, clause 3 and |
20647 * clause 4 of Derivation Valid (Restriction, Complex) | 20678 * clause 4 of Derivation Valid (Restriction, Complex) |
20648 » » * (�3.4.6) (where references to the base type definition are | 20679 » » * ($3.4.6) (where references to the base type definition are |
20649 * understood as references to the attribute group definition | 20680 * understood as references to the attribute group definition |
20650 * in I)." | 20681 * in I)." |
20651 */ | 20682 */ |
20652 err = xmlSchemaCheckDerivationOKRestriction2to4(pctxt, | 20683 err = xmlSchemaCheckDerivationOKRestriction2to4(pctxt, |
20653 XML_SCHEMA_ACTION_REDEFINE, | 20684 XML_SCHEMA_ACTION_REDEFINE, |
20654 item, redef->target, | 20685 item, redef->target, |
20655 (WXS_ATTR_GROUP_CAST item)->attrUses, | 20686 (WXS_ATTR_GROUP_CAST item)->attrUses, |
20656 (WXS_ATTR_GROUP_CAST redef->target)->attrUses, | 20687 (WXS_ATTR_GROUP_CAST redef->target)->attrUses, |
20657 (WXS_ATTR_GROUP_CAST item)->attributeWildcard, | 20688 (WXS_ATTR_GROUP_CAST item)->attributeWildcard, |
20658 (WXS_ATTR_GROUP_CAST redef->target)->attributeWildcard); | 20689 (WXS_ATTR_GROUP_CAST redef->target)->attributeWildcard); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20813 if (con->bucket == NULL) | 20844 if (con->bucket == NULL) |
20814 con->bucket = rootBucket; | 20845 con->bucket = rootBucket; |
20815 | 20846 |
20816 /* TODO: | 20847 /* TODO: |
20817 * SPEC (src-redefine): | 20848 * SPEC (src-redefine): |
20818 * (6.2) "If it has no such self-reference, then all of the | 20849 * (6.2) "If it has no such self-reference, then all of the |
20819 * following must be true:" | 20850 * following must be true:" |
20820 | 20851 |
20821 * (6.2.2) The {model group} of the model group definition which | 20852 * (6.2.2) The {model group} of the model group definition which |
20822 * corresponds to it per XML Representation of Model Group | 20853 * corresponds to it per XML Representation of Model Group |
20823 * Definition Schema Components (�3.7.2) must be a �valid | 20854 * Definition Schema Components ($3.7.2) must be a `valid |
20824 * restriction� of the {model group} of that model group definition | 20855 * restriction` of the {model group} of that model group definition |
20825 * in I, as defined in Particle Valid (Restriction) (�3.9.6)." | 20856 * in I, as defined in Particle Valid (Restriction) ($3.9.6)." |
20826 */ | 20857 */ |
20827 xmlSchemaCheckSRCRedefineFirst(pctxt); | 20858 xmlSchemaCheckSRCRedefineFirst(pctxt); |
20828 | 20859 |
20829 /* | 20860 /* |
20830 * Add global components to the schemata's hash tables. | 20861 * Add global components to the schemata's hash tables. |
20831 */ | 20862 */ |
20832 xmlSchemaAddComponents(pctxt, rootBucket); | 20863 xmlSchemaAddComponents(pctxt, rootBucket); |
20833 | 20864 |
20834 pctxt->ctxtType = NULL; | 20865 pctxt->ctxtType = NULL; |
20835 items = (xmlSchemaTreeItemPtr *) con->pending->items; | 20866 items = (xmlSchemaTreeItemPtr *) con->pending->items; |
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21499 /* | 21530 /* |
21500 * Note that we assume a whitespace of preserve for anySimpleType. | 21531 * Note that we assume a whitespace of preserve for anySimpleType. |
21501 */ | 21532 */ |
21502 if ((type->builtInType == XML_SCHEMAS_STRING) || | 21533 if ((type->builtInType == XML_SCHEMAS_STRING) || |
21503 (type->builtInType == XML_SCHEMAS_ANYSIMPLETYPE)) | 21534 (type->builtInType == XML_SCHEMAS_ANYSIMPLETYPE)) |
21504 return(XML_SCHEMA_WHITESPACE_PRESERVE); | 21535 return(XML_SCHEMA_WHITESPACE_PRESERVE); |
21505 else if (type->builtInType == XML_SCHEMAS_NORMSTRING) | 21536 else if (type->builtInType == XML_SCHEMAS_NORMSTRING) |
21506 return(XML_SCHEMA_WHITESPACE_REPLACE); | 21537 return(XML_SCHEMA_WHITESPACE_REPLACE); |
21507 else { | 21538 else { |
21508 /* | 21539 /* |
21509 » * For all �atomic� datatypes other than string (and types �derived� | 21540 » * For all `atomic` datatypes other than string (and types `derived` |
21510 » * by �restriction� from it) the value of whiteSpace is fixed to | 21541 » * by `restriction` from it) the value of whiteSpace is fixed to |
21511 * collapse | 21542 * collapse |
21512 * Note that this includes built-in list datatypes. | 21543 * Note that this includes built-in list datatypes. |
21513 */ | 21544 */ |
21514 return(XML_SCHEMA_WHITESPACE_COLLAPSE); | 21545 return(XML_SCHEMA_WHITESPACE_COLLAPSE); |
21515 } | 21546 } |
21516 } else if (WXS_IS_LIST(type)) { | 21547 } else if (WXS_IS_LIST(type)) { |
21517 /* | 21548 /* |
21518 * For list types the facet "whiteSpace" is fixed to "collapse". | 21549 * For list types the facet "whiteSpace" is fixed to "collapse". |
21519 */ | 21550 */ |
21520 return (XML_SCHEMA_WHITESPACE_COLLAPSE); | 21551 return (XML_SCHEMA_WHITESPACE_COLLAPSE); |
21521 } else if (WXS_IS_UNION(type)) { | 21552 } else if (WXS_IS_UNION(type)) { |
21522 return (XML_SCHEMA_WHITESPACE_UNKNOWN); | 21553 return (XML_SCHEMA_WHITESPACE_UNKNOWN); |
21523 } else if (WXS_IS_ATOMIC(type)) { | 21554 } else if (WXS_IS_ATOMIC(type)) { |
21524 if (type->flags & XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE) | 21555 if (type->flags & XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE) |
21525 return (XML_SCHEMA_WHITESPACE_PRESERVE); | 21556 return (XML_SCHEMA_WHITESPACE_PRESERVE); |
21526 else if (type->flags & XML_SCHEMAS_TYPE_WHITESPACE_REPLACE) | 21557 else if (type->flags & XML_SCHEMAS_TYPE_WHITESPACE_REPLACE) |
21527 return (XML_SCHEMA_WHITESPACE_REPLACE); | 21558 return (XML_SCHEMA_WHITESPACE_REPLACE); |
21528 else | 21559 else |
21529 return (XML_SCHEMA_WHITESPACE_COLLAPSE); | 21560 return (XML_SCHEMA_WHITESPACE_COLLAPSE); |
21530 } | 21561 } |
21531 return (-1); | 21562 return (-1); |
21532 } | 21563 } |
21533 | 21564 |
21534 /************************************************************************ | 21565 /************************************************************************ |
21535 * » » » » » » » » » * | 21566 *» » » » » » » » » * |
21536 * » » » Simple type validation» » » » * | 21567 *» » » Simple type validation» » » » * |
21537 * » » » » » » » » » * | 21568 *» » » » » » » » » * |
21538 ************************************************************************/ | 21569 ************************************************************************/ |
21539 | 21570 |
21540 | 21571 |
21541 /************************************************************************ | 21572 /************************************************************************ |
21542 * » » » » » » » » » * | 21573 *» » » » » » » » » * |
21543 * » » » DOM Validation code» » » » * | 21574 *» » » DOM Validation code» » » » * |
21544 * » » » » » » » » » * | 21575 *» » » » » » » » » * |
21545 ************************************************************************/ | 21576 ************************************************************************/ |
21546 | 21577 |
21547 /** | 21578 /** |
21548 * xmlSchemaAssembleByLocation: | 21579 * xmlSchemaAssembleByLocation: |
21549 * @pctxt: a schema parser context | 21580 * @pctxt: a schema parser context |
21550 * @vctxt: a schema validation context | 21581 * @vctxt: a schema validation context |
21551 * @schema: the existing schema | 21582 * @schema: the existing schema |
21552 * @node: the node that fired the assembling | 21583 * @node: the node that fired the assembling |
21553 * @nsName: the namespace name of the new schema | 21584 * @nsName: the namespace name of the new schema |
21554 * @location: the location of the schema | 21585 * @location: the location of the schema |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21928 return(i); | 21959 return(i); |
21929 } | 21960 } |
21930 /* Add new entry. */ | 21961 /* Add new entry. */ |
21931 i = vctxt->nodeQNames->nbItems; | 21962 i = vctxt->nodeQNames->nbItems; |
21932 xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) lname); | 21963 xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) lname); |
21933 xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) nsname); | 21964 xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) nsname); |
21934 return(i); | 21965 return(i); |
21935 } | 21966 } |
21936 | 21967 |
21937 /************************************************************************ | 21968 /************************************************************************ |
21938 * » » » » » » » » » * | 21969 *» » » » » » » » » * |
21939 * Validation of identity-constraints (IDC) * | 21970 * Validation of identity-constraints (IDC) * |
21940 * » » » » » » » » » * | 21971 *» » » » » » » » » * |
21941 ************************************************************************/ | 21972 ************************************************************************/ |
21942 | 21973 |
21943 /** | 21974 /** |
21944 * xmlSchemaAugmentIDC: | 21975 * xmlSchemaAugmentIDC: |
21945 * @idcDef: the IDC definition | 21976 * @idcDef: the IDC definition |
21946 * | 21977 * |
21947 * Creates an augmented IDC definition item. | 21978 * Creates an augmented IDC definition item. |
21948 * | 21979 * |
21949 * Returns the item, or NULL on internal errors. | 21980 * Returns the item, or NULL on internal errors. |
21950 */ | 21981 */ |
(...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22805 /* | 22836 /* |
22806 * Get/create the key-sequence. | 22837 * Get/create the key-sequence. |
22807 */ | 22838 */ |
22808 keySeq = matcher->keySeqs[pos]; | 22839 keySeq = matcher->keySeqs[pos]; |
22809 if (keySeq == NULL) { | 22840 if (keySeq == NULL) { |
22810 goto create_sequence; | 22841 goto create_sequence; |
22811 } else if (keySeq[idx] != NULL) { | 22842 } else if (keySeq[idx] != NULL) { |
22812 xmlChar *str = NULL; | 22843 xmlChar *str = NULL; |
22813 /* | 22844 /* |
22814 * cvc-identity-constraint: | 22845 * cvc-identity-constraint: |
22815 » » * 3 For each node in the �target node set� all | 22846 » » * 3 For each node in the `target node set` all |
22816 * of the {fields}, with that node as the context | 22847 * of the {fields}, with that node as the context |
22817 * node, evaluate to either an empty node-set or | 22848 * node, evaluate to either an empty node-set or |
22818 * a node-set with exactly one member, which must | 22849 * a node-set with exactly one member, which must |
22819 * have a simple type. | 22850 * have a simple type. |
22820 * | 22851 * |
22821 * The key was already set; report an error. | 22852 * The key was already set; report an error. |
22822 */ | 22853 */ |
22823 xmlSchemaCustomErr(ACTXT_CAST vctxt, | 22854 xmlSchemaCustomErr(ACTXT_CAST vctxt, |
22824 XML_SCHEMAV_CVC_IDC, NULL, | 22855 XML_SCHEMAV_CVC_IDC, NULL, |
22825 WXS_BASIC_CAST matcher->aidc->def, | 22856 WXS_BASIC_CAST matcher->aidc->def, |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22935 } | 22966 } |
22936 goto selector_leave; | 22967 goto selector_leave; |
22937 } | 22968 } |
22938 } | 22969 } |
22939 /* | 22970 /* |
22940 * All fields did resolve. | 22971 * All fields did resolve. |
22941 */ | 22972 */ |
22942 | 22973 |
22943 /* | 22974 /* |
22944 * 4.1 If the {identity-constraint category} is unique(/key), | 22975 * 4.1 If the {identity-constraint category} is unique(/key), |
22945 » * then no two members of the �qualified node set� have | 22976 » * then no two members of the `qualified node set` have |
22946 » * �key-sequences� whose members are pairwise equal, as | 22977 » * `key-sequences` whose members are pairwise equal, as |
22947 * defined by Equal in [XML Schemas: Datatypes]. | 22978 * defined by Equal in [XML Schemas: Datatypes]. |
22948 * | 22979 * |
22949 * Get the IDC binding from the matcher and check for | 22980 * Get the IDC binding from the matcher and check for |
22950 * duplicate key-sequences. | 22981 * duplicate key-sequences. |
22951 */ | 22982 */ |
22952 #if 0 | 22983 #if 0 |
22953 bind = xmlSchemaIDCAcquireBinding(vctxt, matcher); | 22984 bind = xmlSchemaIDCAcquireBinding(vctxt, matcher); |
22954 #endif | 22985 #endif |
22955 targets = xmlSchemaIDCAcquireTargetList(vctxt, matcher); | 22986 targets = xmlSchemaIDCAcquireTargetList(vctxt, matcher); |
22956 if ((idc->type != XML_SCHEMA_TYPE_IDC_KEYREF) && | 22987 if ((idc->type != XML_SCHEMA_TYPE_IDC_KEYREF) && |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
23064 xmlFree(ntItem); | 23095 xmlFree(ntItem); |
23065 } | 23096 } |
23066 return (-1); | 23097 return (-1); |
23067 } | 23098 } |
23068 | 23099 |
23069 goto selector_leave; | 23100 goto selector_leave; |
23070 selector_key_error: | 23101 selector_key_error: |
23071 { | 23102 { |
23072 xmlChar *str = NULL; | 23103 xmlChar *str = NULL; |
23073 /* | 23104 /* |
23074 » » * 4.2.1 (KEY) The �target node set� and the | 23105 » » * 4.2.1 (KEY) The `target node set` and the |
23075 » » * �qualified node set� are equal, that is, every | 23106 » » * `qualified node set` are equal, that is, every |
23076 » » * member of the �target node set� is also a member | 23107 » » * member of the `target node set` is also a member |
23077 » » * of the �qualified node set� and vice versa. | 23108 » » * of the `qualified node set` and vice versa. |
23078 */ | 23109 */ |
23079 xmlSchemaCustomErr(ACTXT_CAST vctxt, | 23110 xmlSchemaCustomErr(ACTXT_CAST vctxt, |
23080 XML_SCHEMAV_CVC_IDC, NULL, | 23111 XML_SCHEMAV_CVC_IDC, NULL, |
23081 WXS_BASIC_CAST idc, | 23112 WXS_BASIC_CAST idc, |
23082 "Not all fields of %s evaluate to a node", | 23113 "Not all fields of %s evaluate to a node", |
23083 xmlSchemaGetIDCDesignation(&str, idc), NULL); | 23114 xmlSchemaGetIDCDesignation(&str, idc), NULL); |
23084 FREE_AND_NULL(str); | 23115 FREE_AND_NULL(str); |
23085 } | 23116 } |
23086 selector_leave: | 23117 selector_leave: |
23087 /* | 23118 /* |
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
23858 } | 23889 } |
23859 } | 23890 } |
23860 } | 23891 } |
23861 matcher = matcher->next; | 23892 matcher = matcher->next; |
23862 } | 23893 } |
23863 /* TODO: Return an error if any error encountered. */ | 23894 /* TODO: Return an error if any error encountered. */ |
23864 return (0); | 23895 return (0); |
23865 } | 23896 } |
23866 | 23897 |
23867 /************************************************************************ | 23898 /************************************************************************ |
23868 * » » » » » » » » » * | 23899 *» » » » » » » » » * |
23869 * » » » XML Reader validation code * | 23900 *» » » XML Reader validation code * |
23870 * » » » » » » » » » * | 23901 *» » » » » » » » » * |
23871 ************************************************************************/ | 23902 ************************************************************************/ |
23872 | 23903 |
23873 static xmlSchemaAttrInfoPtr | 23904 static xmlSchemaAttrInfoPtr |
23874 xmlSchemaGetFreshAttrInfo(xmlSchemaValidCtxtPtr vctxt) | 23905 xmlSchemaGetFreshAttrInfo(xmlSchemaValidCtxtPtr vctxt) |
23875 { | 23906 { |
23876 xmlSchemaAttrInfoPtr iattr; | 23907 xmlSchemaAttrInfoPtr iattr; |
23877 /* | 23908 /* |
23878 * Grow/create list of attribute infos. | 23909 * Grow/create list of attribute infos. |
23879 */ | 23910 */ |
23880 if (vctxt->attrInfos == NULL) { | 23911 if (vctxt->attrInfos == NULL) { |
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
24463 /* | 24494 /* |
24464 * 3.14.4 Simple Type Definition Validation Rules | 24495 * 3.14.4 Simple Type Definition Validation Rules |
24465 * Validation Rule: String Valid | 24496 * Validation Rule: String Valid |
24466 */ | 24497 */ |
24467 /* | 24498 /* |
24468 * 1 It is schema-valid with respect to that definition as defined | 24499 * 1 It is schema-valid with respect to that definition as defined |
24469 * by Datatype Valid in [XML Schemas: Datatypes]. | 24500 * by Datatype Valid in [XML Schemas: Datatypes]. |
24470 */ | 24501 */ |
24471 /* | 24502 /* |
24472 * 2.1 If The definition is ENTITY or is validly derived from ENTITY given | 24503 * 2.1 If The definition is ENTITY or is validly derived from ENTITY given |
24473 * the empty set, as defined in Type Derivation OK (Simple) (�3.14.6), then | 24504 * the empty set, as defined in Type Derivation OK (Simple) ($3.14.6), then |
24474 * the string must be a �declared entity name�. | 24505 * the string must be a `declared entity name`. |
24475 */ | 24506 */ |
24476 /* | 24507 /* |
24477 * 2.2 If The definition is ENTITIES or is validly derived from ENTITIES | 24508 * 2.2 If The definition is ENTITIES or is validly derived from ENTITIES |
24478 * given the empty set, as defined in Type Derivation OK (Simple) (�3.14.6), | 24509 * given the empty set, as defined in Type Derivation OK (Simple) ($3.14.6), |
24479 * then every whitespace-delimited substring of the string must be a �declare
d | 24510 * then every whitespace-delimited substring of the string must be a `declare
d |
24480 * entity name�. | 24511 * entity name`. |
24481 */ | 24512 */ |
24482 /* | 24513 /* |
24483 * 2.3 otherwise no further condition applies. | 24514 * 2.3 otherwise no further condition applies. |
24484 */ | 24515 */ |
24485 if ((! valNeeded) && (type->flags & XML_SCHEMAS_TYPE_FACETSNEEDVALUE)) | 24516 if ((! valNeeded) && (type->flags & XML_SCHEMAS_TYPE_FACETSNEEDVALUE)) |
24486 valNeeded = 1; | 24517 valNeeded = 1; |
24487 if (value == NULL) | 24518 if (value == NULL) |
24488 value = BAD_CAST ""; | 24519 value = BAD_CAST ""; |
24489 if (WXS_IS_ANY_SIMPLE_TYPE(type) || WXS_IS_ATOMIC(type)) { | 24520 if (WXS_IS_ANY_SIMPLE_TYPE(type) || WXS_IS_ATOMIC(type)) { |
24490 xmlSchemaTypePtr biType; /* The built-in type. */ | 24521 xmlSchemaTypePtr biType; /* The built-in type. */ |
24491 /* | 24522 /* |
24492 » * SPEC (1.2.1) "if {variety} is �atomic� then the string must �match� | 24523 » * SPEC (1.2.1) "if {variety} is `atomic` then the string must `match` |
24493 » * a literal in the �lexical space� of {base type definition}" | 24524 » * a literal in the `lexical space` of {base type definition}" |
24494 */ | 24525 */ |
24495 /* | 24526 /* |
24496 * Whitespace-normalize. | 24527 * Whitespace-normalize. |
24497 */ | 24528 */ |
24498 NORMALIZE(type); | 24529 NORMALIZE(type); |
24499 if (type->type != XML_SCHEMA_TYPE_BASIC) { | 24530 if (type->type != XML_SCHEMA_TYPE_BASIC) { |
24500 /* | 24531 /* |
24501 * Get the built-in type. | 24532 * Get the built-in type. |
24502 */ | 24533 */ |
24503 biType = type->baseType; | 24534 biType = type->baseType; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
24594 } | 24625 } |
24595 if (fireErrors && (ret > 0)) | 24626 if (fireErrors && (ret > 0)) |
24596 xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1); | 24627 xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1); |
24597 } else if (WXS_IS_LIST(type)) { | 24628 } else if (WXS_IS_LIST(type)) { |
24598 | 24629 |
24599 xmlSchemaTypePtr itemType; | 24630 xmlSchemaTypePtr itemType; |
24600 const xmlChar *cur, *end; | 24631 const xmlChar *cur, *end; |
24601 xmlChar *tmpValue = NULL; | 24632 xmlChar *tmpValue = NULL; |
24602 unsigned long len = 0; | 24633 unsigned long len = 0; |
24603 xmlSchemaValPtr prevVal = NULL, curVal = NULL; | 24634 xmlSchemaValPtr prevVal = NULL, curVal = NULL; |
24604 » /* 1.2.2 if {variety} is �list� then the string must be a sequence | 24635 » /* 1.2.2 if {variety} is `list` then the string must be a sequence |
24605 » * of white space separated tokens, each of which �match�es a literal | 24636 » * of white space separated tokens, each of which `match`es a literal |
24606 » * in the �lexical space� of {item type definition} | 24637 » * in the `lexical space` of {item type definition} |
24607 */ | 24638 */ |
24608 /* | 24639 /* |
24609 * Note that XML_SCHEMAS_TYPE_NORMVALUENEEDED will be set if | 24640 * Note that XML_SCHEMAS_TYPE_NORMVALUENEEDED will be set if |
24610 * the list type has an enum or pattern facet. | 24641 * the list type has an enum or pattern facet. |
24611 */ | 24642 */ |
24612 NORMALIZE(type); | 24643 NORMALIZE(type); |
24613 /* | 24644 /* |
24614 * VAL TODO: Optimize validation of empty values. | 24645 * VAL TODO: Optimize validation of empty values. |
24615 * VAL TODO: We do not have computed values for lists. | 24646 * VAL TODO: We do not have computed values for lists. |
24616 */ | 24647 */ |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
24677 /* | 24708 /* |
24678 * Report the normalized value. | 24709 * Report the normalized value. |
24679 */ | 24710 */ |
24680 normalize = 1; | 24711 normalize = 1; |
24681 NORMALIZE(type); | 24712 NORMALIZE(type); |
24682 xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1); | 24713 xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1); |
24683 } | 24714 } |
24684 } else if (WXS_IS_UNION(type)) { | 24715 } else if (WXS_IS_UNION(type)) { |
24685 xmlSchemaTypeLinkPtr memberLink; | 24716 xmlSchemaTypeLinkPtr memberLink; |
24686 /* | 24717 /* |
24687 » * TODO: For all datatypes �derived� by �union� whiteSpace does | 24718 » * TODO: For all datatypes `derived` by `union` whiteSpace does |
24688 » * not apply directly; however, the normalization behavior of �union� | 24719 » * not apply directly; however, the normalization behavior of `union` |
24689 * types is controlled by the value of whiteSpace on that one of the | 24720 * types is controlled by the value of whiteSpace on that one of the |
24690 » * �memberTypes� against which the �union� is successfully validated. | 24721 » * `memberTypes` against which the `union` is successfully validated. |
24691 * | 24722 * |
24692 * This means that the value is normalized by the first validating | 24723 * This means that the value is normalized by the first validating |
24693 * member type, then the facets of the union type are applied. This | 24724 * member type, then the facets of the union type are applied. This |
24694 * needs changing of the value! | 24725 * needs changing of the value! |
24695 */ | 24726 */ |
24696 | 24727 |
24697 /* | 24728 /* |
24698 » * 1.2.3 if {variety} is �union� then the string must �match� a | 24729 » * 1.2.3 if {variety} is `union` then the string must `match` a |
24699 » * literal in the �lexical space� of at least one member of | 24730 » * literal in the `lexical space` of at least one member of |
24700 * {member type definitions} | 24731 * {member type definitions} |
24701 */ | 24732 */ |
24702 memberLink = xmlSchemaGetUnionSimpleTypeMemberTypes(type); | 24733 memberLink = xmlSchemaGetUnionSimpleTypeMemberTypes(type); |
24703 if (memberLink == NULL) { | 24734 if (memberLink == NULL) { |
24704 AERROR_INT("xmlSchemaVCheckCVCSimpleType", | 24735 AERROR_INT("xmlSchemaVCheckCVCSimpleType", |
24705 "union simple type has no member types"); | 24736 "union simple type has no member types"); |
24706 goto internal_error; | 24737 goto internal_error; |
24707 } | 24738 } |
24708 /* | 24739 /* |
24709 * Always normalize union type values, since we currently | 24740 * Always normalize union type values, since we currently |
(...skipping 18 matching lines...) Expand all Loading... |
24728 "validating members of union simple type"); | 24759 "validating members of union simple type"); |
24729 goto internal_error; | 24760 goto internal_error; |
24730 } | 24761 } |
24731 ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3; | 24762 ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3; |
24732 } | 24763 } |
24733 /* | 24764 /* |
24734 * Apply facets (pattern, enumeration). | 24765 * Apply facets (pattern, enumeration). |
24735 */ | 24766 */ |
24736 if ((ret == 0) && (type->flags & XML_SCHEMAS_TYPE_HAS_FACETS)) { | 24767 if ((ret == 0) && (type->flags & XML_SCHEMAS_TYPE_HAS_FACETS)) { |
24737 /* | 24768 /* |
24738 » * The normalization behavior of �union� types is controlled by | 24769 » * The normalization behavior of `union` types is controlled by |
24739 » * the value of whiteSpace on that one of the �memberTypes� | 24770 » * the value of whiteSpace on that one of the `memberTypes` |
24740 » * against which the �union� is successfully validated. | 24771 » * against which the `union` is successfully validated. |
24741 */ | 24772 */ |
24742 NORMALIZE(memberLink->type); | 24773 NORMALIZE(memberLink->type); |
24743 ret = xmlSchemaValidateFacets(actxt, node, type, | 24774 ret = xmlSchemaValidateFacets(actxt, node, type, |
24744 XML_SCHEMAS_UNKNOWN, value, val, | 24775 XML_SCHEMAS_UNKNOWN, value, val, |
24745 0, fireErrors); | 24776 0, fireErrors); |
24746 if (ret != 0) { | 24777 if (ret != 0) { |
24747 if (ret < 0) { | 24778 if (ret < 0) { |
24748 AERROR_INT("xmlSchemaVCheckCVCSimpleType", | 24779 AERROR_INT("xmlSchemaVCheckCVCSimpleType", |
24749 "validating facets of union simple type"); | 24780 "validating facets of union simple type"); |
24750 goto internal_error; | 24781 goto internal_error; |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
24890 xmlSchemaFormatQName(&str, nsName, local), NULL); | 24921 xmlSchemaFormatQName(&str, nsName, local), NULL); |
24891 FREE_AND_NULL(str); | 24922 FREE_AND_NULL(str); |
24892 ret = vctxt->err; | 24923 ret = vctxt->err; |
24893 goto exit; | 24924 goto exit; |
24894 } | 24925 } |
24895 if (elemDecl != NULL) { | 24926 if (elemDecl != NULL) { |
24896 int set = 0; | 24927 int set = 0; |
24897 | 24928 |
24898 /* | 24929 /* |
24899 * SPEC cvc-elt (3.3.4) : (4.3) (Type Derivation OK) | 24930 * SPEC cvc-elt (3.3.4) : (4.3) (Type Derivation OK) |
24900 » * "The �local type definition� must be validly | 24931 » * "The `local type definition` must be validly |
24901 * derived from the {type definition} given the union of | 24932 * derived from the {type definition} given the union of |
24902 * the {disallowed substitutions} and the {type definition}'s | 24933 * the {disallowed substitutions} and the {type definition}'s |
24903 * {prohibited substitutions}, as defined in | 24934 * {prohibited substitutions}, as defined in |
24904 » * Type Derivation OK (Complex) (�3.4.6) | 24935 » * Type Derivation OK (Complex) ($3.4.6) |
24905 * (if it is a complex type definition), | 24936 * (if it is a complex type definition), |
24906 * or given {disallowed substitutions} as defined in Type | 24937 * or given {disallowed substitutions} as defined in Type |
24907 » * Derivation OK (Simple) (�3.14.6) (if it is a simple type | 24938 » * Derivation OK (Simple) ($3.14.6) (if it is a simple type |
24908 * definition)." | 24939 * definition)." |
24909 * | 24940 * |
24910 * {disallowed substitutions}: the "block" on the element decl. | 24941 * {disallowed substitutions}: the "block" on the element decl. |
24911 * {prohibited substitutions}: the "block" on the type def. | 24942 * {prohibited substitutions}: the "block" on the type def. |
24912 */ | 24943 */ |
24913 /* | 24944 /* |
24914 * OPTIMIZE TODO: We could map types already evaluated | 24945 * OPTIMIZE TODO: We could map types already evaluated |
24915 * to be validly derived from other types to avoid checking | 24946 * to be validly derived from other types to avoid checking |
24916 * this over and over for the same types. | 24947 * this over and over for the same types. |
24917 */ | 24948 */ |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
24980 actualType = WXS_ELEM_TYPEDEF(elemDecl); | 25011 actualType = WXS_ELEM_TYPEDEF(elemDecl); |
24981 /* | 25012 /* |
24982 * cvc-elt (3.3.4) : 2 | 25013 * cvc-elt (3.3.4) : 2 |
24983 */ | 25014 */ |
24984 if (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT) { | 25015 if (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT) { |
24985 VERROR(XML_SCHEMAV_CVC_ELT_2, NULL, | 25016 VERROR(XML_SCHEMAV_CVC_ELT_2, NULL, |
24986 "The element declaration is abstract"); | 25017 "The element declaration is abstract"); |
24987 return (vctxt->err); | 25018 return (vctxt->err); |
24988 } | 25019 } |
24989 if (actualType == NULL) { | 25020 if (actualType == NULL) { |
24990 » VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL, | 25021 » VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL, |
24991 » "The type definition is absent"); | 25022 » "The type definition is absent"); |
24992 » return (XML_SCHEMAV_CVC_TYPE_1); | 25023 » return (XML_SCHEMAV_CVC_TYPE_1); |
24993 } | 25024 } |
24994 if (vctxt->nbAttrInfos != 0) { | 25025 if (vctxt->nbAttrInfos != 0) { |
24995 int ret; | 25026 int ret; |
24996 xmlSchemaAttrInfoPtr iattr; | 25027 xmlSchemaAttrInfoPtr iattr; |
24997 /* | 25028 /* |
24998 * cvc-elt (3.3.4) : 3 | 25029 * cvc-elt (3.3.4) : 3 |
24999 * Handle 'xsi:nil'. | 25030 * Handle 'xsi:nil'. |
25000 */ | 25031 */ |
25001 iattr = xmlSchemaGetMetaAttrInfo(vctxt, | 25032 iattr = xmlSchemaGetMetaAttrInfo(vctxt, |
25002 XML_SCHEMA_ATTR_INFO_META_XSI_NIL); | 25033 XML_SCHEMA_ATTR_INFO_META_XSI_NIL); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
25072 /* | 25103 /* |
25073 * IDC: Register identity-constraint XPath matchers. | 25104 * IDC: Register identity-constraint XPath matchers. |
25074 */ | 25105 */ |
25075 if ((elemDecl->idcs != NULL) && | 25106 if ((elemDecl->idcs != NULL) && |
25076 (xmlSchemaIDCRegisterMatchers(vctxt, elemDecl) == -1)) | 25107 (xmlSchemaIDCRegisterMatchers(vctxt, elemDecl) == -1)) |
25077 return (-1); | 25108 return (-1); |
25078 /* | 25109 /* |
25079 * No actual type definition. | 25110 * No actual type definition. |
25080 */ | 25111 */ |
25081 if (actualType == NULL) { | 25112 if (actualType == NULL) { |
25082 » VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL, | 25113 » VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL, |
25083 » "The type definition is absent"); | 25114 » "The type definition is absent"); |
25084 » return (XML_SCHEMAV_CVC_TYPE_1); | 25115 » return (XML_SCHEMAV_CVC_TYPE_1); |
25085 } | 25116 } |
25086 /* | 25117 /* |
25087 * Remember the actual type definition. | 25118 * Remember the actual type definition. |
25088 */ | 25119 */ |
25089 vctxt->inode->typeDef = actualType; | 25120 vctxt->inode->typeDef = actualType; |
25090 | 25121 |
25091 return (0); | 25122 return (0); |
25092 } | 25123 } |
25093 | 25124 |
25094 static int | 25125 static int |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
25168 xmlSchemaItemListPtr attrUseList; | 25199 xmlSchemaItemListPtr attrUseList; |
25169 xmlSchemaAttributeUsePtr attrUse = NULL; | 25200 xmlSchemaAttributeUsePtr attrUse = NULL; |
25170 xmlSchemaAttributePtr attrDecl = NULL; | 25201 xmlSchemaAttributePtr attrDecl = NULL; |
25171 xmlSchemaAttrInfoPtr iattr, tmpiattr; | 25202 xmlSchemaAttrInfoPtr iattr, tmpiattr; |
25172 int i, j, found, nbAttrs, nbUses; | 25203 int i, j, found, nbAttrs, nbUses; |
25173 int xpathRes = 0, res, wildIDs = 0, fixed; | 25204 int xpathRes = 0, res, wildIDs = 0, fixed; |
25174 xmlNodePtr defAttrOwnerElem = NULL; | 25205 xmlNodePtr defAttrOwnerElem = NULL; |
25175 | 25206 |
25176 /* | 25207 /* |
25177 * SPEC (cvc-attribute) | 25208 * SPEC (cvc-attribute) |
25178 * (1) "The declaration must not be �absent� (see Missing | 25209 * (1) "The declaration must not be `absent` (see Missing |
25179 * Sub-components (�5.3) for how this can fail to be | 25210 * Sub-components ($5.3) for how this can fail to be |
25180 * the case)." | 25211 * the case)." |
25181 * (2) "Its {type definition} must not be absent." | 25212 * (2) "Its {type definition} must not be absent." |
25182 * | 25213 * |
25183 * NOTE (1) + (2): This is not handled here, since we currently do not | 25214 * NOTE (1) + (2): This is not handled here, since we currently do not |
25184 * allow validation against schemas which have missing sub-components. | 25215 * allow validation against schemas which have missing sub-components. |
25185 * | 25216 * |
25186 * SPEC (cvc-complex-type) | 25217 * SPEC (cvc-complex-type) |
25187 * (3) "For each attribute information item in the element information | 25218 * (3) "For each attribute information item in the element information |
25188 * item's [attributes] excepting those whose [namespace name] is | 25219 * item's [attributes] excepting those whose [namespace name] is |
25189 * identical to http://www.w3.org/2001/XMLSchema-instance and whose | 25220 * identical to http://www.w3.org/2001/XMLSchema-instance and whose |
(...skipping 29 matching lines...) Expand all Loading... |
25219 continue; | 25250 continue; |
25220 if (!xmlStrEqual(iattr->nsName, attrDecl->targetNamespace)) | 25251 if (!xmlStrEqual(iattr->nsName, attrDecl->targetNamespace)) |
25221 continue; | 25252 continue; |
25222 found = 1; | 25253 found = 1; |
25223 /* | 25254 /* |
25224 * SPEC (cvc-complex-type) | 25255 * SPEC (cvc-complex-type) |
25225 * (3.1) "If there is among the {attribute uses} an attribute | 25256 * (3.1) "If there is among the {attribute uses} an attribute |
25226 * use with an {attribute declaration} whose {name} matches | 25257 * use with an {attribute declaration} whose {name} matches |
25227 * the attribute information item's [local name] and whose | 25258 * the attribute information item's [local name] and whose |
25228 * {target namespace} is identical to the attribute information | 25259 * {target namespace} is identical to the attribute information |
25229 » * item's [namespace name] (where an �absent� {target namespace} | 25260 » * item's [namespace name] (where an `absent` {target namespace} |
25230 * is taken to be identical to a [namespace name] with no value), | 25261 * is taken to be identical to a [namespace name] with no value), |
25231 » * then the attribute information must be �valid� with respect | 25262 » * then the attribute information must be `valid` with respect |
25232 * to that attribute use as per Attribute Locally Valid (Use) | 25263 * to that attribute use as per Attribute Locally Valid (Use) |
25233 » * (�3.5.4). In this case the {attribute declaration} of that | 25264 » * ($3.5.4). In this case the {attribute declaration} of that |
25234 » * attribute use is the �context-determined declaration� for the | 25265 » * attribute use is the `context-determined declaration` for the |
25235 * attribute information item with respect to Schema-Validity | 25266 * attribute information item with respect to Schema-Validity |
25236 » * Assessment (Attribute) (�3.2.4) and | 25267 » * Assessment (Attribute) ($3.2.4) and |
25237 » * Assessment Outcome (Attribute) (�3.2.5). | 25268 » * Assessment Outcome (Attribute) ($3.2.5). |
25238 */ | 25269 */ |
25239 iattr->state = XML_SCHEMAS_ATTR_ASSESSED; | 25270 iattr->state = XML_SCHEMAS_ATTR_ASSESSED; |
25240 iattr->use = attrUse; | 25271 iattr->use = attrUse; |
25241 /* | 25272 /* |
25242 * Context-determined declaration. | 25273 * Context-determined declaration. |
25243 */ | 25274 */ |
25244 iattr->decl = attrDecl; | 25275 iattr->decl = attrDecl; |
25245 iattr->typeDef = attrDecl->subtypes; | 25276 iattr->typeDef = attrDecl->subtypes; |
25246 break; | 25277 break; |
25247 } | 25278 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
25304 for (i = 0; i < nbAttrs; i++) { | 25335 for (i = 0; i < nbAttrs; i++) { |
25305 iattr = vctxt->attrInfos[i]; | 25336 iattr = vctxt->attrInfos[i]; |
25306 /* | 25337 /* |
25307 * SPEC (cvc-complex-type) (3) | 25338 * SPEC (cvc-complex-type) (3) |
25308 * Skip meta attributes. | 25339 * Skip meta attributes. |
25309 */ | 25340 */ |
25310 if (iattr->state != XML_SCHEMAS_ATTR_UNKNOWN) | 25341 if (iattr->state != XML_SCHEMAS_ATTR_UNKNOWN) |
25311 continue; | 25342 continue; |
25312 /* | 25343 /* |
25313 * SPEC (cvc-complex-type) | 25344 * SPEC (cvc-complex-type) |
25314 » * (3.2.2) "The attribute information item must be �valid� with | 25345 » * (3.2.2) "The attribute information item must be `valid` with |
25315 » * respect to it as defined in Item Valid (Wildcard) (�3.10.4)." | 25346 » * respect to it as defined in Item Valid (Wildcard) ($3.10.4)." |
25316 * | 25347 * |
25317 * SPEC Item Valid (Wildcard) (cvc-wildcard) | 25348 * SPEC Item Valid (Wildcard) (cvc-wildcard) |
25318 » * "... its [namespace name] must be �valid� with respect to | 25349 » * "... its [namespace name] must be `valid` with respect to |
25319 * the wildcard constraint, as defined in Wildcard allows | 25350 * the wildcard constraint, as defined in Wildcard allows |
25320 » * Namespace Name (�3.10.4)." | 25351 » * Namespace Name ($3.10.4)." |
25321 */ | 25352 */ |
25322 if (xmlSchemaCheckCVCWildcardNamespace(type->attributeWildcard, | 25353 if (xmlSchemaCheckCVCWildcardNamespace(type->attributeWildcard, |
25323 iattr->nsName) == 0) { | 25354 iattr->nsName) == 0) { |
25324 /* | 25355 /* |
25325 * Handle processContents. | 25356 * Handle processContents. |
25326 * | 25357 * |
25327 * SPEC (cvc-wildcard): | 25358 * SPEC (cvc-wildcard): |
25328 * processContents | context-determined declaration: | 25359 * processContents | context-determined declaration: |
25329 * "strict" "mustFind" | 25360 * "strict" "mustFind" |
25330 * "lax" "none" | 25361 * "lax" "none" |
(...skipping 15 matching lines...) Expand all Loading... |
25346 * Find an attribute declaration. | 25377 * Find an attribute declaration. |
25347 */ | 25378 */ |
25348 iattr->decl = xmlSchemaGetAttributeDecl(vctxt->schema, | 25379 iattr->decl = xmlSchemaGetAttributeDecl(vctxt->schema, |
25349 iattr->localName, iattr->nsName); | 25380 iattr->localName, iattr->nsName); |
25350 if (iattr->decl != NULL) { | 25381 if (iattr->decl != NULL) { |
25351 iattr->state = XML_SCHEMAS_ATTR_ASSESSED; | 25382 iattr->state = XML_SCHEMAS_ATTR_ASSESSED; |
25352 /* | 25383 /* |
25353 * SPEC (cvc-complex-type) | 25384 * SPEC (cvc-complex-type) |
25354 * (5) "Let [Definition:] the wild IDs be the set of | 25385 * (5) "Let [Definition:] the wild IDs be the set of |
25355 * all attribute information item to which clause 3.2 | 25386 * all attribute information item to which clause 3.2 |
25356 » » * applied and whose �validation� resulted in a | 25387 » » * applied and whose `validation` resulted in a |
25357 » » * �context-determined declaration� of mustFind or no | 25388 » » * `context-determined declaration` of mustFind or no |
25358 » » * �context-determined declaration� at all, and whose | 25389 » » * `context-determined declaration` at all, and whose |
25359 * [local name] and [namespace name] resolve (as | 25390 * [local name] and [namespace name] resolve (as |
25360 » » * defined by QName resolution (Instance) (�3.15.4)) to | 25391 » » * defined by QName resolution (Instance) ($3.15.4)) to |
25361 * an attribute declaration whose {type definition} is | 25392 * an attribute declaration whose {type definition} is |
25362 * or is derived from ID. Then all of the following | 25393 * or is derived from ID. Then all of the following |
25363 * must be true:" | 25394 * must be true:" |
25364 */ | 25395 */ |
25365 iattr->typeDef = WXS_ATTR_TYPEDEF(iattr->decl); | 25396 iattr->typeDef = WXS_ATTR_TYPEDEF(iattr->decl); |
25366 if (xmlSchemaIsDerivedFromBuiltInType( | 25397 if (xmlSchemaIsDerivedFromBuiltInType( |
25367 iattr->typeDef, XML_SCHEMAS_ID)) { | 25398 iattr->typeDef, XML_SCHEMAS_ID)) { |
25368 /* | 25399 /* |
25369 * SPEC (5.1) "There must be no more than one | 25400 * SPEC (5.1) "There must be no more than one |
25370 » » » * item in �wild IDs�." | 25401 » » » * item in `wild IDs`." |
25371 */ | 25402 */ |
25372 if (wildIDs != 0) { | 25403 if (wildIDs != 0) { |
25373 /* VAL TODO */ | 25404 /* VAL TODO */ |
25374 iattr->state = XML_SCHEMAS_ATTR_ERR_WILD_DUPLICATE_I
D; | 25405 iattr->state = XML_SCHEMAS_ATTR_ERR_WILD_DUPLICATE_I
D; |
25375 TODO | 25406 TODO |
25376 continue; | 25407 continue; |
25377 } | 25408 } |
25378 wildIDs++; | 25409 wildIDs++; |
25379 /* | 25410 /* |
25380 * SPEC (cvc-complex-type) | 25411 * SPEC (cvc-complex-type) |
25381 » » » * (5.2) "If �wild IDs� is non-empty, there must not | 25412 » » » * (5.2) "If `wild IDs` is non-empty, there must not |
25382 * be any attribute uses among the {attribute uses} | 25413 * be any attribute uses among the {attribute uses} |
25383 * whose {attribute declaration}'s {type definition} | 25414 * whose {attribute declaration}'s {type definition} |
25384 * is or is derived from ID." | 25415 * is or is derived from ID." |
25385 */ | 25416 */ |
25386 if (attrUseList != NULL) { | 25417 if (attrUseList != NULL) { |
25387 for (j = 0; j < attrUseList->nbItems; j++) { | 25418 for (j = 0; j < attrUseList->nbItems; j++) { |
25388 if (xmlSchemaIsDerivedFromBuiltInType( | 25419 if (xmlSchemaIsDerivedFromBuiltInType( |
25389 WXS_ATTRUSE_TYPEDEF(attrUseList->items[j]), | 25420 WXS_ATTRUSE_TYPEDEF(attrUseList->items[j]), |
25390 XML_SCHEMAS_ID)) { | 25421 XML_SCHEMAS_ID)) { |
25391 /* URGENT VAL TODO: implement */ | 25422 /* URGENT VAL TODO: implement */ |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
25581 * the attribute was a wild attribute. | 25612 * the attribute was a wild attribute. |
25582 */ | 25613 */ |
25583 if ((iattr->decl->flags & XML_SCHEMAS_ATTR_FIXED) || | 25614 if ((iattr->decl->flags & XML_SCHEMAS_ATTR_FIXED) || |
25584 ((iattr->use != NULL) && | 25615 ((iattr->use != NULL) && |
25585 (iattr->use->flags & XML_SCHEMAS_ATTR_FIXED))) | 25616 (iattr->use->flags & XML_SCHEMAS_ATTR_FIXED))) |
25586 fixed = 1; | 25617 fixed = 1; |
25587 else | 25618 else |
25588 fixed = 0; | 25619 fixed = 0; |
25589 /* | 25620 /* |
25590 * SPEC (cvc-attribute) | 25621 * SPEC (cvc-attribute) |
25591 » * (3) "The item's �normalized value� must be locally �valid� | 25622 » * (3) "The item's `normalized value` must be locally `valid` |
25592 * with respect to that {type definition} as per | 25623 * with respect to that {type definition} as per |
25593 » * String Valid (�3.14.4)." | 25624 » * String Valid ($3.14.4)." |
25594 * | 25625 * |
25595 * VAL TODO: Do we already have the | 25626 * VAL TODO: Do we already have the |
25596 * "normalized attribute value" here? | 25627 * "normalized attribute value" here? |
25597 */ | 25628 */ |
25598 if (xpathRes || fixed) { | 25629 if (xpathRes || fixed) { |
25599 iattr->flags |= XML_SCHEMA_NODE_INFO_VALUE_NEEDED; | 25630 iattr->flags |= XML_SCHEMA_NODE_INFO_VALUE_NEEDED; |
25600 /* | 25631 /* |
25601 * Request a computed value. | 25632 * Request a computed value. |
25602 */ | 25633 */ |
25603 res = xmlSchemaVCheckCVCSimpleType( | 25634 res = xmlSchemaVCheckCVCSimpleType( |
(...skipping 17 matching lines...) Expand all Loading... |
25621 /* | 25652 /* |
25622 * SPEC PSVI Assessment Outcome (Attribute) | 25653 * SPEC PSVI Assessment Outcome (Attribute) |
25623 * [validity] = "invalid" | 25654 * [validity] = "invalid" |
25624 */ | 25655 */ |
25625 goto eval_idcs; | 25656 goto eval_idcs; |
25626 } | 25657 } |
25627 | 25658 |
25628 if (fixed) { | 25659 if (fixed) { |
25629 /* | 25660 /* |
25630 * SPEC Attribute Locally Valid (Use) (cvc-au) | 25661 * SPEC Attribute Locally Valid (Use) (cvc-au) |
25631 » * "For an attribute information item to be�valid� | 25662 » * "For an attribute information item to be `valid` |
25632 * with respect to an attribute use its *normalized* | 25663 * with respect to an attribute use its *normalized* |
25633 » * value� must match the *canonical* lexical | 25664 » * value must match the *canonical* lexical |
25634 * representation of the attribute use's {value | 25665 * representation of the attribute use's {value |
25635 * constraint}value, if it is present and fixed." | 25666 * constraint}value, if it is present and fixed." |
25636 * | 25667 * |
25637 * VAL TODO: The requirement for the *canonical* value | 25668 * VAL TODO: The requirement for the *canonical* value |
25638 * will be removed in XML Schema 1.1. | 25669 * will be removed in XML Schema 1.1. |
25639 */ | 25670 */ |
25640 /* | 25671 /* |
25641 * SPEC Attribute Locally Valid (cvc-attribute) | 25672 * SPEC Attribute Locally Valid (cvc-attribute) |
25642 » * (4) "The item's *actual* value� must match the *value* of | 25673 » * (4) "The item's *actual* value must match the *value* of |
25643 * the {value constraint}, if it is present and fixed." | 25674 * the {value constraint}, if it is present and fixed." |
25644 */ | 25675 */ |
25645 if (iattr->val == NULL) { | 25676 if (iattr->val == NULL) { |
25646 /* VAL TODO: A value was not precomputed. */ | 25677 /* VAL TODO: A value was not precomputed. */ |
25647 TODO | 25678 TODO |
25648 goto eval_idcs; | 25679 goto eval_idcs; |
25649 } | 25680 } |
25650 if ((iattr->use != NULL) && | 25681 if ((iattr->use != NULL) && |
25651 (iattr->use->defValue != NULL)) { | 25682 (iattr->use->defValue != NULL)) { |
25652 if (iattr->use->defVal == NULL) { | 25683 if (iattr->use->defVal == NULL) { |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
25862 * For a string to be a valid default with respect to a type | 25893 * For a string to be a valid default with respect to a type |
25863 * definition the appropriate case among the following must be true: | 25894 * definition the appropriate case among the following must be true: |
25864 */ | 25895 */ |
25865 if WXS_IS_COMPLEX(inode->typeDef) { | 25896 if WXS_IS_COMPLEX(inode->typeDef) { |
25866 /* | 25897 /* |
25867 * Complex type. | 25898 * Complex type. |
25868 * | 25899 * |
25869 * SPEC (2.1) "its {content type} must be a simple type definition | 25900 * SPEC (2.1) "its {content type} must be a simple type definition |
25870 * or mixed." | 25901 * or mixed." |
25871 * SPEC (2.2.2) "If the {content type} is mixed, then the {content | 25902 * SPEC (2.2.2) "If the {content type} is mixed, then the {content |
25872 » * type}'s particle must be �emptiable� as defined by | 25903 » * type}'s particle must be `emptiable` as defined by |
25873 » * Particle Emptiable (�3.9.6)." | 25904 » * Particle Emptiable ($3.9.6)." |
25874 */ | 25905 */ |
25875 if ((! WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) && | 25906 if ((! WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) && |
25876 ((! WXS_HAS_MIXED_CONTENT(inode->typeDef)) || | 25907 ((! WXS_HAS_MIXED_CONTENT(inode->typeDef)) || |
25877 (! WXS_EMPTIABLE(inode->typeDef)))) { | 25908 (! WXS_EMPTIABLE(inode->typeDef)))) { |
25878 ret = XML_SCHEMAP_COS_VALID_DEFAULT_2_1; | 25909 ret = XML_SCHEMAP_COS_VALID_DEFAULT_2_1; |
25879 /* NOTE that this covers (2.2.2) as well. */ | 25910 /* NOTE that this covers (2.2.2) as well. */ |
25880 VERROR(ret, NULL, | 25911 VERROR(ret, NULL, |
25881 "For a string to be a valid default, the type definition " | 25912 "For a string to be a valid default, the type definition " |
25882 "must be a simple type or a complex type with simple content " | 25913 "must be a simple type or a complex type with simple content " |
25883 "or mixed content and a particle emptiable"); | 25914 "or mixed content and a particle emptiable"); |
25884 return(ret); | 25915 return(ret); |
25885 } | 25916 } |
25886 } | 25917 } |
25887 /* | 25918 /* |
25888 * 1 If the type definition is a simple type definition, then the string | 25919 * 1 If the type definition is a simple type definition, then the string |
25889 * must be �valid� with respect to that definition as defined by String | 25920 * must be `valid` with respect to that definition as defined by String |
25890 * Valid (�3.14.4). | 25921 * Valid ($3.14.4). |
25891 * | 25922 * |
25892 * AND | 25923 * AND |
25893 * | 25924 * |
25894 * 2.2.1 If the {content type} is a simple type definition, then the | 25925 * 2.2.1 If the {content type} is a simple type definition, then the |
25895 * string must be �valid� with respect to that simple type definition | 25926 * string must be `valid` with respect to that simple type definition |
25896 * as defined by String Valid (�3.14.4). | 25927 * as defined by String Valid ($3.14.4). |
25897 */ | 25928 */ |
25898 if (WXS_IS_SIMPLE(inode->typeDef)) { | 25929 if (WXS_IS_SIMPLE(inode->typeDef)) { |
25899 | 25930 |
25900 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST vctxt, | 25931 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST vctxt, |
25901 NULL, inode->typeDef, value, val, 1, 1, 0); | 25932 NULL, inode->typeDef, value, val, 1, 1, 0); |
25902 | 25933 |
25903 } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) { | 25934 } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) { |
25904 | 25935 |
25905 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST vctxt, | 25936 ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST vctxt, |
25906 NULL, inode->typeDef->contentTypeDef, value, val, 1, 1, 0); | 25937 NULL, inode->typeDef->contentTypeDef, value, val, 1, 1, 0); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
26027 if (inode->regexCtxt == NULL) { | 26058 if (inode->regexCtxt == NULL) { |
26028 VERROR_INT("xmlSchemaValidatorPopElem", | 26059 VERROR_INT("xmlSchemaValidatorPopElem", |
26029 "failed to create a regex context"); | 26060 "failed to create a regex context"); |
26030 goto internal_error; | 26061 goto internal_error; |
26031 } | 26062 } |
26032 #ifdef DEBUG_AUTOMATA | 26063 #ifdef DEBUG_AUTOMATA |
26033 xmlGenericError(xmlGenericErrorContext, | 26064 xmlGenericError(xmlGenericErrorContext, |
26034 "AUTOMATON create on '%s'\n", inode->localName); | 26065 "AUTOMATON create on '%s'\n", inode->localName); |
26035 #endif | 26066 #endif |
26036 } | 26067 } |
| 26068 |
| 26069 /* |
| 26070 * Do not check further content if the node has been nilled |
| 26071 */ |
| 26072 if (INODE_NILLED(inode)) { |
| 26073 ret = 0; |
| 26074 #ifdef DEBUG_AUTOMATA |
| 26075 xmlGenericError(xmlGenericErrorContext, |
| 26076 "AUTOMATON succeeded on nilled '%s'\n", |
| 26077 inode->localName); |
| 26078 #endif |
| 26079 goto skip_nilled; |
| 26080 } |
| 26081 |
26037 /* | 26082 /* |
26038 * Get hold of the still expected content, since a further | 26083 * Get hold of the still expected content, since a further |
26039 * call to xmlRegExecPushString() will loose this information. | 26084 * call to xmlRegExecPushString() will loose this information. |
26040 */ | 26085 */ |
26041 xmlRegExecNextValues(inode->regexCtxt, | 26086 xmlRegExecNextValues(inode->regexCtxt, |
26042 &nbval, &nbneg, &values[0], &terminal); | 26087 &nbval, &nbneg, &values[0], &terminal); |
26043 ret = xmlRegExecPushString(inode->regexCtxt, NULL, NULL); | 26088 ret = xmlRegExecPushString(inode->regexCtxt, NULL, NULL); |
26044 if ((ret<0) || ((ret==0) && (!INODE_NILLED(inode)))) { | 26089 if ((ret<0) || ((ret==0) && (!INODE_NILLED(inode)))) { |
26045 /* | 26090 /* |
26046 * Still missing something. | 26091 * Still missing something. |
(...skipping 17 matching lines...) Expand all Loading... |
26064 ret = 0; | 26109 ret = 0; |
26065 #ifdef DEBUG_AUTOMATA | 26110 #ifdef DEBUG_AUTOMATA |
26066 xmlGenericError(xmlGenericErrorContext, | 26111 xmlGenericError(xmlGenericErrorContext, |
26067 "AUTOMATON succeeded on '%s'\n", | 26112 "AUTOMATON succeeded on '%s'\n", |
26068 inode->localName); | 26113 inode->localName); |
26069 #endif | 26114 #endif |
26070 } | 26115 } |
26071 | 26116 |
26072 } | 26117 } |
26073 } | 26118 } |
| 26119 |
| 26120 skip_nilled: |
| 26121 |
26074 if (inode->typeDef->contentType == XML_SCHEMA_CONTENT_ELEMENTS) | 26122 if (inode->typeDef->contentType == XML_SCHEMA_CONTENT_ELEMENTS) |
26075 goto end_elem; | 26123 goto end_elem; |
26076 | 26124 |
26077 character_content: | 26125 character_content: |
26078 | 26126 |
26079 if (vctxt->value != NULL) { | 26127 if (vctxt->value != NULL) { |
26080 xmlSchemaFreeValue(vctxt->value); | 26128 xmlSchemaFreeValue(vctxt->value); |
26081 vctxt->value = NULL; | 26129 vctxt->value = NULL; |
26082 } | 26130 } |
26083 /* | 26131 /* |
(...skipping 26 matching lines...) Expand all Loading... |
26110 * cvc-elt (3.3.4) : 5.1 | 26158 * cvc-elt (3.3.4) : 5.1 |
26111 * If the declaration has a {value constraint}, | 26159 * If the declaration has a {value constraint}, |
26112 * the item has neither element nor character [children] and | 26160 * the item has neither element nor character [children] and |
26113 * clause 3.2 has not applied, then all of the following must be true: | 26161 * clause 3.2 has not applied, then all of the following must be true: |
26114 */ | 26162 */ |
26115 if ((inode->decl->value != NULL) && | 26163 if ((inode->decl->value != NULL) && |
26116 (inode->flags & XML_SCHEMA_ELEM_INFO_EMPTY) && | 26164 (inode->flags & XML_SCHEMA_ELEM_INFO_EMPTY) && |
26117 (! INODE_NILLED(inode))) { | 26165 (! INODE_NILLED(inode))) { |
26118 /* | 26166 /* |
26119 * cvc-elt (3.3.4) : 5.1.1 | 26167 * cvc-elt (3.3.4) : 5.1.1 |
26120 » * If the �actual type definition� is a �local type definition� | 26168 » * If the `actual type definition` is a `local type definition` |
26121 * then the canonical lexical representation of the {value constraint} | 26169 * then the canonical lexical representation of the {value constraint} |
26122 » * value must be a valid default for the �actual type definition� as | 26170 » * value must be a valid default for the `actual type definition` as |
26123 » * defined in Element Default Valid (Immediate) (�3.3.6). | 26171 » * defined in Element Default Valid (Immediate) ($3.3.6). |
26124 */ | 26172 */ |
26125 /* | 26173 /* |
26126 * NOTE: 'local' above means types acquired by xsi:type. | 26174 * NOTE: 'local' above means types acquired by xsi:type. |
26127 * NOTE: Although the *canonical* value is stated, it is not | 26175 * NOTE: Although the *canonical* value is stated, it is not |
26128 * relevant if canonical or not. Additionally XML Schema 1.1 | 26176 * relevant if canonical or not. Additionally XML Schema 1.1 |
26129 * will removed this requirement as well. | 26177 * will removed this requirement as well. |
26130 */ | 26178 */ |
26131 if (inode->flags & XML_SCHEMA_ELEM_INFO_LOCAL_TYPE) { | 26179 if (inode->flags & XML_SCHEMA_ELEM_INFO_LOCAL_TYPE) { |
26132 | 26180 |
26133 ret = xmlSchemaCheckCOSValidDefault(vctxt, | 26181 ret = xmlSchemaCheckCOSValidDefault(vctxt, |
26134 inode->decl->value, &(inode->val)); | 26182 inode->decl->value, &(inode->val)); |
26135 if (ret != 0) { | 26183 if (ret != 0) { |
26136 if (ret < 0) { | 26184 if (ret < 0) { |
26137 VERROR_INT("xmlSchemaValidatorPopElem", | 26185 VERROR_INT("xmlSchemaValidatorPopElem", |
26138 "calling xmlSchemaCheckCOSValidDefault()"); | 26186 "calling xmlSchemaCheckCOSValidDefault()"); |
26139 goto internal_error; | 26187 goto internal_error; |
26140 } | 26188 } |
26141 goto end_elem; | 26189 goto end_elem; |
26142 } | 26190 } |
26143 /* | 26191 /* |
26144 * Stop here, to avoid redundant validation of the value | 26192 * Stop here, to avoid redundant validation of the value |
26145 * (see following). | 26193 * (see following). |
26146 */ | 26194 */ |
26147 goto default_psvi; | 26195 goto default_psvi; |
26148 } | 26196 } |
26149 /* | 26197 /* |
26150 * cvc-elt (3.3.4) : 5.1.2 | 26198 * cvc-elt (3.3.4) : 5.1.2 |
26151 * The element information item with the canonical lexical | 26199 * The element information item with the canonical lexical |
26152 * representation of the {value constraint} value used as its | 26200 * representation of the {value constraint} value used as its |
26153 » * �normalized value� must be �valid� with respect to the | 26201 » * `normalized value` must be `valid` with respect to the |
26154 » * �actual type definition� as defined by Element Locally Valid (Type) | 26202 » * `actual type definition` as defined by Element Locally Valid (Type) |
26155 » * (�3.3.4). | 26203 » * ($3.3.4). |
26156 */ | 26204 */ |
26157 if (WXS_IS_SIMPLE(inode->typeDef)) { | 26205 if (WXS_IS_SIMPLE(inode->typeDef)) { |
26158 ret = xmlSchemaVCheckINodeDataType(vctxt, | 26206 ret = xmlSchemaVCheckINodeDataType(vctxt, |
26159 inode, inode->typeDef, inode->decl->value); | 26207 inode, inode->typeDef, inode->decl->value); |
26160 } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) { | 26208 } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) { |
26161 ret = xmlSchemaVCheckINodeDataType(vctxt, | 26209 ret = xmlSchemaVCheckINodeDataType(vctxt, |
26162 inode, inode->typeDef->contentTypeDef, | 26210 inode, inode->typeDef->contentTypeDef, |
26163 inode->decl->value); | 26211 inode->decl->value); |
26164 } | 26212 } |
26165 if (ret != 0) { | 26213 if (ret != 0) { |
(...skipping 26 matching lines...) Expand all Loading... |
26192 if (textChild == NULL) { | 26240 if (textChild == NULL) { |
26193 VERROR_INT("xmlSchemaValidatorPopElem", | 26241 VERROR_INT("xmlSchemaValidatorPopElem", |
26194 "calling xmlNewText()"); | 26242 "calling xmlNewText()"); |
26195 goto internal_error; | 26243 goto internal_error; |
26196 } else | 26244 } else |
26197 xmlAddChild(inode->node, textChild); | 26245 xmlAddChild(inode->node, textChild); |
26198 } | 26246 } |
26199 | 26247 |
26200 } else if (! INODE_NILLED(inode)) { | 26248 } else if (! INODE_NILLED(inode)) { |
26201 /* | 26249 /* |
26202 » * 5.2.1 The element information item must be �valid� with respect | 26250 » * 5.2.1 The element information item must be `valid` with respect |
26203 » * to the �actual type definition� as defined by Element Locally | 26251 » * to the `actual type definition` as defined by Element Locally |
26204 » * Valid (Type) (�3.3.4). | 26252 » * Valid (Type) ($3.3.4). |
26205 */ | 26253 */ |
26206 if (WXS_IS_SIMPLE(inode->typeDef)) { | 26254 if (WXS_IS_SIMPLE(inode->typeDef)) { |
26207 /* | 26255 /* |
26208 * SPEC (cvc-type) (3.1) | 26256 * SPEC (cvc-type) (3.1) |
26209 * "If the type definition is a simple type definition, ..." | 26257 * "If the type definition is a simple type definition, ..." |
26210 * (3.1.3) "If clause 3.2 of Element Locally Valid | 26258 * (3.1.3) "If clause 3.2 of Element Locally Valid |
26211 » * (Element) (�3.3.4) did not apply, then the �normalized value� | 26259 » * (Element) ($3.3.4) did not apply, then the `normalized value` |
26212 » * must be �valid� with respect to the type definition as defined | 26260 » * must be `valid` with respect to the type definition as defined |
26213 » * by String Valid (�3.14.4). | 26261 » * by String Valid ($3.14.4). |
26214 */ | 26262 */ |
26215 ret = xmlSchemaVCheckINodeDataType(vctxt, | 26263 ret = xmlSchemaVCheckINodeDataType(vctxt, |
26216 inode, inode->typeDef, inode->value); | 26264 inode, inode->typeDef, inode->value); |
26217 } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) { | 26265 } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) { |
26218 /* | 26266 /* |
26219 * SPEC (cvc-type) (3.2) "If the type definition is a complex type | 26267 * SPEC (cvc-type) (3.2) "If the type definition is a complex type |
26220 * definition, then the element information item must be | 26268 * definition, then the element information item must be |
26221 » * �valid� with respect to the type definition as per | 26269 » * `valid` with respect to the type definition as per |
26222 » * Element Locally Valid (Complex Type) (�3.4.4);" | 26270 » * Element Locally Valid (Complex Type) ($3.4.4);" |
26223 * | 26271 * |
26224 * SPEC (cvc-complex-type) (2.2) | 26272 * SPEC (cvc-complex-type) (2.2) |
26225 * "If the {content type} is a simple type definition, ... | 26273 * "If the {content type} is a simple type definition, ... |
26226 » * the �normalized value� of the element information item is | 26274 » * the `normalized value` of the element information item is |
26227 » * �valid� with respect to that simple type definition as | 26275 » * `valid` with respect to that simple type definition as |
26228 » * defined by String Valid (�3.14.4)." | 26276 » * defined by String Valid ($3.14.4)." |
26229 */ | 26277 */ |
26230 ret = xmlSchemaVCheckINodeDataType(vctxt, | 26278 ret = xmlSchemaVCheckINodeDataType(vctxt, |
26231 inode, inode->typeDef->contentTypeDef, inode->value); | 26279 inode, inode->typeDef->contentTypeDef, inode->value); |
26232 } | 26280 } |
26233 if (ret != 0) { | 26281 if (ret != 0) { |
26234 if (ret < 0) { | 26282 if (ret < 0) { |
26235 VERROR_INT("xmlSchemaValidatorPopElem", | 26283 VERROR_INT("xmlSchemaValidatorPopElem", |
26236 "calling xmlSchemaVCheckCVCSimpleType()"); | 26284 "calling xmlSchemaVCheckCVCSimpleType()"); |
26237 goto internal_error; | 26285 goto internal_error; |
26238 } | 26286 } |
(...skipping 21 matching lines...) Expand all Loading... |
26260 "The content must not containt element nodes since " | 26308 "The content must not containt element nodes since " |
26261 "there is a fixed value constraint"); | 26309 "there is a fixed value constraint"); |
26262 goto end_elem; | 26310 goto end_elem; |
26263 } else { | 26311 } else { |
26264 /* | 26312 /* |
26265 * 5.2.2.2 The appropriate case among the following must | 26313 * 5.2.2.2 The appropriate case among the following must |
26266 * be true: | 26314 * be true: |
26267 */ | 26315 */ |
26268 if (WXS_HAS_MIXED_CONTENT(inode->typeDef)) { | 26316 if (WXS_HAS_MIXED_CONTENT(inode->typeDef)) { |
26269 /* | 26317 /* |
26270 » » * 5.2.2.2.1 If the {content type} of the �actual type | 26318 » » * 5.2.2.2.1 If the {content type} of the `actual type |
26271 » » * definition� is mixed, then the *initial value* of the | 26319 » » * definition` is mixed, then the *initial value* of the |
26272 * item must match the canonical lexical representation | 26320 * item must match the canonical lexical representation |
26273 * of the {value constraint} value. | 26321 * of the {value constraint} value. |
26274 * | 26322 * |
26275 * ... the *initial value* of an element information | 26323 * ... the *initial value* of an element information |
26276 * item is the string composed of, in order, the | 26324 * item is the string composed of, in order, the |
26277 * [character code] of each character information item in | 26325 * [character code] of each character information item in |
26278 * the [children] of that element information item. | 26326 * the [children] of that element information item. |
26279 */ | 26327 */ |
26280 if (! xmlStrEqual(inode->value, inode->decl->value)){ | 26328 if (! xmlStrEqual(inode->value, inode->decl->value)){ |
26281 /* | 26329 /* |
26282 * VAL TODO: Report invalid & expected values as well. | 26330 * VAL TODO: Report invalid & expected values as well. |
26283 * VAL TODO: Implement the canonical stuff. | 26331 * VAL TODO: Implement the canonical stuff. |
26284 */ | 26332 */ |
26285 ret = XML_SCHEMAV_CVC_ELT_5_2_2_2_1; | 26333 ret = XML_SCHEMAV_CVC_ELT_5_2_2_2_1; |
26286 xmlSchemaCustomErr(ACTXT_CAST vctxt, | 26334 xmlSchemaCustomErr(ACTXT_CAST vctxt, |
26287 ret, NULL, NULL, | 26335 ret, NULL, NULL, |
26288 "The initial value '%s' does not match the fixed " | 26336 "The initial value '%s' does not match the fixed " |
26289 "value constraint '%s'", | 26337 "value constraint '%s'", |
26290 inode->value, inode->decl->value); | 26338 inode->value, inode->decl->value); |
26291 goto end_elem; | 26339 goto end_elem; |
26292 } | 26340 } |
26293 } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) { | 26341 } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) { |
26294 /* | 26342 /* |
26295 » » * 5.2.2.2.2 If the {content type} of the �actual type | 26343 » » * 5.2.2.2.2 If the {content type} of the `actual type |
26296 » » * definition� is a simple type definition, then the | 26344 » » * definition` is a simple type definition, then the |
26297 * *actual value* of the item must match the canonical | 26345 * *actual value* of the item must match the canonical |
26298 * lexical representation of the {value constraint} value. | 26346 * lexical representation of the {value constraint} value. |
26299 */ | 26347 */ |
26300 /* | 26348 /* |
26301 * VAL TODO: *actual value* is the normalized value, impl. | 26349 * VAL TODO: *actual value* is the normalized value, impl. |
26302 * this. | 26350 * this. |
26303 * VAL TODO: Report invalid & expected values as well. | 26351 * VAL TODO: Report invalid & expected values as well. |
26304 * VAL TODO: Implement a comparison with the computed values. | 26352 * VAL TODO: Implement a comparison with the computed values. |
26305 */ | 26353 */ |
26306 if (! xmlStrEqual(inode->value, | 26354 if (! xmlStrEqual(inode->value, |
(...skipping 20 matching lines...) Expand all Loading... |
26327 if (vctxt->depth == vctxt->skipDepth) | 26375 if (vctxt->depth == vctxt->skipDepth) |
26328 vctxt->skipDepth = -1; | 26376 vctxt->skipDepth = -1; |
26329 /* | 26377 /* |
26330 * Evaluate the history of XPath state objects. | 26378 * Evaluate the history of XPath state objects. |
26331 */ | 26379 */ |
26332 if (inode->appliedXPath && | 26380 if (inode->appliedXPath && |
26333 (xmlSchemaXPathProcessHistory(vctxt, vctxt->depth) == -1)) | 26381 (xmlSchemaXPathProcessHistory(vctxt, vctxt->depth) == -1)) |
26334 goto internal_error; | 26382 goto internal_error; |
26335 /* | 26383 /* |
26336 * MAYBE TODO: | 26384 * MAYBE TODO: |
26337 * SPEC (6) "The element information item must be �valid� with | 26385 * SPEC (6) "The element information item must be `valid` with |
26338 * respect to each of the {identity-constraint definitions} as per | 26386 * respect to each of the {identity-constraint definitions} as per |
26339 * Identity-constraint Satisfied (�3.11.4)." | 26387 * Identity-constraint Satisfied ($3.11.4)." |
26340 */ | 26388 */ |
26341 /* | 26389 /* |
26342 * PSVI TODO: If we expose IDC node-tables via PSVI then the tables | 26390 * PSVI TODO: If we expose IDC node-tables via PSVI then the tables |
26343 * need to be built in any case. | 26391 * need to be built in any case. |
26344 * We will currently build IDC node-tables and bubble them only if | 26392 * We will currently build IDC node-tables and bubble them only if |
26345 * keyrefs do exist. | 26393 * keyrefs do exist. |
26346 */ | 26394 */ |
26347 | 26395 |
26348 /* | 26396 /* |
26349 * Add the current IDC target-nodes to the IDC node-tables. | 26397 * Add the current IDC target-nodes to the IDC node-tables. |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
26407 * top-most keyref IDC which refers to this IDC. | 26455 * top-most keyref IDC which refers to this IDC. |
26408 */ | 26456 */ |
26409 aidc->keyrefDepth = -1; | 26457 aidc->keyrefDepth = -1; |
26410 } | 26458 } |
26411 aidc = aidc->next; | 26459 aidc = aidc->next; |
26412 } while (aidc != NULL); | 26460 } while (aidc != NULL); |
26413 } | 26461 } |
26414 vctxt->depth--; | 26462 vctxt->depth--; |
26415 vctxt->inode = vctxt->elemInfos[vctxt->depth]; | 26463 vctxt->inode = vctxt->elemInfos[vctxt->depth]; |
26416 /* | 26464 /* |
26417 * VAL TODO: 7 If the element information item is the �validation root�, it m
ust be | 26465 * VAL TODO: 7 If the element information item is the `validation root`, it m
ust be |
26418 * �valid� per Validation Root Valid (ID/IDREF) (�3.3.4). | 26466 * `valid` per Validation Root Valid (ID/IDREF) ($3.3.4). |
26419 */ | 26467 */ |
26420 return (ret); | 26468 return (ret); |
26421 | 26469 |
26422 internal_error: | 26470 internal_error: |
26423 vctxt->err = -1; | 26471 vctxt->err = -1; |
26424 return (-1); | 26472 return (-1); |
26425 } | 26473 } |
26426 | 26474 |
26427 /* | 26475 /* |
26428 * 3.4.4 Complex Type Definition Validation Rules | 26476 * 3.4.4 Complex Type Definition Validation Rules |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
26489 "process the attribute 'xsi:nil'"); | 26537 "process the attribute 'xsi:nil'"); |
26490 return (-1); | 26538 return (-1); |
26491 } | 26539 } |
26492 return (ret); | 26540 return (ret); |
26493 } | 26541 } |
26494 } else { | 26542 } else { |
26495 /* | 26543 /* |
26496 * Fallback to "anyType". | 26544 * Fallback to "anyType". |
26497 * | 26545 * |
26498 * SPEC (cvc-assess-elt) | 26546 * SPEC (cvc-assess-elt) |
26499 » » * "If the item cannot be �strictly assessed�, [...] | 26547 » » * "If the item cannot be `strictly assessed`, [...] |
26500 * an element information item's schema validity may be laxly | 26548 * an element information item's schema validity may be laxly |
26501 » » * assessed if its �context-determined declaration� is not | 26549 » » * assessed if its `context-determined declaration` is not |
26502 » » * skip by �validating� with respect to the �ur-type | 26550 » » * skip by `validating` with respect to the `ur-type |
26503 » » * definition� as per Element Locally Valid (Type) (�3.3.4)." | 26551 » » * definition` as per Element Locally Valid (Type) ($3.3.4)." |
26504 */ | 26552 */ |
26505 vctxt->inode->typeDef = | 26553 vctxt->inode->typeDef = |
26506 xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE); | 26554 xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE); |
26507 } | 26555 } |
26508 } | 26556 } |
26509 return (0); | 26557 return (0); |
26510 } | 26558 } |
26511 | 26559 |
26512 switch (ptype->contentType) { | 26560 switch (ptype->contentType) { |
26513 case XML_SCHEMA_CONTENT_EMPTY: | 26561 case XML_SCHEMA_CONTENT_EMPTY: |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
26565 #ifdef DEBUG_AUTOMATA | 26613 #ifdef DEBUG_AUTOMATA |
26566 xmlGenericError(xmlGenericErrorContext, "AUTOMATA create on '%s'
\n", | 26614 xmlGenericError(xmlGenericErrorContext, "AUTOMATA create on '%s'
\n", |
26567 pielem->localName); | 26615 pielem->localName); |
26568 #endif | 26616 #endif |
26569 } | 26617 } |
26570 | 26618 |
26571 /* | 26619 /* |
26572 * SPEC (2.4) "If the {content type} is element-only or mixed, | 26620 * SPEC (2.4) "If the {content type} is element-only or mixed, |
26573 * then the sequence of the element information item's | 26621 * then the sequence of the element information item's |
26574 * element information item [children], if any, taken in | 26622 * element information item [children], if any, taken in |
26575 » * order, is �valid� with respect to the {content type}'s | 26623 » * order, is `valid` with respect to the {content type}'s |
26576 * particle, as defined in Element Sequence Locally Valid | 26624 * particle, as defined in Element Sequence Locally Valid |
26577 » * (Particle) (�3.9.4)." | 26625 » * (Particle) ($3.9.4)." |
26578 */ | 26626 */ |
26579 ret = xmlRegExecPushString2(regexCtxt, | 26627 ret = xmlRegExecPushString2(regexCtxt, |
26580 vctxt->inode->localName, | 26628 vctxt->inode->localName, |
26581 vctxt->inode->nsName, | 26629 vctxt->inode->nsName, |
26582 vctxt->inode); | 26630 vctxt->inode); |
26583 #ifdef DEBUG_AUTOMATA | 26631 #ifdef DEBUG_AUTOMATA |
26584 if (ret < 0) | 26632 if (ret < 0) |
26585 xmlGenericError(xmlGenericErrorContext, | 26633 xmlGenericError(xmlGenericErrorContext, |
26586 "AUTOMATON push ERROR for '%s' on '%s'\n", | 26634 "AUTOMATON push ERROR for '%s' on '%s'\n", |
26587 vctxt->inode->localName, pielem->localName); | 26635 vctxt->inode->localName, pielem->localName); |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
26804 * for all input scenarios, then this should be changed to | 26852 * for all input scenarios, then this should be changed to |
26805 * instantly stop the validation. | 26853 * instantly stop the validation. |
26806 */ | 26854 */ |
26807 ret = xmlSchemaAssembleByXSI(vctxt); | 26855 ret = xmlSchemaAssembleByXSI(vctxt); |
26808 if (ret != 0) { | 26856 if (ret != 0) { |
26809 if (ret == -1) | 26857 if (ret == -1) |
26810 goto internal_error; | 26858 goto internal_error; |
26811 vctxt->skipDepth = 0; | 26859 vctxt->skipDepth = 0; |
26812 return(ret); | 26860 return(ret); |
26813 } | 26861 } |
| 26862 /* |
| 26863 * Augment the IDC definitions for the main schema and all imported ones |
| 26864 * NOTE: main schema is the first in the imported list |
| 26865 */ |
| 26866 xmlHashScan(vctxt->schema->schemasImports,(xmlHashScanner)xmlSchemaAugme
ntImportedIDC, vctxt); |
26814 } | 26867 } |
26815 if (vctxt->depth > 0) { | 26868 if (vctxt->depth > 0) { |
26816 /* | 26869 /* |
26817 * Validate this element against the content model | 26870 * Validate this element against the content model |
26818 * of the parent. | 26871 * of the parent. |
26819 */ | 26872 */ |
26820 ret = xmlSchemaValidateChildElem(vctxt); | 26873 ret = xmlSchemaValidateChildElem(vctxt); |
26821 if (ret != 0) { | 26874 if (ret != 0) { |
26822 if (ret < 0) { | 26875 if (ret < 0) { |
26823 VERROR_INT("xmlSchemaValidateElem", | 26876 VERROR_INT("xmlSchemaValidateElem", |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
26897 goto exit; | 26950 goto exit; |
26898 } | 26951 } |
26899 /* | 26952 /* |
26900 * Validate against the type definition. | 26953 * Validate against the type definition. |
26901 */ | 26954 */ |
26902 type_validation: | 26955 type_validation: |
26903 | 26956 |
26904 if (vctxt->inode->typeDef == NULL) { | 26957 if (vctxt->inode->typeDef == NULL) { |
26905 vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE; | 26958 vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE; |
26906 ret = XML_SCHEMAV_CVC_TYPE_1; | 26959 ret = XML_SCHEMAV_CVC_TYPE_1; |
26907 » VERROR(ret, NULL, | 26960 » VERROR(ret, NULL, |
26908 » "The type definition is absent"); | 26961 » "The type definition is absent"); |
26909 goto exit; | 26962 goto exit; |
26910 } | 26963 } |
26911 if (vctxt->inode->typeDef->flags & XML_SCHEMAS_TYPE_ABSTRACT) { | 26964 if (vctxt->inode->typeDef->flags & XML_SCHEMAS_TYPE_ABSTRACT) { |
26912 vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE; | 26965 vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE; |
26913 ret = XML_SCHEMAV_CVC_TYPE_2; | 26966 ret = XML_SCHEMAV_CVC_TYPE_2; |
26914 » VERROR(ret, NULL, | 26967 » VERROR(ret, NULL, |
26915 » "The type definition is abstract"); | 26968 » "The type definition is abstract"); |
26916 goto exit; | 26969 goto exit; |
26917 } | 26970 } |
26918 /* | 26971 /* |
26919 * Evaluate IDCs. Do it here, since new IDC matchers are registered | 26972 * Evaluate IDCs. Do it here, since new IDC matchers are registered |
26920 * during validation against the declaration. This must be done | 26973 * during validation against the declaration. This must be done |
26921 * _before_ attribute validation. | 26974 * _before_ attribute validation. |
26922 */ | 26975 */ |
26923 if (vctxt->xpathStates != NULL) { | 26976 if (vctxt->xpathStates != NULL) { |
26924 ret = xmlSchemaXPathEvaluate(vctxt, XML_ELEMENT_NODE); | 26977 ret = xmlSchemaXPathEvaluate(vctxt, XML_ELEMENT_NODE); |
26925 vctxt->inode->appliedXPath = 1; | 26978 vctxt->inode->appliedXPath = 1; |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
27152 } while (ret == 1); | 27205 } while (ret == 1); |
27153 | 27206 |
27154 exit: | 27207 exit: |
27155 return (ret); | 27208 return (ret); |
27156 internal_error: | 27209 internal_error: |
27157 return (-1); | 27210 return (-1); |
27158 } | 27211 } |
27159 #endif | 27212 #endif |
27160 | 27213 |
27161 /************************************************************************ | 27214 /************************************************************************ |
27162 * » » » » » » » » » * | 27215 *» » » » » » » » » * |
27163 * » » » SAX validation handlers»» » » * | 27216 *» » » SAX validation handlers»» » » * |
27164 * » » » » » » » » » * | 27217 *» » » » » » » » » * |
27165 ************************************************************************/ | 27218 ************************************************************************/ |
27166 | 27219 |
27167 /* | 27220 /* |
27168 * Process text content. | 27221 * Process text content. |
27169 */ | 27222 */ |
27170 static void | 27223 static void |
27171 xmlSchemaSAXHandleText(void *ctx, | 27224 xmlSchemaSAXHandleText(void *ctx, |
27172 const xmlChar * ch, | 27225 const xmlChar * ch, |
27173 int len) | 27226 int len) |
27174 { | 27227 { |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
27405 } | 27458 } |
27406 exit: | 27459 exit: |
27407 return; | 27460 return; |
27408 internal_error: | 27461 internal_error: |
27409 vctxt->err = -1; | 27462 vctxt->err = -1; |
27410 xmlStopParser(vctxt->parserCtxt); | 27463 xmlStopParser(vctxt->parserCtxt); |
27411 return; | 27464 return; |
27412 } | 27465 } |
27413 | 27466 |
27414 /************************************************************************ | 27467 /************************************************************************ |
27415 * » » » » » » » » » * | 27468 *» » » » » » » » » * |
27416 * » » » Validation interfaces» » » » * | 27469 *» » » Validation interfaces» » » » * |
27417 * » » » » » » » » » * | 27470 *» » » » » » » » » * |
27418 ************************************************************************/ | 27471 ************************************************************************/ |
27419 | 27472 |
27420 /** | 27473 /** |
27421 * xmlSchemaNewValidCtxt: | 27474 * xmlSchemaNewValidCtxt: |
27422 * @schema: a precompiled XML Schemas | 27475 * @schema: a precompiled XML Schemas |
27423 * | 27476 * |
27424 * Create an XML Schemas validation context based on the given schema. | 27477 * Create an XML Schemas validation context based on the given schema. |
27425 * | 27478 * |
27426 * Returns the validation context or NULL in case of error | 27479 * Returns the validation context or NULL in case of error |
27427 */ | 27480 */ |
27428 xmlSchemaValidCtxtPtr | 27481 xmlSchemaValidCtxtPtr |
27429 xmlSchemaNewValidCtxt(xmlSchemaPtr schema) | 27482 xmlSchemaNewValidCtxt(xmlSchemaPtr schema) |
27430 { | 27483 { |
27431 xmlSchemaValidCtxtPtr ret; | 27484 xmlSchemaValidCtxtPtr ret; |
27432 | 27485 |
27433 ret = (xmlSchemaValidCtxtPtr) xmlMalloc(sizeof(xmlSchemaValidCtxt)); | 27486 ret = (xmlSchemaValidCtxtPtr) xmlMalloc(sizeof(xmlSchemaValidCtxt)); |
27434 if (ret == NULL) { | 27487 if (ret == NULL) { |
27435 xmlSchemaVErrMemory(NULL, "allocating validation context", NULL); | 27488 xmlSchemaVErrMemory(NULL, "allocating validation context", NULL); |
27436 return (NULL); | 27489 return (NULL); |
27437 } | 27490 } |
27438 memset(ret, 0, sizeof(xmlSchemaValidCtxt)); | 27491 memset(ret, 0, sizeof(xmlSchemaValidCtxt)); |
27439 ret->type = XML_SCHEMA_CTXT_VALIDATOR; | 27492 ret->type = XML_SCHEMA_CTXT_VALIDATOR; |
27440 ret->dict = xmlDictCreate(); | 27493 ret->dict = xmlDictCreate(); |
27441 ret->nodeQNames = xmlSchemaItemListCreate(); | 27494 ret->nodeQNames = xmlSchemaItemListCreate(); |
27442 ret->schema = schema; | 27495 ret->schema = schema; |
27443 return (ret); | 27496 return (ret); |
27444 } | 27497 } |
27445 | 27498 |
27446 /** | 27499 /** |
| 27500 * xmlSchemaValidateSetFilename: |
| 27501 * @vctxt: the schema validation context |
| 27502 * @filename: the file name |
| 27503 * |
| 27504 * Workaround to provide file error reporting information when this is |
| 27505 * not provided by current APIs |
| 27506 */ |
| 27507 void |
| 27508 xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt, const char *filename)
{ |
| 27509 if (vctxt == NULL) |
| 27510 return; |
| 27511 if (vctxt->filename != NULL) |
| 27512 xmlFree(vctxt->filename); |
| 27513 if (filename != NULL) |
| 27514 vctxt->filename = (char *) xmlStrdup((const xmlChar *) filename); |
| 27515 else |
| 27516 vctxt->filename = NULL; |
| 27517 } |
| 27518 |
| 27519 /** |
27447 * xmlSchemaClearValidCtxt: | 27520 * xmlSchemaClearValidCtxt: |
27448 * @ctxt: the schema validation context | 27521 * @vctxt: the schema validation context |
27449 * | 27522 * |
27450 * Free the resources associated to the schema validation context; | 27523 * Free the resources associated to the schema validation context; |
27451 * leaves some fields alive intended for reuse of the context. | 27524 * leaves some fields alive intended for reuse of the context. |
27452 */ | 27525 */ |
27453 static void | 27526 static void |
27454 xmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt) | 27527 xmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt) |
27455 { | 27528 { |
27456 if (vctxt == NULL) | 27529 if (vctxt == NULL) |
27457 return; | 27530 return; |
27458 | 27531 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
27539 } | 27612 } |
27540 } | 27613 } |
27541 xmlSchemaItemListClear(vctxt->nodeQNames); | 27614 xmlSchemaItemListClear(vctxt->nodeQNames); |
27542 /* Recreate the dict. */ | 27615 /* Recreate the dict. */ |
27543 xmlDictFree(vctxt->dict); | 27616 xmlDictFree(vctxt->dict); |
27544 /* | 27617 /* |
27545 * TODO: Is is save to recreate it? Do we have a scenario | 27618 * TODO: Is is save to recreate it? Do we have a scenario |
27546 * where the user provides the dict? | 27619 * where the user provides the dict? |
27547 */ | 27620 */ |
27548 vctxt->dict = xmlDictCreate(); | 27621 vctxt->dict = xmlDictCreate(); |
| 27622 |
| 27623 if (vctxt->filename != NULL) { |
| 27624 xmlFree(vctxt->filename); |
| 27625 vctxt->filename = NULL; |
| 27626 } |
27549 } | 27627 } |
27550 | 27628 |
27551 /** | 27629 /** |
27552 * xmlSchemaFreeValidCtxt: | 27630 * xmlSchemaFreeValidCtxt: |
27553 * @ctxt: the schema validation context | 27631 * @ctxt: the schema validation context |
27554 * | 27632 * |
27555 * Free the resources associated to the schema validation context | 27633 * Free the resources associated to the schema validation context |
27556 */ | 27634 */ |
27557 void | 27635 void |
27558 xmlSchemaFreeValidCtxt(xmlSchemaValidCtxtPtr ctxt) | 27636 xmlSchemaFreeValidCtxt(xmlSchemaValidCtxtPtr ctxt) |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
27624 break; | 27702 break; |
27625 xmlSchemaClearElemInfo(ctxt, ei); | 27703 xmlSchemaClearElemInfo(ctxt, ei); |
27626 xmlFree(ei); | 27704 xmlFree(ei); |
27627 } | 27705 } |
27628 xmlFree(ctxt->elemInfos); | 27706 xmlFree(ctxt->elemInfos); |
27629 } | 27707 } |
27630 if (ctxt->nodeQNames != NULL) | 27708 if (ctxt->nodeQNames != NULL) |
27631 xmlSchemaItemListFree(ctxt->nodeQNames); | 27709 xmlSchemaItemListFree(ctxt->nodeQNames); |
27632 if (ctxt->dict != NULL) | 27710 if (ctxt->dict != NULL) |
27633 xmlDictFree(ctxt->dict); | 27711 xmlDictFree(ctxt->dict); |
| 27712 if (ctxt->filename != NULL) |
| 27713 xmlFree(ctxt->filename); |
27634 xmlFree(ctxt); | 27714 xmlFree(ctxt); |
27635 } | 27715 } |
27636 | 27716 |
27637 /** | 27717 /** |
27638 * xmlSchemaIsValid: | 27718 * xmlSchemaIsValid: |
27639 * @ctxt: the schema validation context | 27719 * @ctxt: the schema validation context |
27640 * | 27720 * |
27641 * Check if any error was detected during validation. | 27721 * Check if any error was detected during validation. |
27642 * | 27722 * |
27643 * Returns 1 if valid so far, 0 if errors were detected, and -1 in case | 27723 * Returns 1 if valid so far, 0 if errors were detected, and -1 in case |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
27778 static int | 27858 static int |
27779 xmlSchemaVDocWalk(xmlSchemaValidCtxtPtr vctxt) | 27859 xmlSchemaVDocWalk(xmlSchemaValidCtxtPtr vctxt) |
27780 { | 27860 { |
27781 xmlAttrPtr attr; | 27861 xmlAttrPtr attr; |
27782 int ret = 0; | 27862 int ret = 0; |
27783 xmlSchemaNodeInfoPtr ielem = NULL; | 27863 xmlSchemaNodeInfoPtr ielem = NULL; |
27784 xmlNodePtr node, valRoot; | 27864 xmlNodePtr node, valRoot; |
27785 const xmlChar *nsName; | 27865 const xmlChar *nsName; |
27786 | 27866 |
27787 /* DOC VAL TODO: Move this to the start function. */ | 27867 /* DOC VAL TODO: Move this to the start function. */ |
27788 valRoot = xmlDocGetRootElement(vctxt->doc); | 27868 if (vctxt->validationRoot != NULL) |
| 27869 valRoot = vctxt->validationRoot; |
| 27870 else |
| 27871 » valRoot = xmlDocGetRootElement(vctxt->doc); |
27789 if (valRoot == NULL) { | 27872 if (valRoot == NULL) { |
27790 /* VAL TODO: Error code? */ | 27873 /* VAL TODO: Error code? */ |
27791 VERROR(1, NULL, "The document has no document element"); | 27874 VERROR(1, NULL, "The document has no document element"); |
27792 return (1); | 27875 return (1); |
27793 } | 27876 } |
27794 vctxt->depth = -1; | 27877 vctxt->depth = -1; |
27795 vctxt->validationRoot = valRoot; | 27878 vctxt->validationRoot = valRoot; |
27796 node = valRoot; | 27879 node = valRoot; |
27797 while (node != NULL) { | 27880 while (node != NULL) { |
27798 if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth)) | 27881 if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth)) |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
28099 (xmlNodePtr) doc, NULL, | 28182 (xmlNodePtr) doc, NULL, |
28100 "The document has no document element", NULL, NULL); | 28183 "The document has no document element", NULL, NULL); |
28101 return (ctxt->err); | 28184 return (ctxt->err); |
28102 } | 28185 } |
28103 ctxt->validationRoot = ctxt->node; | 28186 ctxt->validationRoot = ctxt->node; |
28104 return (xmlSchemaVStart(ctxt)); | 28187 return (xmlSchemaVStart(ctxt)); |
28105 } | 28188 } |
28106 | 28189 |
28107 | 28190 |
28108 /************************************************************************ | 28191 /************************************************************************ |
28109 * » » » » » » » » » * | 28192 *» » » » » » » » » * |
28110 * » » Function and data for SAX streaming API»» » * | 28193 *» » Function and data for SAX streaming API»» » * |
28111 * » » » » » » » » » * | 28194 *» » » » » » » » » * |
28112 ************************************************************************/ | 28195 ************************************************************************/ |
28113 typedef struct _xmlSchemaSplitSAXData xmlSchemaSplitSAXData; | 28196 typedef struct _xmlSchemaSplitSAXData xmlSchemaSplitSAXData; |
28114 typedef xmlSchemaSplitSAXData *xmlSchemaSplitSAXDataPtr; | 28197 typedef xmlSchemaSplitSAXData *xmlSchemaSplitSAXDataPtr; |
28115 | 28198 |
28116 struct _xmlSchemaSplitSAXData { | 28199 struct _xmlSchemaSplitSAXData { |
28117 xmlSAXHandlerPtr user_sax; | 28200 xmlSAXHandlerPtr user_sax; |
28118 void *user_data; | 28201 void *user_data; |
28119 xmlSchemaValidCtxtPtr ctxt; | 28202 xmlSchemaValidCtxtPtr ctxt; |
28120 xmlSAXHandlerPtr schemas_sax; | 28203 xmlSAXHandlerPtr schemas_sax; |
28121 }; | 28204 }; |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
28618 user_data = plug->user_data_ptr; | 28701 user_data = plug->user_data_ptr; |
28619 *user_data = plug->user_data; | 28702 *user_data = plug->user_data; |
28620 } | 28703 } |
28621 | 28704 |
28622 /* free and return */ | 28705 /* free and return */ |
28623 xmlFree(plug); | 28706 xmlFree(plug); |
28624 return(0); | 28707 return(0); |
28625 } | 28708 } |
28626 | 28709 |
28627 /** | 28710 /** |
| 28711 * xmlSchemaValidateSetLocator: |
| 28712 * @vctxt: a schema validation context |
| 28713 * @f: the locator function pointer |
| 28714 * @ctxt: the locator context |
| 28715 * |
| 28716 * Allows to set a locator function to the validation context, |
| 28717 * which will be used to provide file and line information since |
| 28718 * those are not provided as part of the SAX validation flow |
| 28719 * Setting @f to NULL disable the locator. |
| 28720 */ |
| 28721 |
| 28722 void |
| 28723 xmlSchemaValidateSetLocator(xmlSchemaValidCtxtPtr vctxt, |
| 28724 xmlSchemaValidityLocatorFunc f, |
| 28725 void *ctxt) |
| 28726 { |
| 28727 if (vctxt == NULL) return; |
| 28728 vctxt->locFunc = f; |
| 28729 vctxt->locCtxt = ctxt; |
| 28730 } |
| 28731 |
| 28732 /** |
| 28733 * xmlSchemaValidateStreamLocator: |
| 28734 * @ctx: the xmlTextReaderPtr used |
| 28735 * @file: returned file information |
| 28736 * @line: returned line information |
| 28737 * |
| 28738 * Internal locator function for the readers |
| 28739 * |
| 28740 * Returns 0 in case the Schema validation could be (des)activated and |
| 28741 * -1 in case of error. |
| 28742 */ |
| 28743 static int |
| 28744 xmlSchemaValidateStreamLocator(void *ctx, const char **file, |
| 28745 unsigned long *line) { |
| 28746 xmlParserCtxtPtr ctxt; |
| 28747 |
| 28748 if ((ctx == NULL) || ((file == NULL) && (line == NULL))) |
| 28749 return(-1); |
| 28750 |
| 28751 if (file != NULL) |
| 28752 *file = NULL; |
| 28753 if (line != NULL) |
| 28754 *line = 0; |
| 28755 |
| 28756 ctxt = (xmlParserCtxtPtr) ctx; |
| 28757 if (ctxt->input != NULL) { |
| 28758 if (file != NULL) |
| 28759 *file = ctxt->input->filename; |
| 28760 if (line != NULL) |
| 28761 *line = ctxt->input->line; |
| 28762 return(0); |
| 28763 } |
| 28764 return(-1); |
| 28765 } |
| 28766 |
| 28767 /** |
28628 * xmlSchemaValidateStream: | 28768 * xmlSchemaValidateStream: |
28629 * @ctxt: a schema validation context | 28769 * @ctxt: a schema validation context |
28630 * @input: the input to use for reading the data | 28770 * @input: the input to use for reading the data |
28631 * @enc: an optional encoding information | 28771 * @enc: an optional encoding information |
28632 * @sax: a SAX handler for the resulting events | 28772 * @sax: a SAX handler for the resulting events |
28633 * @user_data: the context to provide to the SAX handler. | 28773 * @user_data: the context to provide to the SAX handler. |
28634 * | 28774 * |
28635 * Validate an input based on a flow of SAX event from the parser | 28775 * Validate an input based on a flow of SAX event from the parser |
28636 * and forward the events to the @sax handler with the provided @user_data | 28776 * and forward the events to the @sax handler with the provided @user_data |
28637 * the user provided @sax handler must be a SAX2 one. | 28777 * the user provided @sax handler must be a SAX2 one. |
(...skipping 22 matching lines...) Expand all Loading... |
28660 if (pctxt == NULL) | 28800 if (pctxt == NULL) |
28661 return (-1); | 28801 return (-1); |
28662 old_sax = pctxt->sax; | 28802 old_sax = pctxt->sax; |
28663 pctxt->sax = sax; | 28803 pctxt->sax = sax; |
28664 pctxt->userData = user_data; | 28804 pctxt->userData = user_data; |
28665 #if 0 | 28805 #if 0 |
28666 if (options) | 28806 if (options) |
28667 xmlCtxtUseOptions(pctxt, options); | 28807 xmlCtxtUseOptions(pctxt, options); |
28668 #endif | 28808 #endif |
28669 pctxt->linenumbers = 1; | 28809 pctxt->linenumbers = 1; |
| 28810 xmlSchemaValidateSetLocator(ctxt, xmlSchemaValidateStreamLocator, pctxt); |
28670 | 28811 |
28671 inputStream = xmlNewIOInputStream(pctxt, input, enc);; | 28812 inputStream = xmlNewIOInputStream(pctxt, input, enc);; |
28672 if (inputStream == NULL) { | 28813 if (inputStream == NULL) { |
28673 ret = -1; | 28814 ret = -1; |
28674 goto done; | 28815 goto done; |
28675 } | 28816 } |
28676 inputPush(pctxt, inputStream); | 28817 inputPush(pctxt, inputStream); |
28677 ctxt->parserCtxt = pctxt; | 28818 ctxt->parserCtxt = pctxt; |
28678 ctxt->input = input; | 28819 ctxt->input = input; |
28679 | 28820 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
28757 xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt) | 28898 xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt) |
28758 { | 28899 { |
28759 if (ctxt == NULL) | 28900 if (ctxt == NULL) |
28760 return(NULL); | 28901 return(NULL); |
28761 return (ctxt->parserCtxt); | 28902 return (ctxt->parserCtxt); |
28762 } | 28903 } |
28763 | 28904 |
28764 #define bottom_xmlschemas | 28905 #define bottom_xmlschemas |
28765 #include "elfgcchack.h" | 28906 #include "elfgcchack.h" |
28766 #endif /* LIBXML_SCHEMAS_ENABLED */ | 28907 #endif /* LIBXML_SCHEMAS_ENABLED */ |
OLD | NEW |