libxml-ruby 2.9.0-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +7 -0
  2. data/HISTORY +790 -0
  3. data/LICENSE +21 -0
  4. data/MANIFEST +166 -0
  5. data/README.rdoc +184 -0
  6. data/Rakefile +81 -0
  7. data/ext/libxml/extconf.h +4 -0
  8. data/ext/libxml/extconf.rb +57 -0
  9. data/ext/libxml/libxml.c +80 -0
  10. data/ext/libxml/libxml_ruby.def +35 -0
  11. data/ext/libxml/ruby_libxml.h +75 -0
  12. data/ext/libxml/ruby_xml.c +977 -0
  13. data/ext/libxml/ruby_xml.h +20 -0
  14. data/ext/libxml/ruby_xml_attr.c +333 -0
  15. data/ext/libxml/ruby_xml_attr.h +12 -0
  16. data/ext/libxml/ruby_xml_attr_decl.c +153 -0
  17. data/ext/libxml/ruby_xml_attr_decl.h +11 -0
  18. data/ext/libxml/ruby_xml_attributes.c +275 -0
  19. data/ext/libxml/ruby_xml_attributes.h +15 -0
  20. data/ext/libxml/ruby_xml_cbg.c +85 -0
  21. data/ext/libxml/ruby_xml_document.c +1133 -0
  22. data/ext/libxml/ruby_xml_document.h +11 -0
  23. data/ext/libxml/ruby_xml_dtd.c +261 -0
  24. data/ext/libxml/ruby_xml_dtd.h +9 -0
  25. data/ext/libxml/ruby_xml_encoding.c +262 -0
  26. data/ext/libxml/ruby_xml_encoding.h +19 -0
  27. data/ext/libxml/ruby_xml_error.c +996 -0
  28. data/ext/libxml/ruby_xml_error.h +12 -0
  29. data/ext/libxml/ruby_xml_html_parser.c +92 -0
  30. data/ext/libxml/ruby_xml_html_parser.h +10 -0
  31. data/ext/libxml/ruby_xml_html_parser_context.c +337 -0
  32. data/ext/libxml/ruby_xml_html_parser_context.h +10 -0
  33. data/ext/libxml/ruby_xml_html_parser_options.c +46 -0
  34. data/ext/libxml/ruby_xml_html_parser_options.h +10 -0
  35. data/ext/libxml/ruby_xml_input_cbg.c +191 -0
  36. data/ext/libxml/ruby_xml_input_cbg.h +20 -0
  37. data/ext/libxml/ruby_xml_io.c +52 -0
  38. data/ext/libxml/ruby_xml_io.h +10 -0
  39. data/ext/libxml/ruby_xml_namespace.c +153 -0
  40. data/ext/libxml/ruby_xml_namespace.h +10 -0
  41. data/ext/libxml/ruby_xml_namespaces.c +293 -0
  42. data/ext/libxml/ruby_xml_namespaces.h +9 -0
  43. data/ext/libxml/ruby_xml_node.c +1446 -0
  44. data/ext/libxml/ruby_xml_node.h +11 -0
  45. data/ext/libxml/ruby_xml_parser.c +94 -0
  46. data/ext/libxml/ruby_xml_parser.h +12 -0
  47. data/ext/libxml/ruby_xml_parser_context.c +999 -0
  48. data/ext/libxml/ruby_xml_parser_context.h +10 -0
  49. data/ext/libxml/ruby_xml_parser_options.c +66 -0
  50. data/ext/libxml/ruby_xml_parser_options.h +12 -0
  51. data/ext/libxml/ruby_xml_reader.c +1226 -0
  52. data/ext/libxml/ruby_xml_reader.h +17 -0
  53. data/ext/libxml/ruby_xml_relaxng.c +110 -0
  54. data/ext/libxml/ruby_xml_relaxng.h +10 -0
  55. data/ext/libxml/ruby_xml_sax2_handler.c +326 -0
  56. data/ext/libxml/ruby_xml_sax2_handler.h +10 -0
  57. data/ext/libxml/ruby_xml_sax_parser.c +120 -0
  58. data/ext/libxml/ruby_xml_sax_parser.h +10 -0
  59. data/ext/libxml/ruby_xml_schema.c +300 -0
  60. data/ext/libxml/ruby_xml_schema.h +809 -0
  61. data/ext/libxml/ruby_xml_schema_attribute.c +109 -0
  62. data/ext/libxml/ruby_xml_schema_attribute.h +15 -0
  63. data/ext/libxml/ruby_xml_schema_element.c +94 -0
  64. data/ext/libxml/ruby_xml_schema_element.h +14 -0
  65. data/ext/libxml/ruby_xml_schema_facet.c +52 -0
  66. data/ext/libxml/ruby_xml_schema_facet.h +13 -0
  67. data/ext/libxml/ruby_xml_schema_type.c +259 -0
  68. data/ext/libxml/ruby_xml_schema_type.h +9 -0
  69. data/ext/libxml/ruby_xml_version.h +9 -0
  70. data/ext/libxml/ruby_xml_writer.c +1136 -0
  71. data/ext/libxml/ruby_xml_writer.h +10 -0
  72. data/ext/libxml/ruby_xml_xinclude.c +16 -0
  73. data/ext/libxml/ruby_xml_xinclude.h +11 -0
  74. data/ext/libxml/ruby_xml_xpath.c +188 -0
  75. data/ext/libxml/ruby_xml_xpath.h +13 -0
  76. data/ext/libxml/ruby_xml_xpath_context.c +360 -0
  77. data/ext/libxml/ruby_xml_xpath_context.h +9 -0
  78. data/ext/libxml/ruby_xml_xpath_expression.c +81 -0
  79. data/ext/libxml/ruby_xml_xpath_expression.h +10 -0
  80. data/ext/libxml/ruby_xml_xpath_object.c +335 -0
  81. data/ext/libxml/ruby_xml_xpath_object.h +17 -0
  82. data/ext/libxml/ruby_xml_xpointer.c +99 -0
  83. data/ext/libxml/ruby_xml_xpointer.h +11 -0
  84. data/ext/vc/libxml_ruby.sln +26 -0
  85. data/lib/2.3/libxml_ruby.so +0 -0
  86. data/lib/libs/libiconv-2.dll +0 -0
  87. data/lib/libs/libxml2-2.dll +0 -0
  88. data/lib/libs/zlib1.dll +0 -0
  89. data/lib/libxml.rb +35 -0
  90. data/lib/libxml/attr.rb +123 -0
  91. data/lib/libxml/attr_decl.rb +80 -0
  92. data/lib/libxml/attributes.rb +14 -0
  93. data/lib/libxml/document.rb +194 -0
  94. data/lib/libxml/error.rb +95 -0
  95. data/lib/libxml/hpricot.rb +78 -0
  96. data/lib/libxml/html_parser.rb +96 -0
  97. data/lib/libxml/namespace.rb +62 -0
  98. data/lib/libxml/namespaces.rb +38 -0
  99. data/lib/libxml/node.rb +399 -0
  100. data/lib/libxml/ns.rb +22 -0
  101. data/lib/libxml/parser.rb +367 -0
  102. data/lib/libxml/properties.rb +23 -0
  103. data/lib/libxml/reader.rb +29 -0
  104. data/lib/libxml/sax_callbacks.rb +180 -0
  105. data/lib/libxml/sax_parser.rb +58 -0
  106. data/lib/libxml/schema.rb +67 -0
  107. data/lib/libxml/schema/attribute.rb +19 -0
  108. data/lib/libxml/schema/element.rb +27 -0
  109. data/lib/libxml/schema/type.rb +29 -0
  110. data/lib/libxml/tree.rb +29 -0
  111. data/lib/libxml/xpath_object.rb +16 -0
  112. data/lib/xml.rb +14 -0
  113. data/lib/xml/libxml.rb +10 -0
  114. data/libxml-ruby.gemspec +47 -0
  115. data/script/benchmark/depixelate +634 -0
  116. data/script/benchmark/hamlet.xml +9055 -0
  117. data/script/benchmark/parsecount +170 -0
  118. data/script/benchmark/sock_entries.xml +507 -0
  119. data/script/benchmark/throughput +41 -0
  120. data/script/test +6 -0
  121. data/setup.rb +1585 -0
  122. data/test/c14n/given/doc.dtd +1 -0
  123. data/test/c14n/given/example-1.xml +14 -0
  124. data/test/c14n/given/example-2.xml +11 -0
  125. data/test/c14n/given/example-3.xml +18 -0
  126. data/test/c14n/given/example-4.xml +9 -0
  127. data/test/c14n/given/example-5.xml +12 -0
  128. data/test/c14n/given/example-6.xml +2 -0
  129. data/test/c14n/given/example-7.xml +11 -0
  130. data/test/c14n/given/example-8.xml +11 -0
  131. data/test/c14n/given/example-8.xpath +10 -0
  132. data/test/c14n/given/world.txt +1 -0
  133. data/test/c14n/result/1-1-without-comments/example-1 +4 -0
  134. data/test/c14n/result/1-1-without-comments/example-2 +11 -0
  135. data/test/c14n/result/1-1-without-comments/example-3 +14 -0
  136. data/test/c14n/result/1-1-without-comments/example-4 +9 -0
  137. data/test/c14n/result/1-1-without-comments/example-5 +3 -0
  138. data/test/c14n/result/1-1-without-comments/example-6 +1 -0
  139. data/test/c14n/result/1-1-without-comments/example-7 +1 -0
  140. data/test/c14n/result/1-1-without-comments/example-8 +1 -0
  141. data/test/c14n/result/with-comments/example-1 +6 -0
  142. data/test/c14n/result/with-comments/example-2 +11 -0
  143. data/test/c14n/result/with-comments/example-3 +14 -0
  144. data/test/c14n/result/with-comments/example-4 +9 -0
  145. data/test/c14n/result/with-comments/example-5 +4 -0
  146. data/test/c14n/result/with-comments/example-6 +1 -0
  147. data/test/c14n/result/with-comments/example-7 +1 -0
  148. data/test/c14n/result/without-comments/example-1 +4 -0
  149. data/test/c14n/result/without-comments/example-2 +11 -0
  150. data/test/c14n/result/without-comments/example-3 +14 -0
  151. data/test/c14n/result/without-comments/example-4 +9 -0
  152. data/test/c14n/result/without-comments/example-5 +3 -0
  153. data/test/c14n/result/without-comments/example-6 +1 -0
  154. data/test/c14n/result/without-comments/example-7 +1 -0
  155. data/test/model/atom.xml +13 -0
  156. data/test/model/bands.iso-8859-1.xml +5 -0
  157. data/test/model/bands.utf-8.xml +5 -0
  158. data/test/model/bands.xml +5 -0
  159. data/test/model/books.xml +154 -0
  160. data/test/model/merge_bug_data.xml +58 -0
  161. data/test/model/ruby-lang.html +238 -0
  162. data/test/model/rubynet.xml +79 -0
  163. data/test/model/rubynet_project +1 -0
  164. data/test/model/shiporder.rnc +28 -0
  165. data/test/model/shiporder.rng +86 -0
  166. data/test/model/shiporder.xml +23 -0
  167. data/test/model/shiporder.xsd +40 -0
  168. data/test/model/soap.xml +27 -0
  169. data/test/model/xinclude.xml +5 -0
  170. data/test/tc_attr.rb +181 -0
  171. data/test/tc_attr_decl.rb +132 -0
  172. data/test/tc_attributes.rb +142 -0
  173. data/test/tc_canonicalize.rb +124 -0
  174. data/test/tc_deprecated_require.rb +12 -0
  175. data/test/tc_document.rb +125 -0
  176. data/test/tc_document_write.rb +195 -0
  177. data/test/tc_dtd.rb +128 -0
  178. data/test/tc_encoding.rb +126 -0
  179. data/test/tc_encoding_sax.rb +115 -0
  180. data/test/tc_error.rb +179 -0
  181. data/test/tc_html_parser.rb +161 -0
  182. data/test/tc_html_parser_context.rb +23 -0
  183. data/test/tc_namespace.rb +61 -0
  184. data/test/tc_namespaces.rb +209 -0
  185. data/test/tc_node.rb +215 -0
  186. data/test/tc_node_cdata.rb +50 -0
  187. data/test/tc_node_comment.rb +32 -0
  188. data/test/tc_node_copy.rb +41 -0
  189. data/test/tc_node_edit.rb +174 -0
  190. data/test/tc_node_pi.rb +39 -0
  191. data/test/tc_node_text.rb +70 -0
  192. data/test/tc_node_write.rb +107 -0
  193. data/test/tc_node_xlink.rb +28 -0
  194. data/test/tc_parser.rb +375 -0
  195. data/test/tc_parser_context.rb +204 -0
  196. data/test/tc_properties.rb +38 -0
  197. data/test/tc_reader.rb +399 -0
  198. data/test/tc_relaxng.rb +53 -0
  199. data/test/tc_sax_parser.rb +319 -0
  200. data/test/tc_schema.rb +161 -0
  201. data/test/tc_traversal.rb +152 -0
  202. data/test/tc_writer.rb +447 -0
  203. data/test/tc_xinclude.rb +20 -0
  204. data/test/tc_xml.rb +225 -0
  205. data/test/tc_xpath.rb +244 -0
  206. data/test/tc_xpath_context.rb +88 -0
  207. data/test/tc_xpath_expression.rb +37 -0
  208. data/test/tc_xpointer.rb +72 -0
  209. data/test/test_helper.rb +16 -0
  210. data/test/test_suite.rb +49 -0
  211. metadata +344 -0
@@ -0,0 +1,10 @@
1
+ /* Please see the LICENSE file for copyright and distribution information */
2
+
3
+ #ifndef __RXML_SAX2_HANDLER__
4
+ #define __RXML_SAX2_HANDLER__
5
+
6
+ extern xmlSAXHandler rxml_sax_handler;
7
+
8
+ void rxml_init_sax2_handler(void);
9
+
10
+ #endif
@@ -0,0 +1,120 @@
1
+ /* Please see the LICENSE file for copyright and distribution information */
2
+
3
+ #include "ruby_libxml.h"
4
+ #include "ruby_xml_sax_parser.h"
5
+
6
+ /*
7
+ * Document-class: LibXML::XML::SaxParser
8
+ *
9
+ * XML::SaxParser provides a callback based API for parsing documents,
10
+ * in contrast to XML::Parser's tree based API and XML::Reader's stream
11
+ * based API.
12
+ *
13
+ * The XML::SaxParser API is fairly complex, not well standardized,
14
+ * and does not directly support validation making entity, namespace and
15
+ * base processing relatively hard.
16
+ *
17
+ * To use the XML::SaxParser, register a callback class via the
18
+ * XML::SaxParser#callbacks=. It is easiest to include the
19
+ * XML::SaxParser::Callbacks module in your class and override
20
+ * the methods as needed.
21
+ *
22
+ * Basic example:
23
+ *
24
+ * class MyCallbacks
25
+ * include XML::SaxParser::Callbacks
26
+ * def on_start_element(element, attributes)
27
+ * puts #Element started: #{element}"
28
+ * end
29
+ * end
30
+ *
31
+ * parser = XML::SaxParser.string(my_string)
32
+ * parser.callbacks = MyCallbacks.new
33
+ * parser.parse
34
+ *
35
+ * You can also parse strings (see XML::SaxParser.string) and
36
+ * io objects (see XML::SaxParser.io).
37
+ */
38
+
39
+ VALUE cXMLSaxParser;
40
+ static ID CALLBACKS_ATTR;
41
+ static ID CONTEXT_ATTR;
42
+
43
+
44
+ /* ====== Parser =========== */
45
+
46
+ /*
47
+ * call-seq:
48
+ * parser.initialize(context) -> XML::Parser
49
+ *
50
+ * Creates a new XML::Parser from the specified
51
+ * XML::Parser::Context.
52
+ */
53
+ static VALUE rxml_sax_parser_initialize(int argc, VALUE *argv, VALUE self)
54
+ {
55
+ VALUE context = Qnil;
56
+
57
+ rb_scan_args(argc, argv, "01", &context);
58
+
59
+ if (context == Qnil)
60
+ {
61
+ rb_warn("Passing no parameters to XML::SaxParser.new is deprecated. Pass an instance of XML::Parser::Context instead.");
62
+ context = rb_class_new_instance(0, NULL, cXMLParserContext);
63
+ }
64
+
65
+ rb_ivar_set(self, CONTEXT_ATTR, context);
66
+ return self;
67
+ }
68
+
69
+ /*
70
+ * call-seq:
71
+ * parser.parse -> (true|false)
72
+ *
73
+ * Parse the input XML, generating callbacks to the object
74
+ * registered via the +callbacks+ attributesibute.
75
+ */
76
+ static VALUE rxml_sax_parser_parse(VALUE self)
77
+ {
78
+ int status;
79
+ VALUE context = rb_ivar_get(self, CONTEXT_ATTR);
80
+ xmlParserCtxtPtr ctxt;
81
+ Data_Get_Struct(context, xmlParserCtxt, ctxt);
82
+
83
+ ctxt->sax2 = 1;
84
+ ctxt->userData = (void*)rb_ivar_get(self, CALLBACKS_ATTR);
85
+
86
+ if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
87
+ xmlFree(ctxt->sax);
88
+
89
+ ctxt->sax = (xmlSAXHandlerPtr) xmlMalloc(sizeof(rxml_sax_handler));
90
+ if (ctxt->sax == NULL)
91
+ rb_fatal("Not enough memory.");
92
+ memcpy(ctxt->sax, &rxml_sax_handler, sizeof(rxml_sax_handler));
93
+
94
+ status = xmlParseDocument(ctxt);
95
+
96
+ /* Now check the parsing result*/
97
+ if (status == -1 || !ctxt->wellFormed)
98
+ {
99
+ if (ctxt->myDoc)
100
+ xmlFreeDoc(ctxt->myDoc);
101
+
102
+ rxml_raise(&ctxt->lastError);
103
+ }
104
+ return Qtrue;
105
+ }
106
+
107
+ void rxml_init_sax_parser(void)
108
+ {
109
+ /* SaxParser */
110
+ cXMLSaxParser = rb_define_class_under(mXML, "SaxParser", rb_cObject);
111
+
112
+ /* Atributes */
113
+ CALLBACKS_ATTR = rb_intern("@callbacks");
114
+ CONTEXT_ATTR = rb_intern("@context");
115
+ rb_define_attr(cXMLSaxParser, "callbacks", 1, 1);
116
+
117
+ /* Instance Methods */
118
+ rb_define_method(cXMLSaxParser, "initialize", rxml_sax_parser_initialize, -1);
119
+ rb_define_method(cXMLSaxParser, "parse", rxml_sax_parser_parse, 0);
120
+ }
@@ -0,0 +1,10 @@
1
+ /* Please see the LICENSE file for copyright and distribution information */
2
+
3
+ #ifndef __RXML_SAX_PARSER__
4
+ #define __RXML_SAX_PARSER__
5
+
6
+ extern VALUE cXMLSaxParser;
7
+
8
+ void rxml_init_sax_parser(void);
9
+
10
+ #endif
@@ -0,0 +1,300 @@
1
+ #include "ruby_libxml.h"
2
+ #define LIBXML_OUTPUT_ENABLED
3
+ #define DUMP_CONTENT_MODEL
4
+ #include "ruby_xml_schema.h"
5
+
6
+ #include "ruby_xml_schema_type.h"
7
+ #include "ruby_xml_schema_element.h"
8
+ #include "ruby_xml_schema_attribute.h"
9
+ #include "ruby_xml_schema_facet.h"
10
+
11
+
12
+ /*
13
+ * Document-class: LibXML::XML::Schema
14
+ *
15
+ * The XML::Schema class is used to prepare XML Schemas for validation of xml
16
+ * documents.
17
+ *
18
+ * Schemas can be created from XML documents, strinings or URIs using the
19
+ * corresponding methods (new for URIs).
20
+ *
21
+ * Once a schema is prepared, an XML document can be validated by the
22
+ * XML::Document#validate_schema method providing the XML::Schema object
23
+ * as parameter. The method return true if the document validates, false
24
+ * otherwise.
25
+ *
26
+ * Basic usage:
27
+ *
28
+ * # parse schema as xml document
29
+ * schema_document = XML::Document.file('schema.rng')
30
+ *
31
+ * # prepare schema for validation
32
+ * schema = XML::Schema.document(schema_document)
33
+ *
34
+ * # parse xml document to be validated
35
+ * instance = XML::Document.file('instance.xml')
36
+ *
37
+ * # validate
38
+ * instance.validate_schema(schema)
39
+ */
40
+
41
+ VALUE cXMLSchema;
42
+
43
+ static void rxml_schema_free(xmlSchemaPtr xschema)
44
+ {
45
+ xmlSchemaFree(xschema);
46
+ }
47
+
48
+ VALUE rxml_wrap_schema(xmlSchemaPtr xschema)
49
+ {
50
+ return Data_Wrap_Struct(cXMLSchema, NULL, rxml_schema_free, xschema);
51
+ }
52
+
53
+
54
+ /*
55
+ * call-seq:
56
+ * XML::Schema.initialize(schema_uri) -> schema
57
+ *
58
+ * Create a new schema from the specified URI.
59
+ */
60
+ static VALUE rxml_schema_init_from_uri(VALUE class, VALUE uri)
61
+ {
62
+ xmlSchemaParserCtxtPtr xparser;
63
+ xmlSchemaPtr xschema;
64
+
65
+ Check_Type(uri, T_STRING);
66
+
67
+ xparser = xmlSchemaNewParserCtxt(StringValuePtr(uri));
68
+ xschema = xmlSchemaParse(xparser);
69
+ xmlSchemaFreeParserCtxt(xparser);
70
+
71
+ return Data_Wrap_Struct(cXMLSchema, NULL, rxml_schema_free, xschema);
72
+ }
73
+
74
+ /*
75
+ * call-seq:
76
+ * XML::Schema.document(document) -> schema
77
+ *
78
+ * Create a new schema from the specified document.
79
+ */
80
+ static VALUE rxml_schema_init_from_document(VALUE class, VALUE document)
81
+ {
82
+ xmlDocPtr xdoc;
83
+ xmlSchemaPtr xschema;
84
+ xmlSchemaParserCtxtPtr xparser;
85
+
86
+ Data_Get_Struct(document, xmlDoc, xdoc);
87
+
88
+ xparser = xmlSchemaNewDocParserCtxt(xdoc);
89
+ xschema = xmlSchemaParse(xparser);
90
+ xmlSchemaFreeParserCtxt(xparser);
91
+
92
+ if (xschema == NULL)
93
+ return Qnil;
94
+
95
+ return Data_Wrap_Struct(cXMLSchema, NULL, rxml_schema_free, xschema);
96
+ }
97
+
98
+ /*
99
+ * call-seq:
100
+ * XML::Schema.from_string("schema_data") -> "value"
101
+ *
102
+ * Create a new schema using the specified string.
103
+ */
104
+ static VALUE rxml_schema_init_from_string(VALUE self, VALUE schema_str)
105
+ {
106
+ xmlSchemaParserCtxtPtr xparser;
107
+ xmlSchemaPtr xschema;
108
+
109
+ Check_Type(schema_str, T_STRING);
110
+
111
+ xparser = xmlSchemaNewMemParserCtxt(StringValuePtr(schema_str), (int)strlen(StringValuePtr(schema_str)));
112
+ xschema = xmlSchemaParse(xparser);
113
+ xmlSchemaFreeParserCtxt(xparser);
114
+
115
+ return Data_Wrap_Struct(cXMLSchema, NULL, rxml_schema_free, xschema);
116
+ }
117
+
118
+
119
+ static VALUE rxml_schema_target_namespace(VALUE self)
120
+ {
121
+ xmlSchemaPtr xschema;
122
+
123
+ Data_Get_Struct(self, xmlSchema, xschema);
124
+
125
+ QNIL_OR_STRING(xschema->targetNamespace)
126
+ }
127
+
128
+ static VALUE rxml_schema_name(VALUE self)
129
+ {
130
+ xmlSchemaPtr xschema;
131
+
132
+ Data_Get_Struct(self, xmlSchema, xschema);
133
+
134
+ QNIL_OR_STRING(xschema->name)
135
+ }
136
+
137
+ static VALUE rxml_schema_version(VALUE self)
138
+ {
139
+ xmlSchemaPtr xschema;
140
+
141
+ Data_Get_Struct(self, xmlSchema, xschema);
142
+
143
+ QNIL_OR_STRING(xschema->version)
144
+ }
145
+
146
+ static VALUE rxml_schema_id(VALUE self)
147
+ {
148
+ xmlSchemaPtr xschema;
149
+
150
+ Data_Get_Struct(self, xmlSchema, xschema);
151
+
152
+ QNIL_OR_STRING(xschema->id)
153
+ }
154
+
155
+
156
+ static VALUE rxml_schema_document(VALUE self)
157
+ {
158
+ xmlSchemaPtr xschema;
159
+
160
+ Data_Get_Struct(self, xmlSchema, xschema);
161
+
162
+ return rxml_node_wrap(xmlDocGetRootElement(xschema->doc));
163
+ }
164
+
165
+ static void storeNs(xmlSchemaImportPtr import, VALUE self, xmlChar *nsname)
166
+ {
167
+ VALUE schemas;
168
+ xmlNodePtr xnode;
169
+ xmlNsPtr xns;
170
+
171
+ schemas = rb_iv_get(self, "@namespaces");
172
+ if (import->doc) {
173
+ xnode = xmlDocGetRootElement(import->doc);
174
+
175
+ xns = xnode->nsDef;
176
+
177
+ while (xns) {
178
+ VALUE anamespace = rxml_namespace_wrap(xns);
179
+ rb_ary_push(schemas, anamespace);
180
+ xns = xns->next;
181
+ }
182
+ }
183
+ }
184
+
185
+ static VALUE rxml_schema_namespaces(VALUE self)
186
+ {
187
+ VALUE schemas;
188
+ xmlSchemaPtr xschema;
189
+
190
+ Data_Get_Struct(self, xmlSchema, xschema);
191
+
192
+ if (rb_iv_get(self, "@namespaces") == Qnil) {
193
+ schemas = rb_ary_new();
194
+ rb_iv_set(self, "@namespaces", schemas);
195
+ xmlHashScan(xschema->schemasImports, (xmlHashScanner) storeNs, (void *)self);
196
+ }
197
+
198
+ return rb_iv_get(self, "@namespaces");
199
+ }
200
+
201
+ static void storeType(xmlSchemaTypePtr type, VALUE self, xmlChar *name)
202
+ {
203
+ VALUE types;
204
+ VALUE rtype;
205
+
206
+ types = rb_iv_get(self, "@types");
207
+ rtype = rxml_wrap_schema_type(type);
208
+
209
+ rb_hash_aset(types, rb_str_new2((const char*)name), rtype);
210
+ }
211
+
212
+ static VALUE rxml_schema_collect_types(VALUE self);
213
+
214
+ static VALUE rxml_schema_types(VALUE self)
215
+ {
216
+ VALUE types;
217
+ xmlSchemaPtr xschema;
218
+
219
+ Data_Get_Struct(self, xmlSchema, xschema);
220
+
221
+ if (rb_iv_get(self, "@types") == Qnil) {
222
+ types = rb_hash_new();
223
+ rb_iv_set(self, "@types", types);
224
+ rxml_schema_collect_types(self);
225
+ if(xschema != NULL && xschema->typeDecl != NULL)
226
+ xmlHashScan(xschema->typeDecl, (xmlHashScanner) storeType, (void *)self);
227
+ }
228
+
229
+ return rb_iv_get(self, "@types");
230
+ }
231
+
232
+ static void storeElement(xmlSchemaElementPtr element, VALUE self, xmlChar *name)
233
+ {
234
+ VALUE elements;
235
+ VALUE relement;
236
+
237
+ elements = rb_iv_get(self, "@elements");
238
+ relement = rxml_wrap_schema_element(element);
239
+ rb_hash_aset(elements, rb_str_new2((const char*)name), relement);
240
+ }
241
+
242
+ static VALUE rxml_schema_elements(VALUE self)
243
+ {
244
+ VALUE elements;
245
+ xmlSchemaPtr xschema;
246
+
247
+ Data_Get_Struct(self, xmlSchema, xschema);
248
+
249
+ if (rb_iv_get(self, "@elements") == Qnil) {
250
+ elements = rb_hash_new();
251
+ rb_iv_set(self, "@elements", elements);
252
+ xmlHashScan(xschema->elemDecl, (xmlHashScanner) storeElement, (void *)self);
253
+ }
254
+
255
+ return rb_iv_get(self, "@elements");
256
+ }
257
+
258
+ static void collectSchemaTypes(xmlSchemaImportPtr import, VALUE self)
259
+ {
260
+ if (import->imported && import->schema) {
261
+ xmlHashScan(import->schema->typeDecl, (xmlHashScanner) storeType, (void *)self);
262
+ }
263
+ }
264
+
265
+ static VALUE rxml_schema_collect_types(VALUE self)
266
+ {
267
+ xmlSchemaPtr xschema;
268
+
269
+ Data_Get_Struct(self, xmlSchema, xschema);
270
+
271
+ if(xschema){
272
+ xmlHashScan(xschema->schemasImports, (xmlHashScanner) collectSchemaTypes, (void *)self);
273
+ }
274
+
275
+ return Qnil;
276
+ }
277
+
278
+ void rxml_init_schema(void)
279
+ {
280
+ cXMLSchema = rb_define_class_under(mXML, "Schema", rb_cObject);
281
+ rb_define_singleton_method(cXMLSchema, "new", rxml_schema_init_from_uri, 1);
282
+ rb_define_singleton_method(cXMLSchema, "from_string", rxml_schema_init_from_string, 1);
283
+ rb_define_singleton_method(cXMLSchema, "document", rxml_schema_init_from_document, 1);
284
+
285
+ rb_define_method(cXMLSchema, "target_namespace", rxml_schema_target_namespace, 0);
286
+ rb_define_method(cXMLSchema, "name", rxml_schema_name, 0);
287
+ rb_define_method(cXMLSchema, "id", rxml_schema_id, 0);
288
+ rb_define_method(cXMLSchema, "version", rxml_schema_version, 0);
289
+ rb_define_method(cXMLSchema, "document", rxml_schema_document, 0);
290
+
291
+ rb_define_method(cXMLSchema, "_namespaces", rxml_schema_namespaces, 0);
292
+ rb_define_method(cXMLSchema, "_collect_types", rxml_schema_collect_types, 0);
293
+ rb_define_method(cXMLSchema, "types", rxml_schema_types, 0);
294
+ rb_define_method(cXMLSchema, "elements", rxml_schema_elements, 0);
295
+
296
+ rxml_init_schema_facet();
297
+ rxml_init_schema_element();
298
+ rxml_init_schema_attribute();
299
+ rxml_init_schema_type();
300
+ }
@@ -0,0 +1,809 @@
1
+ #ifndef __RXML_SCHEMA__
2
+ #define __RXML_SCHEMA__
3
+
4
+ #include <libxml/schemasInternals.h>
5
+ #include <libxml/xmlschemas.h>
6
+ #include <libxml/xmlschemastypes.h>
7
+
8
+ extern VALUE cXMLSchema;
9
+
10
+ void rxml_init_schema(void);
11
+
12
+ #define QNIL_OR_STRING(slot) \
13
+ if (slot == NULL) \
14
+ return Qnil; \
15
+ else \
16
+ return rb_str_new2((const char *)slot);
17
+
18
+ #define SUBSET_RESTRICTION 1<<0
19
+ #define SUBSET_EXTENSION 1<<1
20
+ #define SUBSET_SUBSTITUTION 1<<2
21
+ #define SUBSET_LIST 1<<3
22
+ #define SUBSET_UNION 1<<4
23
+
24
+ typedef struct _xmlSchemaNodeInfo xmlSchemaNodeInfo;
25
+ typedef xmlSchemaNodeInfo *xmlSchemaNodeInfoPtr;
26
+
27
+ typedef struct _xmlSchemaItemList xmlSchemaItemList;
28
+ typedef xmlSchemaItemList *xmlSchemaItemListPtr;
29
+ struct _xmlSchemaItemList {
30
+ void **items;
31
+ /* used for dynamic addition of schemata */
32
+ int nbItems;
33
+ /* used for dynamic addition of schemata */
34
+ int sizeItems; /* used for dynamic addition of schemata */
35
+ };
36
+
37
+ #define XML_SCHEMA_CTXT_PARSER 1
38
+ #define XML_SCHEMA_CTXT_VALIDATOR 2
39
+
40
+ typedef struct _xmlSchemaAbstractCtxt xmlSchemaAbstractCtxt;
41
+ typedef xmlSchemaAbstractCtxt *xmlSchemaAbstractCtxtPtr;
42
+ struct _xmlSchemaAbstractCtxt {
43
+ int type; /* E.g. XML_SCHEMA_CTXT_VALIDATOR */
44
+ };
45
+
46
+ typedef struct _xmlSchemaBucket xmlSchemaBucket;
47
+ typedef xmlSchemaBucket *xmlSchemaBucketPtr;
48
+
49
+ #define XML_SCHEMA_SCHEMA_MAIN 0
50
+ #define XML_SCHEMA_SCHEMA_IMPORT 1
51
+ #define XML_SCHEMA_SCHEMA_INCLUDE 2
52
+ #define XML_SCHEMA_SCHEMA_REDEFINE 3
53
+
54
+ /**
55
+ * xmlSchemaSchemaRelation:
56
+ *
57
+ * Used to create a graph of schema relationships.
58
+ */
59
+ typedef struct _xmlSchemaSchemaRelation xmlSchemaSchemaRelation;
60
+ typedef xmlSchemaSchemaRelation *xmlSchemaSchemaRelationPtr;
61
+ struct _xmlSchemaSchemaRelation {
62
+ xmlSchemaSchemaRelationPtr next;
63
+ int type;
64
+ /* E.g. XML_SCHEMA_SCHEMA_IMPORT */
65
+ const xmlChar *importNamespace;
66
+ xmlSchemaBucketPtr bucket;
67
+ };
68
+
69
+ #define XML_SCHEMA_BUCKET_MARKED 1<<0
70
+ #define XML_SCHEMA_BUCKET_COMPS_ADDED 1<<1
71
+
72
+ struct _xmlSchemaBucket {
73
+ int type;
74
+ int flags;
75
+ const xmlChar *schemaLocation;
76
+ const xmlChar *origTargetNamespace;
77
+ const xmlChar *targetNamespace;
78
+ xmlDocPtr doc;
79
+ xmlSchemaSchemaRelationPtr relations;
80
+ int located;
81
+ int parsed;
82
+ int imported;
83
+ int preserveDoc;
84
+ xmlSchemaItemListPtr globals;
85
+ /* Global components. */
86
+ xmlSchemaItemListPtr locals; /* Local components. */
87
+ };
88
+
89
+ /**
90
+ * xmlSchemaImport:
91
+ * (extends xmlSchemaBucket)
92
+ *
93
+ * Reflects a schema. Holds some information
94
+ * about the schema and its toplevel components. Duplicate
95
+ * toplevel components are not checked at this level.
96
+ */
97
+ typedef struct _xmlSchemaImport xmlSchemaImport;
98
+ typedef xmlSchemaImport *xmlSchemaImportPtr;
99
+ struct _xmlSchemaImport {
100
+ int type;
101
+ /* Main OR import OR include. */
102
+ int flags;
103
+ const xmlChar *schemaLocation; /* The URI of the schema document. */
104
+ /* For chameleon includes, @origTargetNamespace will be NULL */
105
+ const xmlChar *origTargetNamespace;
106
+ /*
107
+ * For chameleon includes, @targetNamespace will be the
108
+ * targetNamespace of the including schema.
109
+ */
110
+ const xmlChar *targetNamespace;
111
+ xmlDocPtr doc; /* The schema node-tree. */
112
+ /* @relations will hold any included/imported/redefined schemas. */
113
+ xmlSchemaSchemaRelationPtr relations;
114
+ int located;
115
+ int parsed;
116
+ int imported;
117
+ int preserveDoc;
118
+ xmlSchemaItemListPtr globals;
119
+ xmlSchemaItemListPtr locals;
120
+ /* The imported schema. */
121
+ xmlSchemaPtr schema;
122
+ };
123
+
124
+ /*
125
+ * (extends xmlSchemaBucket)
126
+ */
127
+ typedef struct _xmlSchemaInclude xmlSchemaInclude;
128
+ typedef xmlSchemaInclude *xmlSchemaIncludePtr;
129
+ struct _xmlSchemaInclude {
130
+ int type;
131
+ int flags;
132
+ const xmlChar *schemaLocation;
133
+ const xmlChar *origTargetNamespace;
134
+ const xmlChar *targetNamespace;
135
+ xmlDocPtr doc;
136
+ xmlSchemaSchemaRelationPtr relations;
137
+ int located;
138
+ int parsed;
139
+ int imported;
140
+ int preserveDoc;
141
+ xmlSchemaItemListPtr globals;
142
+ /* Global components. */
143
+ xmlSchemaItemListPtr locals; /* Local components. */
144
+
145
+ /* The owning main or import schema bucket. */
146
+ xmlSchemaImportPtr ownerImport;
147
+ };
148
+
149
+ /**
150
+ * xmlSchemaBasicItem:
151
+ *
152
+ * The abstract base type for schema components.
153
+ */
154
+ typedef struct _xmlSchemaBasicItem xmlSchemaBasicItem;
155
+ typedef xmlSchemaBasicItem *xmlSchemaBasicItemPtr;
156
+ struct _xmlSchemaBasicItem {
157
+ xmlSchemaTypeType type;
158
+ };
159
+
160
+ /**
161
+ * xmlSchemaAnnotItem:
162
+ *
163
+ * The abstract base type for annotated schema components.
164
+ * (Extends xmlSchemaBasicItem)
165
+ */
166
+ typedef struct _xmlSchemaAnnotItem xmlSchemaAnnotItem;
167
+ typedef xmlSchemaAnnotItem *xmlSchemaAnnotItemPtr;
168
+ struct _xmlSchemaAnnotItem {
169
+ xmlSchemaTypeType type;
170
+ xmlSchemaAnnotPtr annot;
171
+ };
172
+
173
+ /**
174
+ * xmlSchemaTreeItem:
175
+ *
176
+ * The abstract base type for tree-like structured schema components.
177
+ * (Extends xmlSchemaAnnotItem)
178
+ */
179
+ typedef struct _xmlSchemaTreeItem xmlSchemaTreeItem;
180
+ typedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr;
181
+ struct _xmlSchemaTreeItem {
182
+ xmlSchemaTypeType type;
183
+ xmlSchemaAnnotPtr annot;
184
+ xmlSchemaTreeItemPtr next;
185
+ xmlSchemaTreeItemPtr children;
186
+ };
187
+
188
+
189
+ #define XML_SCHEMA_ATTR_USE_FIXED 1<<0
190
+ /**
191
+ * xmlSchemaAttributeUsePtr:
192
+ *
193
+ * The abstract base type for tree-like structured schema components.
194
+ * (Extends xmlSchemaTreeItem)
195
+ */
196
+ typedef struct _xmlSchemaAttributeUse xmlSchemaAttributeUse;
197
+ typedef xmlSchemaAttributeUse *xmlSchemaAttributeUsePtr;
198
+ struct _xmlSchemaAttributeUse {
199
+ xmlSchemaTypeType type;
200
+ xmlSchemaAnnotPtr annot;
201
+ xmlSchemaAttributeUsePtr next; /* The next attr. use. */
202
+ /*
203
+ * The attr. decl. OR a QName-ref. to an attr. decl. OR
204
+ * a QName-ref. to an attribute group definition.
205
+ */
206
+ xmlSchemaAttributePtr attrDecl;
207
+
208
+ int flags;
209
+ xmlNodePtr node;
210
+ int occurs;
211
+ /* required, optional */
212
+ const xmlChar *defValue;
213
+ xmlSchemaValPtr defVal;
214
+ };
215
+
216
+ /**
217
+ * xmlSchemaAttributeUseProhibPtr:
218
+ *
219
+ * A helper component to reflect attribute prohibitions.
220
+ * (Extends xmlSchemaBasicItem)
221
+ */
222
+ typedef struct _xmlSchemaAttributeUseProhib xmlSchemaAttributeUseProhib;
223
+ typedef xmlSchemaAttributeUseProhib *xmlSchemaAttributeUseProhibPtr;
224
+ struct _xmlSchemaAttributeUseProhib {
225
+ xmlSchemaTypeType type;
226
+ /* == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB */
227
+ xmlNodePtr node;
228
+ const xmlChar *name;
229
+ const xmlChar *targetNamespace;
230
+ int isRef;
231
+ };
232
+
233
+ /**
234
+ * xmlSchemaRedef:
235
+ */
236
+ typedef struct _xmlSchemaRedef xmlSchemaRedef;
237
+ typedef xmlSchemaRedef *xmlSchemaRedefPtr;
238
+ struct _xmlSchemaRedef {
239
+ xmlSchemaRedefPtr next;
240
+ xmlSchemaBasicItemPtr item;
241
+ /* The redefining component. */
242
+ xmlSchemaBasicItemPtr reference;
243
+ /* The referencing component. */
244
+ xmlSchemaBasicItemPtr target;
245
+ /* The to-be-redefined component. */
246
+ const xmlChar *refName;
247
+ /* The name of the to-be-redefined component. */
248
+ const xmlChar *refTargetNs;
249
+ /* The target namespace of the
250
+ to-be-redefined comp. */
251
+ xmlSchemaBucketPtr targetBucket; /* The redefined schema. */
252
+ };
253
+
254
+ /**
255
+ * xmlSchemaConstructionCtxt:
256
+ */
257
+ typedef struct _xmlSchemaConstructionCtxt xmlSchemaConstructionCtxt;
258
+ typedef xmlSchemaConstructionCtxt *xmlSchemaConstructionCtxtPtr;
259
+ struct _xmlSchemaConstructionCtxt {
260
+ xmlSchemaPtr mainSchema;
261
+ /* The main schema. */
262
+ xmlSchemaBucketPtr mainBucket;
263
+ /* The main schema bucket */
264
+ xmlDictPtr dict;
265
+ xmlSchemaItemListPtr buckets; /* List of schema buckets. */
266
+ /* xmlSchemaItemListPtr relations; */ /* List of schema relations. */
267
+ xmlSchemaBucketPtr bucket;
268
+ /* The current schema bucket */
269
+ xmlSchemaItemListPtr pending;
270
+ /* All Components of all schemas that
271
+ need to be fixed. */
272
+ xmlHashTablePtr substGroups;
273
+ xmlSchemaRedefPtr redefs;
274
+ xmlSchemaRedefPtr lastRedef;
275
+ };
276
+
277
+ #define XML_SCHEMAS_PARSE_ERROR 1
278
+ #define SCHEMAS_PARSE_OPTIONS XML_PARSE_NOENT
279
+
280
+ struct _xmlSchemaParserCtxt {
281
+ int type;
282
+ void *errCtxt;
283
+ /* user specific error context */
284
+ xmlSchemaValidityErrorFunc error;
285
+ /* the callback in case of errors */
286
+ xmlSchemaValidityWarningFunc warning;
287
+ /* the callback in case of warning */
288
+ int err;
289
+ int nberrors;
290
+ xmlStructuredErrorFunc serror;
291
+
292
+ xmlSchemaConstructionCtxtPtr constructor;
293
+ int ownsConstructor; /* TODO: Move this to parser *flags*. */
294
+
295
+ /* xmlSchemaPtr topschema; */
296
+ /* xmlHashTablePtr namespaces; */
297
+
298
+ xmlSchemaPtr schema;
299
+ /* The main schema in use */
300
+ int counter;
301
+
302
+ const xmlChar *URL;
303
+ xmlDocPtr doc;
304
+ int preserve;
305
+ /* Whether the doc should be freed */
306
+
307
+ const char *buffer;
308
+ int size;
309
+
310
+ /*
311
+ * Used to build complex element content models
312
+ */
313
+ xmlAutomataPtr am;
314
+ xmlAutomataStatePtr start;
315
+ xmlAutomataStatePtr end;
316
+ xmlAutomataStatePtr state;
317
+
318
+ xmlDictPtr dict;
319
+ /* dictionnary for interned string names */
320
+ xmlSchemaTypePtr ctxtType;
321
+ /* The current context simple/complex type */
322
+ int options;
323
+ xmlSchemaValidCtxtPtr vctxt;
324
+ int isS4S;
325
+ int isRedefine;
326
+ int xsiAssemble;
327
+ int stop;
328
+ /* If the parser should stop; i.e. a critical error. */
329
+ const xmlChar *targetNamespace;
330
+ xmlSchemaBucketPtr redefined;
331
+ /* The schema to be redefined. */
332
+
333
+ xmlSchemaRedefPtr redef;
334
+ /* Used for redefinitions. */
335
+ int redefCounter;
336
+ /* Used for redefinitions. */
337
+ xmlSchemaItemListPtr attrProhibs;
338
+ };
339
+
340
+ /**
341
+ * xmlSchemaQNameRef:
342
+ *
343
+ * A component reference item (not a schema component)
344
+ * (Extends xmlSchemaBasicItem)
345
+ */
346
+ typedef struct _xmlSchemaQNameRef xmlSchemaQNameRef;
347
+ typedef xmlSchemaQNameRef *xmlSchemaQNameRefPtr;
348
+ struct _xmlSchemaQNameRef {
349
+ xmlSchemaTypeType type;
350
+ xmlSchemaBasicItemPtr item;
351
+ /* The resolved referenced item. */
352
+ xmlSchemaTypeType itemType;
353
+ const xmlChar *name;
354
+ const xmlChar *targetNamespace;
355
+ xmlNodePtr node;
356
+ };
357
+
358
+ /**
359
+ * xmlSchemaParticle:
360
+ *
361
+ * A particle component.
362
+ * (Extends xmlSchemaTreeItem)
363
+ */
364
+ typedef struct _xmlSchemaParticle xmlSchemaParticle;
365
+ typedef xmlSchemaParticle *xmlSchemaParticlePtr;
366
+ struct _xmlSchemaParticle {
367
+ xmlSchemaTypeType type;
368
+ xmlSchemaAnnotPtr annot;
369
+ xmlSchemaTreeItemPtr next;
370
+ /* next particle */
371
+ xmlSchemaTreeItemPtr children;
372
+ /* the "term" (e.g. a model group,
373
+ a group definition, a XML_SCHEMA_EXTRA_QNAMEREF (if a reference),
374
+ etc.) */
375
+ int minOccurs;
376
+ int maxOccurs;
377
+ xmlNodePtr node;
378
+ };
379
+
380
+ /**
381
+ * xmlSchemaModelGroup:
382
+ *
383
+ * A model group component.
384
+ * (Extends xmlSchemaTreeItem)
385
+ */
386
+ typedef struct _xmlSchemaModelGroup xmlSchemaModelGroup;
387
+ typedef xmlSchemaModelGroup *xmlSchemaModelGroupPtr;
388
+ struct _xmlSchemaModelGroup {
389
+ xmlSchemaTypeType type;
390
+ /* XML_SCHEMA_TYPE_SEQUENCE, XML_SCHEMA_TYPE_CHOICE, XML_SCHEMA_TYPE_ALL */
391
+ xmlSchemaAnnotPtr annot;
392
+ xmlSchemaTreeItemPtr next;
393
+ /* not used */
394
+ xmlSchemaTreeItemPtr children;
395
+ /* first particle (OR "element decl" OR "wildcard") */
396
+ xmlNodePtr node;
397
+ };
398
+
399
+ #define XML_SCHEMA_MODEL_GROUP_DEF_MARKED 1<<0
400
+ #define XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED 1<<1
401
+ /**
402
+ * xmlSchemaModelGroupDef:
403
+ *
404
+ * A model group definition component.
405
+ * (Extends xmlSchemaTreeItem)
406
+ */
407
+ typedef struct _xmlSchemaModelGroupDef xmlSchemaModelGroupDef;
408
+ typedef xmlSchemaModelGroupDef *xmlSchemaModelGroupDefPtr;
409
+ struct _xmlSchemaModelGroupDef {
410
+ xmlSchemaTypeType type;
411
+ /* XML_SCHEMA_TYPE_GROUP */
412
+ xmlSchemaAnnotPtr annot;
413
+ xmlSchemaTreeItemPtr next;
414
+ /* not used */
415
+ xmlSchemaTreeItemPtr children;
416
+ /* the "model group" */
417
+ const xmlChar *name;
418
+ const xmlChar *targetNamespace;
419
+ xmlNodePtr node;
420
+ int flags;
421
+ };
422
+
423
+ typedef struct _xmlSchemaIDC xmlSchemaIDC;
424
+ typedef xmlSchemaIDC *xmlSchemaIDCPtr;
425
+
426
+ /**
427
+ * xmlSchemaIDCSelect:
428
+ *
429
+ * The identity-constraint "field" and "selector" item, holding the
430
+ * XPath expression.
431
+ */
432
+ typedef struct _xmlSchemaIDCSelect xmlSchemaIDCSelect;
433
+ typedef xmlSchemaIDCSelect *xmlSchemaIDCSelectPtr;
434
+ struct _xmlSchemaIDCSelect {
435
+ xmlSchemaIDCSelectPtr next;
436
+ xmlSchemaIDCPtr idc;
437
+ int index;
438
+ /* an index position if significant for IDC key-sequences */
439
+ const xmlChar *xpath;
440
+ /* the XPath expression */
441
+ void *xpathComp; /* the compiled XPath expression */
442
+ };
443
+
444
+ /**
445
+ * xmlSchemaIDC:
446
+ *
447
+ * The identity-constraint definition component.
448
+ * (Extends xmlSchemaAnnotItem)
449
+ */
450
+
451
+ struct _xmlSchemaIDC {
452
+ xmlSchemaTypeType type;
453
+ xmlSchemaAnnotPtr annot;
454
+ xmlSchemaIDCPtr next;
455
+ xmlNodePtr node;
456
+ const xmlChar *name;
457
+ const xmlChar *targetNamespace;
458
+ xmlSchemaIDCSelectPtr selector;
459
+ xmlSchemaIDCSelectPtr fields;
460
+ int nbFields;
461
+ xmlSchemaQNameRefPtr ref;
462
+ };
463
+
464
+ /**
465
+ * xmlSchemaIDCAug:
466
+ *
467
+ * The augmented IDC information used for validation.
468
+ */
469
+ typedef struct _xmlSchemaIDCAug xmlSchemaIDCAug;
470
+ typedef xmlSchemaIDCAug *xmlSchemaIDCAugPtr;
471
+ struct _xmlSchemaIDCAug {
472
+ xmlSchemaIDCAugPtr next;
473
+ /* next in a list */
474
+ xmlSchemaIDCPtr def;
475
+ /* the IDC definition */
476
+ int keyrefDepth; /* the lowest tree level to which IDC
477
+ tables need to be bubbled upwards */
478
+ };
479
+
480
+ /**
481
+ * xmlSchemaPSVIIDCKeySequence:
482
+ *
483
+ * The key sequence of a node table item.
484
+ */
485
+ typedef struct _xmlSchemaPSVIIDCKey xmlSchemaPSVIIDCKey;
486
+ typedef xmlSchemaPSVIIDCKey *xmlSchemaPSVIIDCKeyPtr;
487
+ struct _xmlSchemaPSVIIDCKey {
488
+ xmlSchemaTypePtr type;
489
+ xmlSchemaValPtr val;
490
+ };
491
+
492
+ /**
493
+ * xmlSchemaPSVIIDCNode:
494
+ *
495
+ * The node table item of a node table.
496
+ */
497
+ typedef struct _xmlSchemaPSVIIDCNode xmlSchemaPSVIIDCNode;
498
+ typedef xmlSchemaPSVIIDCNode *xmlSchemaPSVIIDCNodePtr;
499
+ struct _xmlSchemaPSVIIDCNode {
500
+ xmlNodePtr node;
501
+ xmlSchemaPSVIIDCKeyPtr *keys;
502
+ int nodeLine;
503
+ int nodeQNameID;
504
+
505
+ };
506
+
507
+ /**
508
+ * xmlSchemaPSVIIDCBinding:
509
+ *
510
+ * The identity-constraint binding item of the [identity-constraint table].
511
+ */
512
+ typedef struct _xmlSchemaPSVIIDCBinding xmlSchemaPSVIIDCBinding;
513
+ typedef xmlSchemaPSVIIDCBinding *xmlSchemaPSVIIDCBindingPtr;
514
+ struct _xmlSchemaPSVIIDCBinding {
515
+ xmlSchemaPSVIIDCBindingPtr next;
516
+ /* next binding of a specific node */
517
+ xmlSchemaIDCPtr definition;
518
+ /* the IDC definition */
519
+ xmlSchemaPSVIIDCNodePtr *nodeTable;
520
+ /* array of key-sequences */
521
+ int nbNodes;
522
+ /* number of entries in the node table */
523
+ int sizeNodes;
524
+ /* size of the node table */
525
+ xmlSchemaItemListPtr dupls;
526
+ };
527
+
528
+
529
+ #define XPATH_STATE_OBJ_TYPE_IDC_SELECTOR 1
530
+ #define XPATH_STATE_OBJ_TYPE_IDC_FIELD 2
531
+
532
+ #define XPATH_STATE_OBJ_MATCHES -2
533
+ #define XPATH_STATE_OBJ_BLOCKED -3
534
+
535
+ typedef struct _xmlSchemaIDCMatcher xmlSchemaIDCMatcher;
536
+ typedef xmlSchemaIDCMatcher *xmlSchemaIDCMatcherPtr;
537
+
538
+ /**
539
+ * xmlSchemaIDCStateObj:
540
+ *
541
+ * The state object used to evaluate XPath expressions.
542
+ */
543
+ typedef struct _xmlSchemaIDCStateObj xmlSchemaIDCStateObj;
544
+ typedef xmlSchemaIDCStateObj *xmlSchemaIDCStateObjPtr;
545
+ struct _xmlSchemaIDCStateObj {
546
+ int type;
547
+ xmlSchemaIDCStateObjPtr next;
548
+ /* next if in a list */
549
+ int depth;
550
+ /* depth of creation */
551
+ int *history;
552
+ /* list of (depth, state-id) tuples */
553
+ int nbHistory;
554
+ int sizeHistory;
555
+ xmlSchemaIDCMatcherPtr matcher;
556
+ /* the correspondent field/selector
557
+ matcher */
558
+ xmlSchemaIDCSelectPtr sel;
559
+ void *xpathCtxt;
560
+ };
561
+
562
+ #define IDC_MATCHER 0
563
+
564
+ /**
565
+ * xmlSchemaIDCMatcher:
566
+ *
567
+ * Used to evaluate IDC selectors (and fields).
568
+ */
569
+ struct _xmlSchemaIDCMatcher {
570
+ int type;
571
+ int depth;
572
+ /* the tree depth at creation time */
573
+ xmlSchemaIDCMatcherPtr next;
574
+ /* next in the list */
575
+ xmlSchemaIDCMatcherPtr nextCached;
576
+ /* next in the cache list */
577
+ xmlSchemaIDCAugPtr aidc;
578
+ /* the augmented IDC item */
579
+ int idcType;
580
+ xmlSchemaPSVIIDCKeyPtr **keySeqs;
581
+ /* the key-sequences of the target
582
+ elements */
583
+ int sizeKeySeqs;
584
+ xmlSchemaItemListPtr targets; /* list of target-node
585
+ (xmlSchemaPSVIIDCNodePtr) entries */
586
+ };
587
+
588
+ /*
589
+ * Element info flags.
590
+ */
591
+ #define XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES 1<<0
592
+ #define XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES 1<<1
593
+ #define XML_SCHEMA_ELEM_INFO_NILLED 1<<2
594
+ #define XML_SCHEMA_ELEM_INFO_LOCAL_TYPE 1<<3
595
+
596
+ #define XML_SCHEMA_NODE_INFO_VALUE_NEEDED 1<<4
597
+ #define XML_SCHEMA_ELEM_INFO_EMPTY 1<<5
598
+ #define XML_SCHEMA_ELEM_INFO_HAS_CONTENT 1<<6
599
+
600
+ #define XML_SCHEMA_ELEM_INFO_HAS_ELEM_CONTENT 1<<7
601
+ #define XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT 1<<8
602
+ #define XML_SCHEMA_NODE_INFO_ERR_NOT_EXPECTED 1<<9
603
+ #define XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE 1<<10
604
+
605
+ /**
606
+ * xmlSchemaNodeInfo:
607
+ *
608
+ * Holds information of an element node.
609
+ */
610
+ struct _xmlSchemaNodeInfo {
611
+ int nodeType;
612
+ xmlNodePtr node;
613
+ int nodeLine;
614
+ const xmlChar *localName;
615
+ const xmlChar *nsName;
616
+ const xmlChar *value;
617
+ xmlSchemaValPtr val;
618
+ /* the pre-computed value if any */
619
+ xmlSchemaTypePtr typeDef;
620
+ /* the complex/simple type definition if any */
621
+
622
+ int flags;
623
+ /* combination of node info flags */
624
+
625
+ int valNeeded;
626
+ int normVal;
627
+
628
+ xmlSchemaElementPtr decl;
629
+ /* the element/attribute declaration */
630
+ int depth;
631
+ xmlSchemaPSVIIDCBindingPtr idcTable;
632
+ /* the table of PSVI IDC bindings
633
+ for the scope element*/
634
+ xmlSchemaIDCMatcherPtr idcMatchers;
635
+ /* the IDC matchers for the scope
636
+ element */
637
+ xmlRegExecCtxtPtr regexCtxt;
638
+
639
+ const xmlChar **nsBindings;
640
+ /* Namespace bindings on this element */
641
+ int nbNsBindings;
642
+ int sizeNsBindings;
643
+
644
+ int hasKeyrefs;
645
+ int appliedXPath; /* Indicates that an XPath has been applied. */
646
+ };
647
+
648
+ #define XML_SCHEMAS_ATTR_UNKNOWN 1
649
+ #define XML_SCHEMAS_ATTR_ASSESSED 2
650
+ #define XML_SCHEMAS_ATTR_PROHIBITED 3
651
+ #define XML_SCHEMAS_ATTR_ERR_MISSING 4
652
+ #define XML_SCHEMAS_ATTR_INVALID_VALUE 5
653
+ #define XML_SCHEMAS_ATTR_ERR_NO_TYPE 6
654
+ #define XML_SCHEMAS_ATTR_ERR_FIXED_VALUE 7
655
+ #define XML_SCHEMAS_ATTR_DEFAULT 8
656
+ #define XML_SCHEMAS_ATTR_VALIDATE_VALUE 9
657
+ #define XML_SCHEMAS_ATTR_ERR_WILD_STRICT_NO_DECL 10
658
+ #define XML_SCHEMAS_ATTR_HAS_ATTR_USE 11
659
+ #define XML_SCHEMAS_ATTR_HAS_ATTR_DECL 12
660
+ #define XML_SCHEMAS_ATTR_WILD_SKIP 13
661
+ #define XML_SCHEMAS_ATTR_WILD_LAX_NO_DECL 14
662
+ #define XML_SCHEMAS_ATTR_ERR_WILD_DUPLICATE_ID 15
663
+ #define XML_SCHEMAS_ATTR_ERR_WILD_AND_USE_ID 16
664
+ #define XML_SCHEMAS_ATTR_META 17
665
+ /*
666
+ * @metaType values of xmlSchemaAttrInfo.
667
+ */
668
+ #define XML_SCHEMA_ATTR_INFO_META_XSI_TYPE 1
669
+ #define XML_SCHEMA_ATTR_INFO_META_XSI_NIL 2
670
+ #define XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC 3
671
+ #define XML_SCHEMA_ATTR_INFO_META_XSI_NO_NS_SCHEMA_LOC 4
672
+ #define XML_SCHEMA_ATTR_INFO_META_XMLNS 5
673
+
674
+ typedef struct _xmlSchemaAttrInfo xmlSchemaAttrInfo;
675
+ typedef xmlSchemaAttrInfo *xmlSchemaAttrInfoPtr;
676
+ struct _xmlSchemaAttrInfo {
677
+ int nodeType;
678
+ xmlNodePtr node;
679
+ int nodeLine;
680
+ const xmlChar *localName;
681
+ const xmlChar *nsName;
682
+ const xmlChar *value;
683
+ xmlSchemaValPtr val;
684
+ /* the pre-computed value if any */
685
+ xmlSchemaTypePtr typeDef;
686
+ /* the complex/simple type definition if any */
687
+ int flags;
688
+ /* combination of node info flags */
689
+
690
+ xmlSchemaAttributePtr decl;
691
+ /* the attribute declaration */
692
+ xmlSchemaAttributeUsePtr use;
693
+ /* the attribute use */
694
+ int state;
695
+ int metaType;
696
+ const xmlChar *vcValue;
697
+ /* the value constraint value */
698
+ xmlSchemaNodeInfoPtr parent;
699
+ };
700
+
701
+
702
+ #define XML_SCHEMA_VALID_CTXT_FLAG_STREAM 1
703
+ /**
704
+ * xmlSchemaValidCtxt:
705
+ *
706
+ * A Schemas validation context
707
+ */
708
+ struct _xmlSchemaValidCtxt {
709
+ int type;
710
+ void *errCtxt;
711
+ /* user specific data block */
712
+ xmlSchemaValidityErrorFunc error;
713
+ /* the callback in case of errors */
714
+ xmlSchemaValidityWarningFunc warning;
715
+ /* the callback in case of warning */
716
+ xmlStructuredErrorFunc serror;
717
+
718
+ xmlSchemaPtr schema;
719
+ /* The schema in use */
720
+ xmlDocPtr doc;
721
+ xmlParserInputBufferPtr input;
722
+ xmlCharEncoding enc;
723
+ xmlSAXHandlerPtr sax;
724
+ xmlParserCtxtPtr parserCtxt;
725
+ void *user_data;
726
+ /* TODO: What is this for? */
727
+
728
+ int err;
729
+ int nberrors;
730
+
731
+ xmlNodePtr node;
732
+ xmlNodePtr cur;
733
+ /* xmlSchemaTypePtr type; */
734
+
735
+ xmlRegExecCtxtPtr regexp;
736
+ xmlSchemaValPtr value;
737
+
738
+ int valueWS;
739
+ int options;
740
+ xmlNodePtr validationRoot;
741
+ xmlSchemaParserCtxtPtr pctxt;
742
+ int xsiAssemble;
743
+
744
+ int depth;
745
+ xmlSchemaNodeInfoPtr *elemInfos;
746
+ /* array of element informations */
747
+ int sizeElemInfos;
748
+ xmlSchemaNodeInfoPtr inode;
749
+ /* the current element information */
750
+
751
+ xmlSchemaIDCAugPtr aidcs;
752
+ /* a list of augmented IDC informations */
753
+
754
+ xmlSchemaIDCStateObjPtr xpathStates;
755
+ /* first active state object. */
756
+ xmlSchemaIDCStateObjPtr xpathStatePool;
757
+ /* first stored state object. */
758
+ xmlSchemaIDCMatcherPtr idcMatcherCache;
759
+ /* Cache for IDC matcher objects. */
760
+
761
+ xmlSchemaPSVIIDCNodePtr *idcNodes;
762
+ /* list of all IDC node-table entries*/
763
+ int nbIdcNodes;
764
+ int sizeIdcNodes;
765
+
766
+ xmlSchemaPSVIIDCKeyPtr *idcKeys;
767
+ /* list of all IDC node-table entries */
768
+ int nbIdcKeys;
769
+ int sizeIdcKeys;
770
+
771
+ int flags;
772
+
773
+ xmlDictPtr dict;
774
+
775
+ #ifdef LIBXML_READER_ENABLED
776
+ xmlTextReaderPtr reader;
777
+ #endif
778
+
779
+ xmlSchemaAttrInfoPtr *attrInfos;
780
+ int nbAttrInfos;
781
+ int sizeAttrInfos;
782
+
783
+ int skipDepth;
784
+ xmlSchemaItemListPtr nodeQNames;
785
+ int hasKeyrefs;
786
+ int createIDCNodeTables;
787
+ int psviExposeIDCNodeTables;
788
+ };
789
+
790
+ /**
791
+ * xmlSchemaSubstGroup:
792
+ *
793
+ *
794
+ */
795
+ typedef struct _xmlSchemaSubstGroup xmlSchemaSubstGroup;
796
+ typedef xmlSchemaSubstGroup *xmlSchemaSubstGroupPtr;
797
+ struct _xmlSchemaSubstGroup {
798
+ xmlSchemaElementPtr head;
799
+ xmlSchemaItemListPtr members;
800
+ };
801
+
802
+ /*static xmlSchemaQNameRefPtr
803
+ xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt,
804
+ xmlSchemaPtr schema,
805
+ xmlNodePtr node);*/
806
+
807
+
808
+ #endif
809
+