Merge lp:~zorba-coders/zorba/zorba-documentation-merge-proposal into lp:zorba
- zorba-documentation-merge-proposal
- Merge into trunk
Status: | Merged | ||||||||
---|---|---|---|---|---|---|---|---|---|
Merged at revision: | 11644 | ||||||||
Proposed branch: | lp:~zorba-coders/zorba/zorba-documentation-merge-proposal | ||||||||
Merge into: | lp:zorba | ||||||||
Diff against target: |
22696 lines (+7918/-11362) 88 files modified
doc/CMakeLists.txt (+22/-0) doc/c/doxy.config.in (+8/-10) doc/c/manual/indexpage.dox (+19/-3) doc/csharp/manual/indexpage.dox (+14/-13) doc/cxx/manual/indexpage.dox (+58/-2) doc/java/doxy.config.in (+1/-1) doc/java/manual/indexpage.dox (+19/-6) doc/php/manual/indexpage.dox (+18/-8) doc/python/manual/indexpage.dox (+21/-14) doc/ruby/manual/indexpage.dox (+20/-14) doc/xqj/manual/indexpage.dox (+14/-11) doc/zorba/JSONforXQuery.dox (+4/-0) doc/zorba/JSONforXQuery.html (+1/-1) doc/zorba/XQueryforJSON.dox (+4/-0) doc/zorba/XQueryforJSON.html (+1/-1) doc/zorba/build_and_install.dox (+8/-10) doc/zorba/build_configure.dox (+4/-4) doc/zorba/build_macos.dox (+1/-1) doc/zorba/build_prepare.dox (+12/-11) doc/zorba/build_prerequisites.dox (+13/-13) doc/zorba/commandline.dox (+3/-3) doc/zorba/conformance.dox (+147/-179) doc/zorba/conformanceXQFTTS.dox (+5/-8) doc/zorba/conformanceXQUTS.dox (+11/-11) doc/zorba/conformance_XQ10.dox (+1513/-3017) doc/zorba/conformance_XQ30.dox (+1517/-2985) doc/zorba/data_converters.dox (+6/-5) doc/zorba/data_lifecycle.dox (+3/-3) doc/zorba/doxy.config.in (+5/-4) doc/zorba/errors_warnings.dox (+3/-3) doc/zorba/ft_intro.dox (+1/-1) doc/zorba/impl_dep_features.dox (+1/-1) doc/zorba/indexpage.dox.in (+11/-11) doc/zorba/memory_leaks.dox (+2/-2) doc/zorba/modules_top.dox (+7/-7) doc/zorba/overview.dox (+2/-2) doc/zorba/scripting_spec.dox (+4/-0) doc/zorba/scripting_spec.html (+760/-1468) doc/zorba/tut_image.dox (+12/-14) doc/zorba/xml_json.dox (+42/-26) doc/zorba/xqddf.dox (+148/-144) doc/zorba/xqdoc/images/modules.svg (+1692/-1605) doc/zorba/xqdoc/images/modules_new.svg (+1575/-1611) doc/zorba/xqdoc/src/xqdoc-html.xq (+40/-7) doc/zorba/xqdoc/src/zorba_module_dependencies.xqy (+8/-1) modules/atomic/math.xq (+1/-1) modules/atomic/random.xq (+1/-1) modules/atomic/string.xq (+1/-1) modules/com/zorba-xquery/www/modules/datetime.xq (+1/-1) modules/com/zorba-xquery/www/modules/debugger/dbgp-message-handler.xq (+1/-1) modules/com/zorba-xquery/www/modules/fetch.xq (+7/-7) modules/com/zorba-xquery/www/modules/reflection.xq (+1/-1) modules/com/zorba-xquery/www/modules/store/documents/dynamic.xq (+3/-3) modules/com/zorba-xquery/www/modules/store/dynamic/collections/ddl.xq (+3/-3) modules/com/zorba-xquery/www/modules/store/dynamic/collections/dml.xq (+3/-3) modules/com/zorba-xquery/www/modules/store/dynamic/collections/w3c/ddl.xq (+3/-3) modules/com/zorba-xquery/www/modules/store/dynamic/collections/w3c/dml.xq (+3/-3) modules/com/zorba-xquery/www/modules/store/static/collections/ddl.xq (+5/-5) modules/com/zorba-xquery/www/modules/store/static/collections/dml.xq (+5/-5) modules/com/zorba-xquery/www/modules/store/static/indexes/ddl.xq (+5/-5) modules/com/zorba-xquery/www/modules/store/static/indexes/dml.xq (+5/-5) modules/com/zorba-xquery/www/modules/store/static/integrity_constraints/ddl.xq (+5/-5) modules/com/zorba-xquery/www/modules/store/static/integrity_constraints/dml.xq (+5/-5) modules/com/zorba-xquery/www/modules/uri.xq (+5/-5) modules/com/zorba-xquery/www/modules/xqdoc/html.xq (+1/-1) modules/full-text/full-text.xq (+3/-3) modules/http-client/json/http-client.xq (+7/-7) modules/http-client/xml/http-client.xq (+6/-6) modules/item/item.xq (+1/-1) modules/json/json-csv.jq (+1/-1) modules/json/json-xml.xq (+4/-4) modules/org/jsoniq/www/function-library.xq (+4/-7) modules/pregenerated/jsoniq-errors.xq (+1/-0) modules/pregenerated/zorba-errors.xq (+1/-0) modules/pregenerated/zorba-warnings.xq (+1/-0) modules/schema/schema.xq (+1/-1) modules/store/unordered-maps.xq (+1/-0) modules/structured-items/node-position.xq (+1/-1) modules/structured-items/node.xq (+1/-1) modules/structured-items/reference.xq (+3/-3) modules/w3c/pregenerated/xqt-errors.xq (+1/-0) modules/xml/xml.xq (+3/-3) modules/zorba-query/zorba-query.xq (+6/-6) src/compiler/parsetree/parsenode_print_xqdoc_visitor.cpp (+11/-7) src/diagnostics/diagnostic_list_xq.xq (+7/-0) test/rbkt/ExpQueryResults/zorba/xqdoc/basic.xml.res (+3/-2) test/rbkt/ExpQueryResults/zorba/xqdoc/content.xml.res (+3/-2) test/rbkt/Queries/zorba/xqdoc/moduleDocumentation.xq (+4/-2) |
||||||||
To merge this branch: | bzr merge lp:~zorba-coders/zorba/zorba-documentation-merge-proposal | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Sorin Marian Nasoi | Approve | ||
Chris Hillery | Approve | ||
Review via email: mp+186036@code.launchpad.net |
Commit message
- removed all HTML pages from the list of files installed in the 'doc' component
- updated the install target for the C examples from 'doc' to 'c_example'
- delete previous version of the XQDoc documentation
- automatically generate language API's examples
- fixed documentation pages and examples for the Zorba API's
- fixed Doxygen documentation pages
- added support for \htmlonly and \htmlinclude
- fixed the left menu for the Doxygen documentation
Description of the change
https:/
https:/
https:/
https:/
https:/
https:/
- 11617. By sorin.marian.nasoi <email address hidden>
-
- fixed conformance XQDoc pages by using \htmlonly Doxygen tag. Please note that the code inside \htmlonly and \endhtmlonly has to be valid XHTML
- 11618. By sorin.marian.nasoi <email address hidden>
-
- fixed JSONforXQuery and XQueryforJSON by using \htmlinclude Doxygen tag
- 11619. By sorin.marian.nasoi <email address hidden>
-
- corrected DDL spec and added some line breaks in order to improve lisibility
- corrected XQuery Scripting Extension Proposal by using \htmlinclude Doxygen tag - 11620. By sorin.marian.nasoi <email address hidden>
-
- removed line from HTML page
- 11621. By sorin.marian.nasoi <email address hidden>
-
- fixed language API links
Zorba Build Bot (zorba-buildbot) wrote : | # |
Zorba Build Bot (zorba-buildbot) wrote : | # |
Voting criteria failed for the following merge proposals:
https:/
Votes: {'Pending': 1}
Zorba Build Bot (zorba-buildbot) wrote : | # |
Validation queue result for https:/
Stage "CommitZorba" failed.
Check console output at http://
- 11622. By sorin.marian.nasoi <email address hidden>
-
- fixed images tutorial
- 11623. By sorin.marian.nasoi <email address hidden>
-
- updated @project tag for:
- pregenerated modules
- HTTP Client module - 11624. By sorin.marian.nasoi <email address hidden>
-
- updated @project TAG
- 11625. By sorin.marian.nasoi <email address hidden>
-
- merged lp:zorba trunk.
- 11626. By sorin.marian.nasoi <email address hidden>
-
- merged lp:zorba trunk
- 11627. By sorin.marian.nasoi <email address hidden>
-
- fixed the language declaration in XQDoc (XQuery of JSONiq)
- 11628. By sorin.marian.nasoi <email address hidden>
-
- XQDoc Examples as copied in a location that is later on picked up by the new-website branch
- XQDoc Schemas and actual code for the modules is generated as XML and is also picked up by the new-website branch - 11629. By sorin.marian.nasoi <email address hidden>
-
- XQDoc fixes
- 11630. By sorin.marian.nasoi <email address hidden>
-
- merged lp:zorba trunk
Chris Hillery (ceejatec) : | # |
- 11631. By sorin.marian.nasoi <email address hidden>
-
- examples are also added as XML files
- 11632. By sorin.marian.nasoi <email address hidden>
-
- updated @project tag according to zorba.io/modules
- 11633. By sorin.marian.nasoi <email address hidden>
-
- updated @project tags according to zorba.io
- updated code snippets with ACE syntax highlighting
- updated links to Doxygen documentation and to other modules
- updated module dependency graph
Sorin Marian Nasoi (sorin.marian.nasoi) : | # |
Zorba Build Bot (zorba-buildbot) wrote : | # |
Validation queue starting for the following merge proposals:
https:/
https:/
https:/
https:/
https:/
https:/
https:/
Progress dashboard at http://
Zorba Build Bot (zorba-buildbot) wrote : | # |
Validation queue result for https:/
Stage "ZorbaVQ" failed.
Check console output at http://
- 11634. By Chris Hillery
-
Fix compilation error.
- 11635. By Chris Hillery
-
Merge from trunk.
Zorba Build Bot (zorba-buildbot) wrote : | # |
Validation queue starting for the following merge proposals:
https:/
https:/
https:/
https:/
https:/
https:/
https:/
Progress dashboard at http://
Zorba Build Bot (zorba-buildbot) wrote : | # |
Validation queue result for https:/
Stage "TestZorbaUbuntu" failed.
3 tests failed (8550 total tests run).
Check test results at http://
- 11636. By Chris Hillery
-
Fix test failures caused by changes in XQDoc output for query language.
Zorba Build Bot (zorba-buildbot) wrote : | # |
Validation queue starting for the following merge proposals:
https:/
https:/
https:/
https:/
https:/
https:/
https:/
Progress dashboard at http://
Zorba Build Bot (zorba-buildbot) wrote : | # |
Validation queue succeeded - proposal merged!
Preview Diff
1 | === modified file 'doc/CMakeLists.txt' |
2 | --- doc/CMakeLists.txt 2013-07-30 23:42:44 +0000 |
3 | +++ doc/CMakeLists.txt 2013-09-30 21:53:02 +0000 |
4 | @@ -57,6 +57,28 @@ |
5 | FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/c/html) |
6 | FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/code/html) |
7 | |
8 | +# copy all needed images into 'images' folder |
9 | +FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/images) |
10 | +CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/zorba/xquery_jsoniq_venn.png |
11 | + ${CMAKE_CURRENT_BINARY_DIR}/images/xquery_jsoniq_venn.png COPYONLY) |
12 | +CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/zorba/store_concepts.png |
13 | + ${CMAKE_CURRENT_BINARY_DIR}/images/store_concepts.png COPYONLY) |
14 | +CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/zorba/data_lifecycle.png |
15 | + ${CMAKE_CURRENT_BINARY_DIR}/images/data_lifecycle.png COPYONLY) |
16 | +CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/zorba/data-in-out.png |
17 | + ${CMAKE_CURRENT_BINARY_DIR}/images/data-in-out.png COPYONLY) |
18 | +#copy tutorial images |
19 | +CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/zorba/tutorialimages/animated.gif |
20 | + ${CMAKE_CURRENT_BINARY_DIR}/images/animated.gif COPYONLY) |
21 | +CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/zorba/tutorialimages/charcoaled.gif |
22 | + ${CMAKE_CURRENT_BINARY_DIR}/images/charcoaled.gif COPYONLY) |
23 | +CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/zorba/tutorialimages/exif.jpg |
24 | + ${CMAKE_CURRENT_BINARY_DIR}/images/exif.jpg COPYONLY) |
25 | +CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/zorba/tutorialimages/extended.gif |
26 | + ${CMAKE_CURRENT_BINARY_DIR}/images/extended.gif COPYONLY) |
27 | +CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/zorba/tutorialimages/painted.png |
28 | + ${CMAKE_CURRENT_BINARY_DIR}/images/painted.png COPYONLY) |
29 | + |
30 | IF (SWIG_FOUND) |
31 | FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python/html) |
32 | FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/java/html) |
33 | |
34 | === modified file 'doc/c/doxy.config.in' |
35 | --- doc/c/doxy.config.in 2013-07-31 00:34:49 +0000 |
36 | +++ doc/c/doxy.config.in 2013-09-30 21:53:02 +0000 |
37 | @@ -202,7 +202,7 @@ |
38 | # For instance, some of the names that are used will be different. The list |
39 | # of all members will be omitted, etc. |
40 | |
41 | -OPTIMIZE_OUTPUT_FOR_C = YES |
42 | +OPTIMIZE_OUTPUT_FOR_C = NO |
43 | |
44 | # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java |
45 | # sources only. Doxygen will then generate output that is more tailored for |
46 | @@ -631,11 +631,7 @@ |
47 | # directories like "/usr/src/myproject". Separate the files or directories |
48 | # with spaces. |
49 | |
50 | -INPUT = @CMAKE_SOURCE_DIR@/include/zorba/zorbac.h \ |
51 | - @CMAKE_SOURCE_DIR@/include/zorba/error.h \ |
52 | - @CMAKE_SOURCE_DIR@/include/zorba/static_context_consts.h \ |
53 | - @CMAKE_SOURCE_DIR@/include/zorba/options.h \ |
54 | - @CMAKE_CURRENT_SOURCE_DIR@/manual |
55 | +INPUT = @CMAKE_CURRENT_SOURCE_DIR@/manual |
56 | |
57 | # This tag can be used to specify the character encoding of the source files |
58 | # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is |
59 | @@ -653,8 +649,9 @@ |
60 | # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py |
61 | # *.f90 *.f *.for *.vhd *.vhdl |
62 | |
63 | -FILE_PATTERNS = *.h \ |
64 | - *.dox |
65 | +FILE_PATTERNS = *.c \ |
66 | + *.h \ |
67 | + *.dox |
68 | |
69 | # The RECURSIVE tag can be used to turn specify whether or not subdirectories |
70 | # should be searched for input files as well. Possible values are YES and NO. |
71 | @@ -703,7 +700,8 @@ |
72 | # and *.h) to filter out the source-files in the directories. If left |
73 | # blank all files are included. |
74 | |
75 | -EXAMPLE_PATTERNS = *.c |
76 | +EXAMPLE_PATTERNS = *.c \ |
77 | + *.h |
78 | |
79 | # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be |
80 | # searched for input files to be used with the \include or \dontinclude |
81 | @@ -1179,7 +1177,7 @@ |
82 | # typically be disabled. For large projects the javascript based search engine |
83 | # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. |
84 | |
85 | -SEARCHENGINE = NO |
86 | +SEARCHENGINE = YES |
87 | |
88 | # When the SERVER_BASED_SEARCH tag is enabled the search engine will be |
89 | # implemented using a PHP enabled web server instead of at the web client |
90 | |
91 | === modified file 'doc/c/manual/indexpage.dox' |
92 | --- doc/c/manual/indexpage.dox 2013-08-23 11:15:04 +0000 |
93 | +++ doc/c/manual/indexpage.dox 2013-09-30 21:53:02 +0000 |
94 | @@ -23,7 +23,23 @@ |
95 | written in C. |
96 | </ul> |
97 | |
98 | - To start with, this documentation provides a <a class="el" href="examples.html">set of examples</a> that demonstrate |
99 | - some features. |
100 | - */ |
101 | + To start with, this documentation provides a set of examples that demonstrate some features: |
102 | + <ul> |
103 | + <li><a class="el" href="ccontext_8c-example.html">ccontext.c</a> |
104 | + <li><a class="el" href="cerror_8c-example.html">cerror.c</a> |
105 | + <li><a class="el" href="cexternal_functions_8c-example.html">cexternal_functions.c</a> |
106 | + <li><a class="el" href="cparsing_8c-example.html">cparsing.c</a> |
107 | + <li><a class="el" href="csequences_8c-example.html">csequences.c</a> |
108 | + <li><a class="el" href="cserialization_8c-example.html">cserialization.c</a> |
109 | + <li><a class="el" href="csimple_8c-example.html">csimple.c</a> |
110 | + </ul> |
111 | + |
112 | + \example ccontext.c |
113 | + \example cerror.c |
114 | + \example cexternal_functions.c |
115 | + \example cparsing.c |
116 | + \example csequences.c |
117 | + \example cserialization.c |
118 | + \example csimple.c |
119 | +*/ |
120 | |
121 | |
122 | === modified file 'doc/csharp/manual/indexpage.dox' |
123 | --- doc/csharp/manual/indexpage.dox 2012-07-20 21:21:21 +0000 |
124 | +++ doc/csharp/manual/indexpage.dox 2013-09-30 21:53:02 +0000 |
125 | @@ -1,15 +1,16 @@ |
126 | /*! \mainpage C# API Documentation |
127 | |
128 | - Zorba ships with a C# language binding that provides several features in order to prepare and execute queries |
129 | - with Zorba. |
130 | - |
131 | - \section note Note for garbage collected languages |
132 | - Zorba requires that objects must be deleted in a certain order, which Garbage Collectors are not aware of. For that reason, |
133 | - the Iterators created with XQuery.iterator() must be explicitly destroyed with iterator.destroy() before the XQuery object |
134 | - is destroyed. |
135 | - |
136 | - \section note Note for non-C++ language bindings |
137 | - Zorba's current API documentation is generated from the C++ source. The C# language API is derived directly from this. The information contained in this documentation is accurate for C#, although it will look somewhat odd. |
138 | - |
139 | - */ |
140 | - |
141 | + %Zorba ships with a C# language binding that provides several features |
142 | + in order to prepare and execute queries with %Zorba. |
143 | + |
144 | + \section note1 Note for garbage collected languages |
145 | + %Zorba requires that objects must be deleted in a certain order, which Garbage |
146 | + Collectors are not aware of. For that reason, the Iterators created with |
147 | + XQuery.iterator() must be explicitly destroyed with iterator.destroy() before |
148 | + the %XQuery object is destroyed. |
149 | + |
150 | + \section note2 Note for non-C++ language bindings |
151 | + %Zorba's current API documentation is generated from the C++ source. |
152 | + The C# language API is derived directly from this. The information contained |
153 | + in this documentation is accurate for C#, although it will look somewhat odd. |
154 | +*/ |
155 | |
156 | === modified file 'doc/cxx/manual/indexpage.dox' |
157 | --- doc/cxx/manual/indexpage.dox 2013-02-07 17:24:36 +0000 |
158 | +++ doc/cxx/manual/indexpage.dox 2013-09-30 21:53:02 +0000 |
159 | @@ -10,6 +10,62 @@ |
160 | <li>Writing external XQuery functions in C++. |
161 | </ul> |
162 | |
163 | - To start with, this documentation provides a <a class="el" href="examples.html">set of examples</a> that demonstrate all of the above |
164 | - features. |
165 | + \section Examples |
166 | + To start with, this documentation provides a set of examples that demonstrate some features: |
167 | + <ul> |
168 | + <li><a href="simple_8cpp-example.html">simple.cpp</a> |
169 | + <li><a href="sax2_8cpp-example.html">sax2.cpp</a> |
170 | + <li><a href="errors_8cpp-example.html">errors.cpp</a> |
171 | + <li><a href="context_8cpp-example.html">context.cpp</a> |
172 | + <li><a href="serialization_8cpp-example.html">serialization.cpp</a> |
173 | + <li><a href="chaining_8cpp-example.html">chaining.cpp</a> |
174 | + <li><a href="external_functions_8cpp-example.html">external_functions.cpp</a> |
175 | + <li><a href="datamanager_8cpp-example.html">datamanager.cpp</a> |
176 | + <li><a href="uri_resolvers_8cpp-example.html">uri_resolvers.cpp</a> |
177 | + <li><a href="execution_plans_8cpp-example.html">execution_plans.cpp</a> |
178 | + <li><a href="item_handler_8cpp-example.html">item_handler.cpp</a> |
179 | + <li><a href="callback_8cpp-example.html">callback.cpp</a> |
180 | + <li><a href="binary_8cpp-example.html">binary.cpp</a> |
181 | + <li><a href="module_import_check_8cpp-example.html">module_import_check.cpp</a> |
182 | + <li><a href="jsoniq_8cpp-example.html">jsoniq.cpp</a> |
183 | + </ul> |
184 | + |
185 | + \example simple.cpp |
186 | + This is a simple example that demonstrate how to create, compile, and execute |
187 | + queries. |
188 | + |
189 | + \example sax2.cpp |
190 | + An example showing XML serialization that is performed using SAX2. |
191 | + |
192 | + \example errors.cpp |
193 | + This file demonstrates how error management and handling is done in Zorba. |
194 | + |
195 | + \example context.cpp |
196 | + This file demonstrates how the ItemFactory can be used to create new Items and |
197 | + bind the Items to external variables in the dynamic context of a query. |
198 | + |
199 | + \example serialization.cpp |
200 | + This file shows examples of how to serialize query results, for example as XML. |
201 | + |
202 | + \example chaining.cpp |
203 | + Example to show query chaining at work. In this example, we will execute |
204 | + query 1 and chain the results of that query as in input to |
205 | + another query (query 2) by means of an external variable. |
206 | + |
207 | + \example external_functions.cpp |
208 | + This file shows some simple examples of external functions. |
209 | + |
210 | + \example datamanager.cpp |
211 | + This file contains some examples that demonstrate how the XmlDataManager |
212 | + can be used to load files, create collection, etc. |
213 | + |
214 | + \example uri_resolvers.cpp |
215 | + \example execution_plans.cpp |
216 | + \example item_handler.cpp |
217 | + This is a example that demonstrates how one can use item handlers. |
218 | + |
219 | + \example callback.cpp |
220 | + \example binary.cpp |
221 | + \example module_import_check.cpp |
222 | + \example jsoniq.cpp |
223 | */ |
224 | |
225 | === modified file 'doc/java/doxy.config.in' |
226 | --- doc/java/doxy.config.in 2013-07-31 00:34:49 +0000 |
227 | +++ doc/java/doxy.config.in 2013-09-30 21:53:02 +0000 |
228 | @@ -694,7 +694,7 @@ |
229 | # directories that contain example code fragments that are included (see |
230 | # the \include command). |
231 | |
232 | -EXAMPLE_PATH = @CMAKE_CURRENT_BINARY_DIR@/examples |
233 | +EXAMPLE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/examples |
234 | |
235 | # If the value of the EXAMPLE_PATH tag contains directories, you can use the |
236 | # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp |
237 | |
238 | === modified file 'doc/java/manual/indexpage.dox' |
239 | --- doc/java/manual/indexpage.dox 2013-02-07 17:24:36 +0000 |
240 | +++ doc/java/manual/indexpage.dox 2013-09-30 21:53:02 +0000 |
241 | @@ -1,13 +1,26 @@ |
242 | /*! \mainpage Java API Documentation |
243 | |
244 | - Zorba provides two Java language bindings: (1) a language binding generated using SWIG that is similar to the bindings for Ruby or Python and (2) a binding that implements the <a href="http://jcp.org/en/jsr/detail?id=225">XQuery API for Java (XQJ)</a>. |
245 | - |
246 | - Although, the XQJ binding is currently implemented entirely on top of the SWIG binding, we encourage people to only use the XQJ binding. The SWIG generated binding might be deprecated in the future. |
247 | - |
248 | + %Zorba provides two Java language bindings: |
249 | + <ul> |
250 | + <li>a language binding generated using SWIG that is similar to the bindings for Ruby or Python |
251 | + <li>a binding that implements the <a href="http://jcp.org/en/jsr/detail?id=225">XQuery API for Java (XQJ)</a> |
252 | + </ul> |
253 | + |
254 | + Although, the XQJ binding is currently implemented entirely on top of the SWIG |
255 | + binding, we encourage people to only use the XQJ binding. The SWIG generated |
256 | + binding might be deprecated in the future. |
257 | + |
258 | \section note Note for non-C++ language bindings |
259 | - Zorba's current API documentation is generated from the C++ source. The Java language API is derived directly from this. The information contained in this documentation is accurate for Java, although it will look somewhat odd. |
260 | + %Zorba's current API documentation is generated from the C++ source. The Java |
261 | + language API is derived directly from this. The information contained in this |
262 | + documentation is accurate for Java, although it will look somewhat odd. |
263 | + |
264 | + To start with, this is a simple example that demonstrate how to use the SWIG |
265 | + generated binding to create, compile, and execute queries: |
266 | + <ul> |
267 | + <li><a class="el" href="Test_Zorba_8java-example.html">Test_Zorba.java</a> |
268 | + </ul> |
269 | |
270 | \example Test_Zorba.java |
271 | - This is a simple example that demonstrate how to use the SWIG generated binding to create, compile, and execute queries. |
272 | */ |
273 | |
274 | |
275 | === modified file 'doc/php/manual/indexpage.dox' |
276 | --- doc/php/manual/indexpage.dox 2013-02-07 17:24:36 +0000 |
277 | +++ doc/php/manual/indexpage.dox 2013-09-30 21:53:02 +0000 |
278 | @@ -1,16 +1,26 @@ |
279 | /*! \mainpage PHP API Documentation |
280 | |
281 | - Zorba ships with a PHP language binding that provides some basic features in order to prepare and execute queries |
282 | - with Zorba. |
283 | - |
284 | - The <a href="http://www.zorba-xquery.com/html/entry/2011/12/27/PHP_Meets_XQuery">following tutorial</a> provides an overview on how to leverage Zorba into PHP applications. |
285 | - We also provide the following <a class="en" href="examples.html">set of examples</a> that show how the Zorba PHP API can be used. |
286 | + %Zorba ships with a PHP language binding that provides some basic features in |
287 | + order to prepare and execute queries with %Zorba. |
288 | + |
289 | + The <a href="http://www.zorba-xquery.com/html/entry/2011/12/27/PHP_Meets_XQuery">following tutorial</a> |
290 | + provides an overview on how to leverage %Zorba into PHP applications. |
291 | + We also provide the following set of examples that show how the %Zorba PHP API |
292 | + can be used: |
293 | + <ul> |
294 | + <li><a class="el" href="test_8php-example.html">test.php</a> |
295 | + <li><a class="el" href="simple_8php-example.html">simple.php</a> |
296 | + </ul> |
297 | |
298 | \section note Note for non-C++ language bindings |
299 | - Zorba's current API documentation is generated from the C++ source. The PHP language API is derived directly from this. The information contained in this documentation is accurate for PHP, although it will look somewhat odd. |
300 | + %Zorba's current API documentation is generated from the C++ source. The PHP |
301 | + language API is derived directly from this. The information contained in this |
302 | + documentation is accurate for PHP, although it will look somewhat odd. |
303 | |
304 | \example test.php |
305 | - This is a simple example that demonstrate how to use the Zorba XQuery Engine to |
306 | - create, compile, and execute queries. |
307 | + This is a simple example that demonstrate how to use the %Zorba %XQuery Engine |
308 | + to create, compile, and execute queries. |
309 | + |
310 | + \example simple.php |
311 | */ |
312 | |
313 | |
314 | === modified file 'doc/python/manual/indexpage.dox' |
315 | --- doc/python/manual/indexpage.dox 2013-02-07 17:24:36 +0000 |
316 | +++ doc/python/manual/indexpage.dox 2013-09-30 21:53:02 +0000 |
317 | @@ -1,20 +1,27 @@ |
318 | /*! \mainpage Python API Documentation |
319 | |
320 | - Zorba ships with a Python language binding that provides some basic features in order to prepare and execute queries |
321 | - with Zorba. |
322 | - |
323 | - We also provide a <a class="en" href="examples.html">set of examples</a> that show how this language binding can be used. |
324 | - |
325 | - \section note Note for garbage collected languages |
326 | - Zorba requires that objects must be deleted in a certain order, which Garbage Collectors are not aware of. For that reason, |
327 | - the Iterators created with XQuery.iterator() must be explicitly destroyed with iterator.destroy() before the XQuery object |
328 | - is destroyed. |
329 | - |
330 | - \section note Note for non-C++ language bindings |
331 | - Zorba's current API documentation is generated from the C++ source. The Python language API is derived directly from this. The information contained in this documentation is accurate for Python, although it will look somewhat odd. |
332 | + %Zorba ships with a Python language binding that provides some basic features |
333 | + in order to prepare and execute queries with %Zorba. |
334 | + |
335 | + We also provide a set of examples that show how this language binding can |
336 | + be used: |
337 | + <ul> |
338 | + <li><a class="el" href="python_test_8py-example.html">python_test.py</a> |
339 | + </ul> |
340 | + |
341 | + \section note1 Note for garbage collected languages |
342 | + %Zorba requires that objects must be deleted in a certain order, which Garbage |
343 | + Collectors are not aware of. For that reason, the Iterators created with |
344 | + XQuery.iterator() must be explicitly destroyed with iterator.destroy() before |
345 | + the %XQuery object is destroyed. |
346 | + |
347 | + \section note2 Note for non-C++ language bindings |
348 | + %Zorba's current API documentation is generated from the C++ source. The Python |
349 | + language API is derived directly from this. The information contained in this |
350 | + documentation is accurate for Python, although it will look somewhat odd. |
351 | |
352 | \example python_test.py |
353 | - This is a simple example that demonstrate how to use the Zorba XQuery Engine to |
354 | - create, compile, and execute queries. |
355 | + This is a simple example that demonstrate how to use the %Zorba %XQuery Engine |
356 | + to create, compile, and execute queries. |
357 | */ |
358 | |
359 | |
360 | === modified file 'doc/ruby/manual/indexpage.dox' |
361 | --- doc/ruby/manual/indexpage.dox 2013-02-07 17:24:36 +0000 |
362 | +++ doc/ruby/manual/indexpage.dox 2013-09-30 21:53:02 +0000 |
363 | @@ -1,20 +1,26 @@ |
364 | /*! \mainpage Ruby API Documentation |
365 | |
366 | - Zorba ships with a Ruby language binding that provides some basic features in order to prepare and execute queries |
367 | - with Zorba. |
368 | - |
369 | - We also provide a <a class="en" href="examples.html">set of examples</a> that show how this language binding can be used. |
370 | - |
371 | - \section note Note for garbage collected languages |
372 | - Zorba requires that objects must be deleted in a certain order, which Garbage Collectors are not aware of. For that reason, |
373 | - the Iterators created with XQuery.iterator() must be explicitly destroyed with iterator.destroy() before the XQuery object |
374 | - is destroyed. |
375 | - |
376 | - \section note Note for non-C++ language bindings |
377 | - Zorba's current API documentation is generated from the C++ source. The Ruby language API is derived directly from this. The information contained in this documentation is accurate for Ruby, although it will look somewhat odd. |
378 | + %Zorba ships with a Ruby language binding that provides some basic features in |
379 | + order to prepare and execute queries with %Zorba. |
380 | + |
381 | + We also provide some examples that show how this language binding can be used: |
382 | + <ul> |
383 | + <li><a class="el" href="ruby_test_8rb-example.html">ruby_test.rb</a> |
384 | + </ul> |
385 | + |
386 | + \section note1 Note for garbage collected languages |
387 | + %Zorba requires that objects must be deleted in a certain order, which Garbage |
388 | + Collectors are not aware of. For that reason,the Iterators created with |
389 | + XQuery.iterator() must be explicitly destroyed with iterator.destroy() |
390 | + before the %XQuery object is destroyed. |
391 | + |
392 | + \section note2 Note for non-C++ language bindings |
393 | + %Zorba's current API documentation is generated from the C++ source. The Ruby |
394 | + language API is derived directly from this. The information contained in this |
395 | + documentation is accurate for Ruby, although it will look somewhat odd. |
396 | |
397 | \example ruby_test.rb |
398 | - This is a simple example that demonstrate how to use the Zorba XQuery Engine to |
399 | - create, compile, and execute queries. |
400 | + This is a simple example that demonstrate how to use the %Zorba %XQuery |
401 | + Engine to create, compile, and execute queries. |
402 | */ |
403 | |
404 | |
405 | === modified file 'doc/xqj/manual/indexpage.dox' |
406 | --- doc/xqj/manual/indexpage.dox 2012-03-26 23:06:10 +0000 |
407 | +++ doc/xqj/manual/indexpage.dox 2013-09-30 21:53:02 +0000 |
408 | @@ -1,18 +1,21 @@ |
409 | /*! \mainpage XQJ API Documentation |
410 | |
411 | - Zorba ships with a XQJ binding that provides basic features in order to prepare and execute queries |
412 | - with Zorba. |
413 | - |
414 | - For the moment, we provide a <a class="en" href="examples.html">TCK set</a> that show how this language binding can be used. |
415 | - |
416 | + %Zorba ships with a XQJ binding that provides basic features in order to |
417 | + prepare and execute queries with %Zorba. |
418 | + |
419 | + For the moment, we provide a TCK set that show how this language binding can be used: |
420 | + <ul> |
421 | + <li><a class="el" href="Test_Zorba_8java-example.html">Test_Zorba.java</a> |
422 | + </ul> |
423 | + |
424 | \section note Note for garbage collected languages |
425 | - Zorba requires that objects must be deleted in a certain order, which Garbage Collectors are not aware of. For that reason, |
426 | - the Iterators created with XQuery.iterator() must be explicitly deleted with iterator.delete() before the XQuery |
427 | - object is deleted. |
428 | - |
429 | + %Zorba requires that objects must be deleted in a certain order, which Garbage |
430 | + Collectors are not aware of. For that reason, the Iterators created with |
431 | + XQuery.iterator() must be explicitly deleted with iterator.delete() before |
432 | + the %XQuery object is deleted. |
433 | |
434 | \example Test_Zorba.java |
435 | - This is a simple example that demonstrate how to use the Zorba XQuery Engine to |
436 | - create, compile, and execute queries. |
437 | + This is a simple example that demonstrate how to use the %Zorba %XQuery Engine |
438 | + to create, compile, and execute queries. |
439 | */ |
440 | |
441 | |
442 | === added file 'doc/zorba/JSONforXQuery.dox' |
443 | --- doc/zorba/JSONforXQuery.dox 1970-01-01 00:00:00 +0000 |
444 | +++ doc/zorba/JSONforXQuery.dox 2013-09-30 21:53:02 +0000 |
445 | @@ -0,0 +1,4 @@ |
446 | +/** \page JSON_for_XQuery JSONiq for XQuery users tutorial |
447 | + |
448 | +\htmlinclude JSONforXQuery.html |
449 | +*/ |
450 | |
451 | === modified file 'doc/zorba/JSONforXQuery.html' |
452 | --- doc/zorba/JSONforXQuery.html 2013-02-07 17:24:36 +0000 |
453 | +++ doc/zorba/JSONforXQuery.html 2013-09-30 21:53:02 +0000 |
454 | @@ -1,1 +1,1 @@ |
455 | -<html><head><title>JSON for XQuery</title><style type="text/css">@import url('https://themes.googleusercontent.com/fonts/css?kit=lhDjYqiy3mZ0x6ROQEUoUw');ol{margin:0;padding:0}.c9{padding-left:0pt;text-align:justify;margin-left:36pt}.c7{list-style-type:disc;margin:0;padding:0}.c19{max-width:468pt;background-color:#ffffff;padding:72pt 72pt 72pt 72pt}.c20{color:inherit;text-decoration:inherit}.c11{text-indent:-13pt;margin-left:77pt}.c2{font-size:36pt;font-weight:bold}.c21{color:#1155cc;text-decoration:underline}.c16{font-weight:bold}.c3{color:#38761d}.c15{text-indent:120pt}.c22{color:#4a86e8}.c17{text-align:center}.c13{margin-left:49.5pt}.c6{text-align:right}.c10{text-indent:156pt}.c0{font-family:"Consolas"}.c12{text-indent:144pt}.c14{text-align:justify}.c8{text-indent:139.5pt}.c5{margin-left:144pt}.c18{font-style:italic}.c4{height:11pt}.c1{direction:ltr}.title{padding-top:24pt;line-height:1.15;text-align:center;color:#4a86e8;font-size:36pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}.subtitle{padding-top:18pt;line-height:1.15;text-align:left;color:#666666;font-style:italic;font-size:24pt;font-family:"Georgia";padding-bottom:4pt}li{color:#000000;font-size:11pt;font-family:"Arial"}p{color:#000000;font-size:11pt;margin:0;font-family:"Arial"}h1{padding-top:24pt;line-height:1.15;text-align:left;color:#4a86e8;font-size:24pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}h2{padding-top:18pt;line-height:1.15;text-align:left;color:#ff9900;font-size:18pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h3{padding-top:14pt;line-height:1.15;text-align:left;color:#000000;font-size:14pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h4{padding-top:12pt;line-height:1.15;text-align:left;color:#000000;font-size:12pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}h5{padding-top:11pt;line-height:1.15;text-align:left;color:#000000;font-size:11pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}h6{padding-top:10pt;line-height:1.15;text-align:left;color:#000000;font-size:10pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}</style></head><body class="c19"><p class="c17 c1"><span class="c2">JSONiq for XQuery users</span></p><p class="c4 c1 c15"><span></span></p><hr><p class="c1 c17"><span>This tutorial introduces the JSONiq language, which declaratively manipulates JSON data.</span></p><p class="c17 c1"><span>Why don't you go ahead can try the queries of this document on our online demo interface?</span></p><p class="c17 c1"><span> </span><span class="c21 c16"><a class="c20" href="http://www.zorba-xquery.com/html/jsoniq">http://www.zorba-xquery.com/html/jsoniq</a></span></p><hr><p class="c4 c1"><span></span></p><h1 class="c1"><a name="h.f453h84m2u1a"></a><span>JSON</span></h1><p class="c14 c1"><span>As explained on </span><span class="c21"><a class="c20" href="http://www.json.org/">http://www.json.org/</a></span><span>, JSON is a lightweight data-interchange format designed for humans as well as for computers. It supports as values:</span></p><ol class="c7" start="1"><li class="c9 c1"><span>objects (string-to-value map)</span></li><li class="c9 c1"><span>arrays (ordered sequence of values)</span></li><li class="c1 c9"><span>strings</span></li><li class="c9 c1"><span>numbers</span></li><li class="c9 c1"><span>booleans (true, false)</span></li><li class="c9 c1"><span>null</span></li></ol><p class="c4 c1"><span></span></p><p class="c1"><span>JSONiq extends XQuery to query and update JSON data, like XML data.</span></p><h1 class="c1"><a name="h.qtfakecy3fr7"></a><span>Elevator Pitch</span></h1><p class="c14 c1"><span>Here is an appetizer before we start the tutorial from scratch.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">let $stores :=</span></p><p class="c1"><span class="c0">[</span></p><p class="c1"><span class="c0"> { "store number" : 1, "state" : "MA" },</span></p><p class="c1"><span class="c0"> { "store number" : 2, "state" : "MA" },</span></p><p class="c1"><span class="c0"> { "store number" : 3, "state" : "CA" },</span></p><p class="c1"><span class="c0"> { "store number" : 4, "state" : "CA" }</span></p><p class="c1"><span class="c0">]</span></p><p class="c1"><span class="c0">let $sales := [</span></p><p class="c1"><span class="c0"> { "product" : "broiler", "store number" : 1, "quantity" : 20 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 100 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 50 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 3, "quantity" : 50 },</span></p><p class="c1"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 100 },</span></p><p class="c1"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 150 },</span></p><p class="c1"><span class="c0"> { "product" : "socks", "store number" : 1, "quantity" : 500 },</span></p><p class="c1"><span class="c0"> { "product" : "socks", "store number" : 2, "quantity" : 10 },</span></p><p class="c1"><span class="c0"> { "product" : "shirt", "store number" : 3, "quantity" : 10 }</span></p><p class="c1"><span class="c0">]</span></p><p class="c1"><span class="c0">let $join :=</span></p><p class="c1"><span class="c0"> for $store in jn:members($stores), $sale in jn:members($sales)</span></p><p class="c1"><span class="c0"> where $store("store number") = $sale("store number")</span></p><p class="c1"><span class="c0"> return {</span></p><p class="c1"><span class="c0"> "nb" : $store("store number"),</span></p><p class="c1"><span class="c0"> "state" : $store("state"),</span></p><p class="c1"><span class="c0"> "sold" : $sale("product")</span></p><p class="c1"><span class="c0"> }</span></p><p class="c1"><span class="c0">return [$join]</span></p><p class="c5 c1"><span class="c3 c0">[ </span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 1, "state" : "MA", "sold" : "broiler" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 1, "state" : "MA", "sold" : "socks" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 2, "state" : "MA", "sold" : "socks" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 3, "state" : "CA", "sold" : "toaster" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 3, "state" : "CA", "sold" : "shirt" }</span></p><p class="c5 c1"><span class="c3 c0"> ]</span></p><p class="c4 c1"><span></span></p><h1 class="c1"><a name="h.yugk1mszt0re"></a><span>And here you go</span></h1><h2 class="c1"><a name="h.39rm37noeh9g"></a><span>JSONiq types</span></h2><p class="c1"><span>JSONiq maps JSON types to the XQuery data model. Numbers are xs:integer, xs:decimal or xs:double, strings are xs:string, true and false are xs:boolean and null is the unique value of a new atomic type jn:null.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>By default, in JSONiq, for convenience, true, false and null are recognized as literals instead of the classical XQuery path expression semantics (i.e., they would otherwise navigate to XML elements named "true", "false" or "null"). However, this can be deactivated to use the path expression semantics.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>JSONiq also introduces new items: objects and arrays. Objects are sets of key/value pairs. Arrays have members which are values. Values are objects, arrays, XML nodes, functions or atomic items. Note that, in particular, Arrays can nest, unlike sequences.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>The new item types for objects and arrays are object() and array(). json-item() is a supertype of both. structured-item() is a supertype for json-item() and node().</span></p><h2 class="c1"><a name="h.j0wg8654ivtw"></a><span>JSON Constructors</span></h2><p class="c1"><span>JSONiq introduces JSON constructors, in a similar way to XML constructors.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>You can put any expression in a array. The items in the sequence produced by the expression will become members of the array:</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">[ 1 to 10 ]</span></p><p class="c6 c1"><span class="c3 c0">[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]</span></p><p class="c6 c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>Or you can dynamically compute an object:</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">{</span></p><p class="c1"><span class="c0"> "Greeting" : let $d := "Mister Spock"</span></p><p class="c1"><span class="c0"> return concat("Hello, ", $d),</span></p><p class="c1"><span class="c0"> "Farewell" : string-join(("Live", "long", "and", "prosper"),</span></p><p class="c1"><span class="c0"> " ")</span></p><p class="c1"><span class="c0">}</span></p><p class="c4 c1"><span class="c3 c0"></span></p><p class="c6 c1"><span class="c3 c0">{ "Greeting" : "Hello, Mister Spock", "Farewell" : "Live long and prosper" }</span></p><p class="c4 c1"><span class="c3"></span></p><p class="c1"><span>You can also dynamically generate singleton objects:</span></p><p class="c4 c1"><span class="c0"></span></p><p class="c1"><span class="c0">{ concat("Square of ", 2) : 2 * 2 }</span></p><p class="c6 c1"><span class="c3 c0">{ "Square of 2" : 4 }</span></p><p class="c6 c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>and then use the {| |} construct to wrap several of them in a bigger object:</span></p><p class="c4 c1"><span class="c0"></span></p><p class="c1"><span class="c0">{|</span></p><p class="c1"><span class="c0"> for $i in 1 to 10</span></p><p class="c1"><span class="c0"> return { concat("Square of ", $i) : $i * $i }</span></p><p class="c1"><span class="c0">|}</span></p><p class="c5 c1"><span class="c3 c0">{</span></p><p class="c5 c1"><span class="c3 c0">"Square of 1" : 1,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 2" : 4,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 3" : 9,</span></p><p class="c1 c5"><span class="c3 c0">"Square of 4" : 16,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 5" : 25,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 6" : 36,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 7" : 49,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 8" : 64,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 9" : 81,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 10" : 100</span></p><p class="c5 c1"><span class="c3 c0">}</span></p><p class="c4 c1"><span></span></p><h2 class="c1"><a name="h.qe57mgdf5ql"></a><span>JSON as a subset of JSONiq</span></h2><p class="c14 c1"><span>As a rule of thumb, a well-formed JSON document is a JSONiq expression as well. This means that you can copy-and-paste a JSON document into a query. The following are JSONiq queries that are "idempotent" (they just output themselves):</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">{ "pi" : 3.14, "sq2" : 1.4 }</span></p><p class="c6 c1"><span class="c3 c0">{ "pi" : 3.14, "sq2" : 1.4 }</span></p><p class="c1 c4"><span class="c3 c0"></span></p><p class="c1"><span class="c0">[ 2, 3, 5, 7, 11, 13 ]</span></p><p class="c6 c1"><span class="c3 c0">[ 2, 3, 5, 7, 11, 13 ]</span></p><p class="c4 c1"><span class="c0"></span></p><p class="c1"><span class="c0">{</span></p><p class="c1"><span class="c0"> "operations" : [</span></p><p class="c1"><span class="c0"> { "binary" : [ "and", "or"] },</span></p><p class="c1"><span class="c0"> { "unary" : ["not"] }</span></p><p class="c1"><span class="c0"> ],</span></p><p class="c1"><span class="c0"> "bits" : [</span></p><p class="c1"><span class="c0"> 0, 1</span></p><p class="c1"><span class="c0"> ]</span></p><p class="c1"><span class="c0">}</span></p><p class="c12 c1"><span class="c0 c3">{</span></p><p class="c12 c1"><span class="c3 c0"> "operations" : [</span></p><p class="c12 c1"><span class="c3 c0"> { "binary" : [ "and", "or" ] },</span></p><p class="c1 c12"><span class="c3 c0"> { "unary" : [ "not" ] }</span></p><p class="c12 c1"><span class="c3 c0"> ],</span></p><p class="c12 c1"><span class="c3 c0"> "bits" : [</span></p><p class="c12 c1"><span class="c3 c0"> 0, 1</span></p><p class="c12 c1"><span class="c3 c0"> ]</span></p><p class="c12 c1"><span class="c3 c0">}</span></p><p class="c6 c4 c1"><span class="c3 c0"></span></p><p class="c14 c1"><span>This works with objects, arrays (even nested), strings, numbers, booleans, null. </span><span class="c18">The exceptions to this rule (but we are working on it!) are that:</span></p><p class="c14 c1"><span class="c18">(i) empty objects are not recognized</span></p><p class="c14 c1"><span class="c18">(ii) characters escaped with the \ in JSON strings are not recognized, XML character references are recognized instead.</span></p><p class="c4 c1"><span class="c0 c18"></span></p><p class="c14 c1"><span>It also works the other way round: if your query outputs an object or an array, you can directly use it as a JSON document.</span></p><p class="c6 c4 c1"><span class="c3 c0"></span></p><h1 class="c1"><a name="h.dewn8sw3husv"></a><span>JSON Navigation</span></h1><p class="c14 c1"><span>Up to now, you learnt how to compose expressions so as to do some computations and to build objects and arrays. It also works the other way round: if you have some JSON data, you can access it and navigate.</span></p><p class="c10 c4 c1"><span></span></p><p class="c14 c1"><span>All you need to know is: JSONiq views</span></p><ol class="c7" start="1"><li class="c9 c1"><span>an array as an ordered list of values,</span></li><li class="c9 c1"><span>an object as a set of name/value pairs</span></li></ol><h2 class="c14 c1"><a name="h.zcnazhl6374z"></a><span>Objects</span></h2><p class="c14 c1"><span>You can use an object as if it were a function and pass the call an argument of type xs:string. It will return the value associated thereto:</span></p><p class="c10 c4 c1"><span></span></p><p class="c1"><span class="c0">let $person := {</span></p><p class="c1"><span class="c0"> "first name" : "Sarah",</span></p><p class="c1"><span class="c0"> "age" : 13,</span></p><p class="c1"><span class="c0"> "gender" : "female",</span></p><p class="c1"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">return $person("first name")</span></p><p class="c6 c10 c1"><span class="c3 c0">"Sarah"</span></p><p class="c10 c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>You can also ask for all keys in an object:</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">let $person := {</span></p><p class="c1"><span class="c0"> "name" : "Sarah",</span></p><p class="c1"><span class="c0"> "age" : 13,</span></p><p class="c1"><span class="c0"> "gender" : "female",</span></p><p class="c1"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">return { "keys" : [ jn:keys($person)] }</span></p><p class="c10 c4 c1"><span class="c0"></span></p><p class="c6 c1 c11"><span class="c3 c0">{ "keys" : [ "name", "age", "gender", "friends" ] }</span></p><h2 class="c1"><a name="h.30wafxvenhgy"></a><span>Arrays</span></h2><p class="c14 c1"><span>You can use an array as if it were a function and pass the call an argument of type xs:integer. It will return the entry at that position:</span></p><p class="c10 c4 c1"><span></span></p><p class="c1"><span class="c0">let $friends := [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">return $friends(2)</span></p><p class="c6 c10 c1"><span class="c3 c0">Mary</span></p><p class="c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>It is also possible to get the size of an array:</span></p><p class="c4 c1 c10"><span></span></p><p class="c1"><span class="c0">let $person := {</span></p><p class="c1"><span class="c0"> "name" : "Sarah",</span></p><p class="c1"><span class="c0"> "age" : 13,</span></p><p class="c1"><span class="c0"> "gender" : "female",</span></p><p class="c1"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">return { "how many friends" : jn:size($person("friends")) }</span></p><p class="c10 c4 c1"><span class="c0"></span></p><p class="c6 c10 c1"><span class="c3 c0">{ "how many friends" : 3 }</span></p><p class="c10 c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>For convenience, there is a function that returns all elements in an array, as a sequence:</span></p><p class="c10 c4 c1"><span></span></p><p class="c1"><span class="c0">let $person := {</span></p><p class="c1"><span class="c0"> "name" : "Sarah",</span></p><p class="c1"><span class="c0"> "age" : 13,</span></p><p class="c1"><span class="c0"> "gender" : "female",</span></p><p class="c1"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">return jn:members($person("friends"))</span></p><p class="c4 c1"><span class="c0"></span></p><p class="c6 c10 c1"><span class="c3 c0">Jim Mary Jennifer</span></p><h1 class="c1"><a name="h.eb0bxle2oykl"></a><span>Relational Algebra</span></h1><p class="c14 c1"><span>Remember SQL's SELECT FROM WHERE statements? JSONiq inherits selection, projection and join capability from XQuery FLWOR expressions. In order to traverse an array, jn:members() converts it into a sequence which can then be iterated over by a FLWOR expression.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">let $stores :=</span></p><p class="c1"><span class="c0">[</span></p><p class="c1"><span class="c0"> { "store number" : 1, "state" : "MA" },</span></p><p class="c1"><span class="c0"> { "store number" : 2, "state" : "MA" },</span></p><p class="c1"><span class="c0"> { "store number" : 3, "state" : "CA" },</span></p><p class="c1"><span class="c0"> { "store number" : 4, "state" : "CA" }</span></p><p class="c1"><span class="c0">]</span></p><p class="c1"><span class="c0">let $sales := [</span></p><p class="c1"><span class="c0"> { "product" : "broiler", "store number" : 1, "quantity" : 20 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 100 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 50 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 3, "quantity" : 50 },</span></p><p class="c1"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 100 },</span></p><p class="c1"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 150 },</span></p><p class="c1"><span class="c0"> { "product" : "socks", "store number" : 1, "quantity" : 500 },</span></p><p class="c1"><span class="c0"> { "product" : "socks", "store number" : 2, "quantity" : 10 },</span></p><p class="c1"><span class="c0"> { "product" : "shirt", "store number" : 3, "quantity" : 10 }</span></p><p class="c1"><span class="c0">]</span></p><p class="c1"><span class="c0">let $join :=</span></p><p class="c1"><span class="c0"> for $store in jn:members($stores), $sale in jn:members($sales)</span></p><p class="c1"><span class="c0"> where $store("store number") = $sale("store number")</span></p><p class="c1"><span class="c0"> return {</span></p><p class="c1"><span class="c0"> "nb" : $store("store number"),</span></p><p class="c1"><span class="c0"> "state" : $store("state"),</span></p><p class="c1"><span class="c0"> "sold" : $sale("product")</span></p><p class="c1"><span class="c0"> }</span></p><p class="c1"><span class="c0">return [$join]</span></p><p class="c8 c1"><span class="c3 c0">[ </span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 1, "state" : "MA", "sold" : "broiler" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 1, "state" : "MA", "sold" : "socks" },</span></p><p class="c1 c8"><span class="c3 c0">{ "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 2, "state" : "MA", "sold" : "socks" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 3, "state" : "CA", "sold" : "toaster" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 3, "state" : "CA", "sold" : "shirt" }</span></p><p class="c8 c1"><span class="c3 c0"> ]</span></p><h1 class="c1"><a name="h.oii6pvliilhi"></a><span>Access external data</span></h1><p class="c1"><span>Our implementation supports collections of (and indices on) JSON objects or arrays:</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">dml:collection("my:data")</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "Your" }</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "Collection" }</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "of" }</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "JSON" }</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "objects" }</span></p><p class="c4 c1 c6"><span class="c3 c0"></span></p><p class="c1"><span>It is also possible to get JSON content with an HTTP request, or by parsing it from a string. The EXPath http-client module (described in the Zorba documentation) allows you to make HTTP requests, and the jn:parse-json() function allows you to use the body as an object or an array.</span></p><p class="c4 c1"><span class="c3 c0"></span></p><h1 class="c1"><a name="h.fopcxnkoydgt"></a><span>JSON and XML</span></h1><p class="c14 c1"><span>You can use XML and JSON in the same program. An XML node can be a value in an object or array, however, arrays and object may not be children of an XML node - but you can extract atomic values or XML nodes inside objects and arrays to insert them in a new XML node.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">let $data := {</span></p><p class="c1"><span class="c0"> "color" : "blue",</span></p><p class="c1"><span class="c0"> "closed" : true,</span></p><p class="c1"><span class="c0"> "points" : [[10,10], [20,10], [20,20], [10,20]]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">let $stroke := attribute stroke { $data("color") }</span></p><p class="c1"><span class="c0">let $points := attribute points { jn:flatten($data("points")) }</span></p><p class="c1"><span class="c0">return</span></p><p class="c1"><span class="c0"> if ($data("closed")) then</span></p><p class="c1"><span class="c0"> <svg><polygon>{ $stroke, $points }</polygon></svg></span></p><p class="c1"><span class="c0"> else</span></p><p class="c1"><span class="c0"> <svg><polyline>{ $stroke, $points }</polyline></svg></span></p><p class="c4 c1"><span class="c0"></span></p><p class="c13 c6 c1"><span class="c3 c0"><?xml version="1.0" encoding="UTF-8"?></span></p><p class="c6 c1 c13"><span class="c3 c0"><svg><polygon stroke="blue" points="10 10 20 10 20 20 10 20"/></svg></span></p><p class="c4 c1"><span></span></p><h1 class="c1"><a name="h.bm3buqmzhtko"></a><span>I want more</span></h1><p class="c1 c14"><span>JSONiq supports JSON updates by extending the XQuery Update Facility specification, so you can declaratively update your JSON data. JSONiq provides new expressions that produce update primitives on JSON items. The list of updates that is eventually output by your program is then applied to your JSON data.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">copy $people := {</span></p><p class="c1"><span class="c0"> "John" : { "status" : "single" },</span></p><p class="c1"><span class="c0"> "Mary" : { "status" : "single" } }</span></p><p class="c1"><span class="c0">modify (replace json value of $people("John")("status") with "married",</span></p><p class="c1"><span class="c0"> replace json value of $people("Mary")("status") with "married")</span></p><p class="c1"><span class="c0">return $people</span></p><p class="c10 c4 c1"><span class="c0"></span></p><p class="c6 c1"><span class="c3 c0">{ "John" : { "status" : "married" }, "Mary" : { "status" : "married" } }</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>JSONiq works with the XQuery 3.0 standard (switch, typeswitch and try-catch expressions, universal/existential quantifiers, path expressions, filtering expressions, functors, mappings, grouping, windowing will work). The Zorba implementation is also compatible with the proprietary Zorba scripting.</span></p><p class="c4 c1"><span></span></p><p class="c14 c1"><span>The complete JSONiq specification is available on </span><span class="c21"><a class="c20" href="http://jsoniq.org/">http://jsoniq.org/</a></span></p><p class="c4 c1"><span></span></p></body></html> |
456 | \ No newline at end of file |
457 | +<html><head><title>JSON for XQuery</title><style type="text/css">@import url('https://themes.googleusercontent.com/fonts/css?kit=lhDjYqiy3mZ0x6ROQEUoUw');ol{margin:0;padding:0}.c9{padding-left:0pt;text-align:justify;margin-left:36pt}.c7{list-style-type:disc;margin:0;padding:0}.c19{max-width:468pt;background-color:#ffffff;padding:72pt 72pt 72pt 72pt}.c20{color:inherit;text-decoration:inherit}.c11{text-indent:-13pt;margin-left:77pt}.c2{font-size:36pt;font-weight:bold}.c21{color:#1155cc;text-decoration:underline}.c16{font-weight:bold}.c3{color:#38761d}.c15{text-indent:120pt}.c22{color:#4a86e8}.c17{text-align:center}.c13{margin-left:49.5pt}.c6{text-align:right}.c10{text-indent:156pt}.c0{font-family:"Consolas"}.c12{text-indent:144pt}.c14{text-align:justify}.c8{text-indent:139.5pt}.c5{margin-left:144pt}.c18{font-style:italic}.c4{height:11pt}.c1{direction:ltr}.title{padding-top:24pt;line-height:1.15;text-align:center;color:#4a86e8;font-size:36pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}.subtitle{padding-top:18pt;line-height:1.15;text-align:left;color:#666666;font-style:italic;font-size:24pt;font-family:"Georgia";padding-bottom:4pt}li{color:#000000;font-size:11pt;font-family:"Arial"}p{color:#000000;font-size:11pt;margin:0;font-family:"Arial"}h1{padding-top:24pt;line-height:1.15;text-align:left;color:#4a86e8;font-size:24pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}h2{padding-top:18pt;line-height:1.15;text-align:left;color:#ff9900;font-size:18pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h3{padding-top:14pt;line-height:1.15;text-align:left;color:#000000;font-size:14pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h4{padding-top:12pt;line-height:1.15;text-align:left;color:#000000;font-size:12pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}h5{padding-top:11pt;line-height:1.15;text-align:left;color:#000000;font-size:11pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}h6{padding-top:10pt;line-height:1.15;text-align:left;color:#000000;font-size:10pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}</style></head><body class="c19"><p class="c17 c1"><span class="c2">JSONiq for XQuery users</span></p><p class="c4 c1 c15"><span></span></p><p class="c1 c17"><span>This tutorial introduces the JSONiq language, which declaratively manipulates JSON data.</span></p><p class="c17 c1"><span>Why don't you go ahead can try the queries of this document on our online demo interface?</span></p><p class="c17 c1"><span> </span><span class="c21 c16"><a class="c20" href="http://www.zorba-xquery.com/html/jsoniq">http://www.zorba-xquery.com/html/jsoniq</a></span></p><p class="c4 c1"><span></span></p><h1 class="c1"><a name="h.f453h84m2u1a"></a><span>JSON</span></h1><p class="c14 c1"><span>As explained on </span><span class="c21"><a class="c20" href="http://www.json.org/">http://www.json.org/</a></span><span>, JSON is a lightweight data-interchange format designed for humans as well as for computers. It supports as values:</span></p><ol class="c7" start="1"><li class="c9 c1"><span>objects (string-to-value map)</span></li><li class="c9 c1"><span>arrays (ordered sequence of values)</span></li><li class="c1 c9"><span>strings</span></li><li class="c9 c1"><span>numbers</span></li><li class="c9 c1"><span>booleans (true, false)</span></li><li class="c9 c1"><span>null</span></li></ol><p class="c4 c1"><span></span></p><p class="c1"><span>JSONiq extends XQuery to query and update JSON data, like XML data.</span></p><h1 class="c1"><a name="h.qtfakecy3fr7"></a><span>Elevator Pitch</span></h1><p class="c14 c1"><span>Here is an appetizer before we start the tutorial from scratch.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">let $stores :=</span></p><p class="c1"><span class="c0">[</span></p><p class="c1"><span class="c0"> { "store number" : 1, "state" : "MA" },</span></p><p class="c1"><span class="c0"> { "store number" : 2, "state" : "MA" },</span></p><p class="c1"><span class="c0"> { "store number" : 3, "state" : "CA" },</span></p><p class="c1"><span class="c0"> { "store number" : 4, "state" : "CA" }</span></p><p class="c1"><span class="c0">]</span></p><p class="c1"><span class="c0">let $sales := [</span></p><p class="c1"><span class="c0"> { "product" : "broiler", "store number" : 1, "quantity" : 20 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 100 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 50 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 3, "quantity" : 50 },</span></p><p class="c1"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 100 },</span></p><p class="c1"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 150 },</span></p><p class="c1"><span class="c0"> { "product" : "socks", "store number" : 1, "quantity" : 500 },</span></p><p class="c1"><span class="c0"> { "product" : "socks", "store number" : 2, "quantity" : 10 },</span></p><p class="c1"><span class="c0"> { "product" : "shirt", "store number" : 3, "quantity" : 10 }</span></p><p class="c1"><span class="c0">]</span></p><p class="c1"><span class="c0">let $join :=</span></p><p class="c1"><span class="c0"> for $store in jn:members($stores), $sale in jn:members($sales)</span></p><p class="c1"><span class="c0"> where $store("store number") = $sale("store number")</span></p><p class="c1"><span class="c0"> return {</span></p><p class="c1"><span class="c0"> "nb" : $store("store number"),</span></p><p class="c1"><span class="c0"> "state" : $store("state"),</span></p><p class="c1"><span class="c0"> "sold" : $sale("product")</span></p><p class="c1"><span class="c0"> }</span></p><p class="c1"><span class="c0">return [$join]</span></p><p class="c5 c1"><span class="c3 c0">[ </span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 1, "state" : "MA", "sold" : "broiler" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 1, "state" : "MA", "sold" : "socks" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 2, "state" : "MA", "sold" : "socks" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 3, "state" : "CA", "sold" : "toaster" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c5 c1"><span class="c3 c0"> { "nb" : 3, "state" : "CA", "sold" : "shirt" }</span></p><p class="c5 c1"><span class="c3 c0"> ]</span></p><p class="c4 c1"><span></span></p><h1 class="c1"><a name="h.yugk1mszt0re"></a><span>And here you go</span></h1><h2 class="c1"><a name="h.39rm37noeh9g"></a><span>JSONiq types</span></h2><p class="c1"><span>JSONiq maps JSON types to the XQuery data model. Numbers are xs:integer, xs:decimal or xs:double, strings are xs:string, true and false are xs:boolean and null is the unique value of a new atomic type jn:null.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>By default, in JSONiq, for convenience, true, false and null are recognized as literals instead of the classical XQuery path expression semantics (i.e., they would otherwise navigate to XML elements named "true", "false" or "null"). However, this can be deactivated to use the path expression semantics.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>JSONiq also introduces new items: objects and arrays. Objects are sets of key/value pairs. Arrays have members which are values. Values are objects, arrays, XML nodes, functions or atomic items. Note that, in particular, Arrays can nest, unlike sequences.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>The new item types for objects and arrays are object() and array(). json-item() is a supertype of both. structured-item() is a supertype for json-item() and node().</span></p><h2 class="c1"><a name="h.j0wg8654ivtw"></a><span>JSON Constructors</span></h2><p class="c1"><span>JSONiq introduces JSON constructors, in a similar way to XML constructors.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>You can put any expression in a array. The items in the sequence produced by the expression will become members of the array:</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">[ 1 to 10 ]</span></p><p class="c6 c1"><span class="c3 c0">[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]</span></p><p class="c6 c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>Or you can dynamically compute an object:</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">{</span></p><p class="c1"><span class="c0"> "Greeting" : let $d := "Mister Spock"</span></p><p class="c1"><span class="c0"> return concat("Hello, ", $d),</span></p><p class="c1"><span class="c0"> "Farewell" : string-join(("Live", "long", "and", "prosper"),</span></p><p class="c1"><span class="c0"> " ")</span></p><p class="c1"><span class="c0">}</span></p><p class="c4 c1"><span class="c3 c0"></span></p><p class="c6 c1"><span class="c3 c0">{ "Greeting" : "Hello, Mister Spock", "Farewell" : "Live long and prosper" }</span></p><p class="c4 c1"><span class="c3"></span></p><p class="c1"><span>You can also dynamically generate singleton objects:</span></p><p class="c4 c1"><span class="c0"></span></p><p class="c1"><span class="c0">{ concat("Square of ", 2) : 2 * 2 }</span></p><p class="c6 c1"><span class="c3 c0">{ "Square of 2" : 4 }</span></p><p class="c6 c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>and then use the {| |} construct to wrap several of them in a bigger object:</span></p><p class="c4 c1"><span class="c0"></span></p><p class="c1"><span class="c0">{|</span></p><p class="c1"><span class="c0"> for $i in 1 to 10</span></p><p class="c1"><span class="c0"> return { concat("Square of ", $i) : $i * $i }</span></p><p class="c1"><span class="c0">|}</span></p><p class="c5 c1"><span class="c3 c0">{</span></p><p class="c5 c1"><span class="c3 c0">"Square of 1" : 1,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 2" : 4,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 3" : 9,</span></p><p class="c1 c5"><span class="c3 c0">"Square of 4" : 16,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 5" : 25,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 6" : 36,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 7" : 49,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 8" : 64,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 9" : 81,</span></p><p class="c5 c1"><span class="c3 c0">"Square of 10" : 100</span></p><p class="c5 c1"><span class="c3 c0">}</span></p><p class="c4 c1"><span></span></p><h2 class="c1"><a name="h.qe57mgdf5ql"></a><span>JSON as a subset of JSONiq</span></h2><p class="c14 c1"><span>As a rule of thumb, a well-formed JSON document is a JSONiq expression as well. This means that you can copy-and-paste a JSON document into a query. The following are JSONiq queries that are "idempotent" (they just output themselves):</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">{ "pi" : 3.14, "sq2" : 1.4 }</span></p><p class="c6 c1"><span class="c3 c0">{ "pi" : 3.14, "sq2" : 1.4 }</span></p><p class="c1 c4"><span class="c3 c0"></span></p><p class="c1"><span class="c0">[ 2, 3, 5, 7, 11, 13 ]</span></p><p class="c6 c1"><span class="c3 c0">[ 2, 3, 5, 7, 11, 13 ]</span></p><p class="c4 c1"><span class="c0"></span></p><p class="c1"><span class="c0">{</span></p><p class="c1"><span class="c0"> "operations" : [</span></p><p class="c1"><span class="c0"> { "binary" : [ "and", "or"] },</span></p><p class="c1"><span class="c0"> { "unary" : ["not"] }</span></p><p class="c1"><span class="c0"> ],</span></p><p class="c1"><span class="c0"> "bits" : [</span></p><p class="c1"><span class="c0"> 0, 1</span></p><p class="c1"><span class="c0"> ]</span></p><p class="c1"><span class="c0">}</span></p><p class="c12 c1"><span class="c0 c3">{</span></p><p class="c12 c1"><span class="c3 c0"> "operations" : [</span></p><p class="c12 c1"><span class="c3 c0"> { "binary" : [ "and", "or" ] },</span></p><p class="c1 c12"><span class="c3 c0"> { "unary" : [ "not" ] }</span></p><p class="c12 c1"><span class="c3 c0"> ],</span></p><p class="c12 c1"><span class="c3 c0"> "bits" : [</span></p><p class="c12 c1"><span class="c3 c0"> 0, 1</span></p><p class="c12 c1"><span class="c3 c0"> ]</span></p><p class="c12 c1"><span class="c3 c0">}</span></p><p class="c6 c4 c1"><span class="c3 c0"></span></p><p class="c14 c1"><span>This works with objects, arrays (even nested), strings, numbers, booleans, null. </span><span class="c18">The exceptions to this rule (but we are working on it!) are that:</span></p><p class="c14 c1"><span class="c18">(i) empty objects are not recognized</span></p><p class="c14 c1"><span class="c18">(ii) characters escaped with the \ in JSON strings are not recognized, XML character references are recognized instead.</span></p><p class="c4 c1"><span class="c0 c18"></span></p><p class="c14 c1"><span>It also works the other way round: if your query outputs an object or an array, you can directly use it as a JSON document.</span></p><p class="c6 c4 c1"><span class="c3 c0"></span></p><h1 class="c1"><a name="h.dewn8sw3husv"></a><span>JSON Navigation</span></h1><p class="c14 c1"><span>Up to now, you learnt how to compose expressions so as to do some computations and to build objects and arrays. It also works the other way round: if you have some JSON data, you can access it and navigate.</span></p><p class="c10 c4 c1"><span></span></p><p class="c14 c1"><span>All you need to know is: JSONiq views</span></p><ol class="c7" start="1"><li class="c9 c1"><span>an array as an ordered list of values,</span></li><li class="c9 c1"><span>an object as a set of name/value pairs</span></li></ol><h2 class="c14 c1"><a name="h.zcnazhl6374z"></a><span>Objects</span></h2><p class="c14 c1"><span>You can use an object as if it were a function and pass the call an argument of type xs:string. It will return the value associated thereto:</span></p><p class="c10 c4 c1"><span></span></p><p class="c1"><span class="c0">let $person := {</span></p><p class="c1"><span class="c0"> "first name" : "Sarah",</span></p><p class="c1"><span class="c0"> "age" : 13,</span></p><p class="c1"><span class="c0"> "gender" : "female",</span></p><p class="c1"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">return $person("first name")</span></p><p class="c6 c10 c1"><span class="c3 c0">"Sarah"</span></p><p class="c10 c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>You can also ask for all keys in an object:</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">let $person := {</span></p><p class="c1"><span class="c0"> "name" : "Sarah",</span></p><p class="c1"><span class="c0"> "age" : 13,</span></p><p class="c1"><span class="c0"> "gender" : "female",</span></p><p class="c1"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">return { "keys" : [ jn:keys($person)] }</span></p><p class="c10 c4 c1"><span class="c0"></span></p><p class="c6 c1 c11"><span class="c3 c0">{ "keys" : [ "name", "age", "gender", "friends" ] }</span></p><h2 class="c1"><a name="h.30wafxvenhgy"></a><span>Arrays</span></h2><p class="c14 c1"><span>You can use an array as if it were a function and pass the call an argument of type xs:integer. It will return the entry at that position:</span></p><p class="c10 c4 c1"><span></span></p><p class="c1"><span class="c0">let $friends := [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">return $friends(2)</span></p><p class="c6 c10 c1"><span class="c3 c0">Mary</span></p><p class="c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>It is also possible to get the size of an array:</span></p><p class="c4 c1 c10"><span></span></p><p class="c1"><span class="c0">let $person := {</span></p><p class="c1"><span class="c0"> "name" : "Sarah",</span></p><p class="c1"><span class="c0"> "age" : 13,</span></p><p class="c1"><span class="c0"> "gender" : "female",</span></p><p class="c1"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">return { "how many friends" : jn:size($person("friends")) }</span></p><p class="c10 c4 c1"><span class="c0"></span></p><p class="c6 c10 c1"><span class="c3 c0">{ "how many friends" : 3 }</span></p><p class="c10 c4 c1"><span class="c3 c0"></span></p><p class="c1"><span>For convenience, there is a function that returns all elements in an array, as a sequence:</span></p><p class="c10 c4 c1"><span></span></p><p class="c1"><span class="c0">let $person := {</span></p><p class="c1"><span class="c0"> "name" : "Sarah",</span></p><p class="c1"><span class="c0"> "age" : 13,</span></p><p class="c1"><span class="c0"> "gender" : "female",</span></p><p class="c1"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">return jn:members($person("friends"))</span></p><p class="c4 c1"><span class="c0"></span></p><p class="c6 c10 c1"><span class="c3 c0">Jim Mary Jennifer</span></p><h1 class="c1"><a name="h.eb0bxle2oykl"></a><span>Relational Algebra</span></h1><p class="c14 c1"><span>Remember SQL's SELECT FROM WHERE statements? JSONiq inherits selection, projection and join capability from XQuery FLWOR expressions. In order to traverse an array, jn:members() converts it into a sequence which can then be iterated over by a FLWOR expression.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">let $stores :=</span></p><p class="c1"><span class="c0">[</span></p><p class="c1"><span class="c0"> { "store number" : 1, "state" : "MA" },</span></p><p class="c1"><span class="c0"> { "store number" : 2, "state" : "MA" },</span></p><p class="c1"><span class="c0"> { "store number" : 3, "state" : "CA" },</span></p><p class="c1"><span class="c0"> { "store number" : 4, "state" : "CA" }</span></p><p class="c1"><span class="c0">]</span></p><p class="c1"><span class="c0">let $sales := [</span></p><p class="c1"><span class="c0"> { "product" : "broiler", "store number" : 1, "quantity" : 20 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 100 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 50 },</span></p><p class="c1"><span class="c0"> { "product" : "toaster", "store number" : 3, "quantity" : 50 },</span></p><p class="c1"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 100 },</span></p><p class="c1"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 150 },</span></p><p class="c1"><span class="c0"> { "product" : "socks", "store number" : 1, "quantity" : 500 },</span></p><p class="c1"><span class="c0"> { "product" : "socks", "store number" : 2, "quantity" : 10 },</span></p><p class="c1"><span class="c0"> { "product" : "shirt", "store number" : 3, "quantity" : 10 }</span></p><p class="c1"><span class="c0">]</span></p><p class="c1"><span class="c0">let $join :=</span></p><p class="c1"><span class="c0"> for $store in jn:members($stores), $sale in jn:members($sales)</span></p><p class="c1"><span class="c0"> where $store("store number") = $sale("store number")</span></p><p class="c1"><span class="c0"> return {</span></p><p class="c1"><span class="c0"> "nb" : $store("store number"),</span></p><p class="c1"><span class="c0"> "state" : $store("state"),</span></p><p class="c1"><span class="c0"> "sold" : $sale("product")</span></p><p class="c1"><span class="c0"> }</span></p><p class="c1"><span class="c0">return [$join]</span></p><p class="c8 c1"><span class="c3 c0">[ </span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 1, "state" : "MA", "sold" : "broiler" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 1, "state" : "MA", "sold" : "socks" },</span></p><p class="c1 c8"><span class="c3 c0">{ "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 2, "state" : "MA", "sold" : "socks" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 3, "state" : "CA", "sold" : "toaster" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c8 c1"><span class="c3 c0">{ "nb" : 3, "state" : "CA", "sold" : "shirt" }</span></p><p class="c8 c1"><span class="c3 c0"> ]</span></p><h1 class="c1"><a name="h.oii6pvliilhi"></a><span>Access external data</span></h1><p class="c1"><span>Our implementation supports collections of (and indices on) JSON objects or arrays:</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">dml:collection("my:data")</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "Your" }</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "Collection" }</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "of" }</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "JSON" }</span></p><p class="c6 c1"><span class="c3 c0">{ "foo" : "objects" }</span></p><p class="c4 c1 c6"><span class="c3 c0"></span></p><p class="c1"><span>It is also possible to get JSON content with an HTTP request, or by parsing it from a string. The EXPath http-client module (described in the Zorba documentation) allows you to make HTTP requests, and the jn:parse-json() function allows you to use the body as an object or an array.</span></p><p class="c4 c1"><span class="c3 c0"></span></p><h1 class="c1"><a name="h.fopcxnkoydgt"></a><span>JSON and XML</span></h1><p class="c14 c1"><span>You can use XML and JSON in the same program. An XML node can be a value in an object or array, however, arrays and object may not be children of an XML node - but you can extract atomic values or XML nodes inside objects and arrays to insert them in a new XML node.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">let $data := {</span></p><p class="c1"><span class="c0"> "color" : "blue",</span></p><p class="c1"><span class="c0"> "closed" : true,</span></p><p class="c1"><span class="c0"> "points" : [[10,10], [20,10], [20,20], [10,20]]</span></p><p class="c1"><span class="c0">}</span></p><p class="c1"><span class="c0">let $stroke := attribute stroke { $data("color") }</span></p><p class="c1"><span class="c0">let $points := attribute points { jn:flatten($data("points")) }</span></p><p class="c1"><span class="c0">return</span></p><p class="c1"><span class="c0"> if ($data("closed")) then</span></p><p class="c1"><span class="c0"> <svg><polygon>{ $stroke, $points }</polygon></svg></span></p><p class="c1"><span class="c0"> else</span></p><p class="c1"><span class="c0"> <svg><polyline>{ $stroke, $points }</polyline></svg></span></p><p class="c4 c1"><span class="c0"></span></p><p class="c13 c6 c1"><span class="c3 c0"><?xml version="1.0" encoding="UTF-8"?></span></p><p class="c6 c1 c13"><span class="c3 c0"><svg><polygon stroke="blue" points="10 10 20 10 20 20 10 20"/></svg></span></p><p class="c4 c1"><span></span></p><h1 class="c1"><a name="h.bm3buqmzhtko"></a><span>I want more</span></h1><p class="c1 c14"><span>JSONiq supports JSON updates by extending the XQuery Update Facility specification, so you can declaratively update your JSON data. JSONiq provides new expressions that produce update primitives on JSON items. The list of updates that is eventually output by your program is then applied to your JSON data.</span></p><p class="c4 c1"><span></span></p><p class="c1"><span class="c0">copy $people := {</span></p><p class="c1"><span class="c0"> "John" : { "status" : "single" },</span></p><p class="c1"><span class="c0"> "Mary" : { "status" : "single" } }</span></p><p class="c1"><span class="c0">modify (replace json value of $people("John")("status") with "married",</span></p><p class="c1"><span class="c0"> replace json value of $people("Mary")("status") with "married")</span></p><p class="c1"><span class="c0">return $people</span></p><p class="c10 c4 c1"><span class="c0"></span></p><p class="c6 c1"><span class="c3 c0">{ "John" : { "status" : "married" }, "Mary" : { "status" : "married" } }</span></p><p class="c4 c1"><span></span></p><p class="c1"><span>JSONiq works with the XQuery 3.0 standard (switch, typeswitch and try-catch expressions, universal/existential quantifiers, path expressions, filtering expressions, functors, mappings, grouping, windowing will work). The Zorba implementation is also compatible with the proprietary Zorba scripting.</span></p><p class="c4 c1"><span></span></p><p class="c14 c1"><span>The complete JSONiq specification is available on </span><span class="c21"><a class="c20" href="http://jsoniq.org/">http://jsoniq.org/</a></span></p><p class="c4 c1"><span></span></p></body></html> |
458 | \ No newline at end of file |
459 | |
460 | === added file 'doc/zorba/XQueryforJSON.dox' |
461 | --- doc/zorba/XQueryforJSON.dox 1970-01-01 00:00:00 +0000 |
462 | +++ doc/zorba/XQueryforJSON.dox 2013-09-30 21:53:02 +0000 |
463 | @@ -0,0 +1,4 @@ |
464 | +/** \page XQuery_for_JSON JSONiq for JSON users tutorial |
465 | + |
466 | +\htmlinclude XQueryforJSON.html |
467 | +*/ |
468 | |
469 | === modified file 'doc/zorba/XQueryforJSON.html' |
470 | --- doc/zorba/XQueryforJSON.html 2013-02-07 17:24:36 +0000 |
471 | +++ doc/zorba/XQueryforJSON.html 2013-09-30 21:53:02 +0000 |
472 | @@ -1,1 +1,1 @@ |
473 | -<html><head><title>XQuery for JSON</title><style type="text/css">@import url('https://themes.googleusercontent.com/fonts/css?kit=lhDjYqiy3mZ0x6ROQEUoUw');ol{margin:0;padding:0}.c1{height:11pt;text-align:right;direction:ltr}.c3{color:#1155cc;text-decoration:underline;font-weight:bold}.c15{list-style-type:disc;margin:0;padding:0}.c16{max-width:468pt;background-color:#ffffff;padding:72pt 72pt 72pt 72pt}.c7{color:#ff0000;font-style:italic}.c19{text-indent:-13.5pt;margin-left:76.5pt}.c2{direction:ltr;margin-left:144pt}.c13{color:inherit;text-decoration:inherit}.c14{padding-left:0pt;margin-left:36pt}.c20{color:#1155cc;text-decoration:underline}.c17{color:#4a86e8}.c6{text-align:center}.c0{font-family:"Consolas"}.c10{font-style:italic}.c4{direction:ltr}.c9{text-align:justify}.c11{text-align:right}.c5{color:#38761d}.c18{color:#ff9900}.c12{font-weight:bold}.c8{height:11pt}.title{padding-top:24pt;line-height:1.15;text-align:center;color:#4a86e8;font-size:36pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}.subtitle{padding-top:18pt;line-height:1.15;text-align:left;color:#666666;font-style:italic;font-size:24pt;font-family:"Georgia";padding-bottom:4pt}li{color:#000000;font-size:11pt;font-family:"Arial"}p{color:#000000;font-size:11pt;margin:0;font-family:"Arial"}h1{padding-top:24pt;line-height:1.15;text-align:left;color:#4a86e8;font-size:24pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}h2{padding-top:18pt;line-height:1.15;text-align:left;color:#ff9900;font-size:18pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h3{padding-top:14pt;line-height:1.15;text-align:left;color:#000000;font-size:14pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h4{padding-top:12pt;line-height:1.15;text-align:left;color:#000000;font-size:12pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}h5{padding-top:11pt;line-height:1.15;text-align:left;color:#000000;font-size:11pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}h6{padding-top:10pt;line-height:1.15;text-align:left;color:#000000;font-size:10pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}</style></head><body class="c16"><p class="c4 title"><a name="h.ngvhp3svo6iy"></a><span>JSONiq for JSON users</span></p><hr><p class="c6 c4"><span>This tutorial introduces the JSONiq language, which declaratively manipulates JSON data.</span></p><p class="c6 c4"><span>Why don't you go ahead can try the queries of this document on our online demo interface?</span></p><p class="c4 c6"><span> </span><span class="c3"><a class="c13" href="http://www.zorba-xquery.com/html/jsoniq">http://www.zorba-xquery.com/html/jsoniq</a></span></p><hr><p class="c4 c8"><span></span></p><h1 class="c4"><a name="h.f453h84m2u1a"></a><span>JSON</span></h1><p class="c4 c9"><span>As explained on the official Web site </span><span class="c20"><a class="c13" href="http://www.json.org/">http://www.json.org/</a></span><span>, JSON is a lightweight data-interchange format designed for humans as well as for computers. It supports as values:</span></p><ol class="c15" start="1"><li class="c14 c4 c9"><span>objects (string-to-value maps)</span></li><li class="c4 c9 c14"><span>arrays (ordered sequences of values)</span></li><li class="c14 c4 c9"><span>strings</span></li><li class="c14 c4 c9"><span>numbers</span></li><li class="c14 c4 c9"><span>booleans (true, false)</span></li><li class="c14 c4 c9"><span>null</span></li></ol><p class="c4 c8"><span></span></p><p class="c4"><span>JSONiq provides declarative querying and updating capabilities on JSON data.</span></p><h1 class="c4"><a name="h.qtfakecy3fr7"></a><span>Elevator Pitch</span></h1><p class="c4 c9"><span>JSONiq is based on XQuery, which is a W3C standard (like XML and HTML). XQuery is a very powerful declarative language that originally manipulates XML data, but it turns out that it is also a very good fit for manipulating JSON natively.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span>JSONiq, since it extends XQuery, is a very powerful general-purpose declarative programming language. Our experience is that, for the same task, you will probably write about 80% less code compared to imperative languages like JavaScript, Python or Ruby. Additionally, you get the benefits of strong type checking without actually having to write type declarations.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span>Here is an appetizer before we start the tutorial from scratch.</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $stores :=</span></p><p class="c4"><span class="c0">[</span></p><p class="c4"><span class="c0"> { "store number" : 1, "state" : "MA" },</span></p><p class="c4"><span class="c0"> { "store number" : 2, "state" : "MA" },</span></p><p class="c4"><span class="c0"> { "store number" : 3, "state" : "CA" },</span></p><p class="c4"><span class="c0"> { "store number" : 4, "state" : "CA" }</span></p><p class="c4"><span class="c0">]</span></p><p class="c4"><span class="c0">let $sales := [</span></p><p class="c4"><span class="c0"> { "product" : "broiler", "store number" : 1, "quantity" : 20 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 100 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 50 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 3, "quantity" : 50 },</span></p><p class="c4"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 100 },</span></p><p class="c4"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 150 },</span></p><p class="c4"><span class="c0"> { "product" : "socks", "store number" : 1, "quantity" : 500 },</span></p><p class="c4"><span class="c0"> { "product" : "socks", "store number" : 2, "quantity" : 10 },</span></p><p class="c4"><span class="c0"> { "product" : "shirt", "store number" : 3, "quantity" : 10 }</span></p><p class="c4"><span class="c0">]</span></p><p class="c4"><span class="c0">let $join :=</span></p><p class="c4"><span class="c0"> for $store in jn:members($stores), $sale in jn:members($sales)</span></p><p class="c4"><span class="c0"> where $store("store number") = $sale("store number")</span></p><p class="c4"><span class="c0"> return {</span></p><p class="c4"><span class="c0"> "nb" : $store("store number"),</span></p><p class="c4"><span class="c0"> "state" : $store("state"),</span></p><p class="c4"><span class="c0"> "sold" : $sale("product")</span></p><p class="c4"><span class="c0"> }</span></p><p class="c4"><span class="c0">return [$join]</span></p><p class="c2"><span class="c0 c5">[ </span></p><p class="c2"><span class="c0 c5"> { "nb" : 1, "state" : "MA", "sold" : "broiler" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 1, "state" : "MA", "sold" : "socks" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 2, "state" : "MA", "sold" : "socks" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 3, "state" : "CA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 3, "state" : "CA", "sold" : "shirt" }</span></p><p class="c2"><span class="c0 c5"> ]</span></p><p class="c4 c8"><span></span></p><h1 class="c4"><a name="h.yugk1mszt0re"></a><span>And here you go</span></h1><h2 class="c4"><a name="h.4uvhbej4btrt"></a><span>Actually</span><span>, you already knew some JSONiq</span></h2><p class="c4 c9"><span>The first thing you need to know is that, as a rule of thumb, a well-formed JSON document is a JSONiq expression as well.</span></p><p class="c4 c8"><span></span></p><p class="c4 c9"><span>This means that, most of the time, you can copy-and-paste a JSON document into a query. The following are JSONiq queries that are "idempotent" (they just output themselves):</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">{ "pi" : 3.14, "sq2" : 1.4 }</span></p><p class="c4 c11"><span class="c0 c5">{ "pi" : 3.14, "sq2" : 1.4 }</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4"><span class="c0">[ 2, 3, 5, 7, 11, 13 ]</span></p><p class="c4 c11"><span class="c0 c5">[ 2, 3, 5, 7, 11, 13 ]</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">{</span></p><p class="c4"><span class="c0"> "operations" : [</span></p><p class="c4"><span class="c0"> { "binary" : [ "and", "or"] },</span></p><p class="c4"><span class="c0"> { "unary" : ["not"] }</span></p><p class="c4"><span class="c0"> ],</span></p><p class="c4"><span class="c0"> "bits" : [</span></p><p class="c4"><span class="c0"> 0, 1</span></p><p class="c4"><span class="c0"> ]</span></p><p class="c4"><span class="c0">}</span></p><p class="c2"><span class="c0 c5">{</span></p><p class="c2"><span class="c0 c5"> "operations" : [</span></p><p class="c2"><span class="c0 c5"> { "binary" : [ "and", "or" ] },</span></p><p class="c2"><span class="c0 c5"> { "unary" : [ "not" ] }</span></p><p class="c2"><span class="c0 c5"> ],</span></p><p class="c2"><span class="c0 c5"> "bits" : [</span></p><p class="c2"><span class="c0 c5"> 0, 1</span></p><p class="c2"><span class="c0 c5"> ]</span></p><p class="c2"><span class="c0 c5">}</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">[ { "Question" : "Ultimate" }, ["Life", "the universe", "and everything"] ]</span></p><p class="c1"><span class="c0"></span></p><p class="c4 c11"><span class="c0 c5">[ { "Question" : "Ultimate" }, [ "Life", "the universe", "and everything" ] ]</span></p><p class="c1"><span class="c0"></span></p><p class="c4"><span>This works with objects, arrays (even nested), strings, numbers, booleans, null. </span><span class="c10">The exceptions to this rule (but we are working on it!) are that:</span></p><p class="c4 c9"><span class="c10">(i) empty objects are not recognized and must be written {| |}.</span></p><p class="c4 c9"><span class="c10">(ii) characters escaped with the \ in JSON strings are not recognized (XQuery uses another means of escaping characters).</span></p><p class="c4 c8"><span class="c0 c7"></span></p><p class="c4 c9"><span>It also works the other way round: if your query outputs an object or an array, you can use it as a JSON document.</span></p><p class="c4 c8"><span></span></p><p class="c4 c9"><span>JSONiq is a declarative language. This means that you only need to say </span><span class="c10">what</span><span> you want - the compiler will take care of the </span><span class="c10">how</span><span>. In the above queries, you are basically saying: I want to output this JSON content, and here it is.</span></p><h1 class="c4"><a name="h.1gal1zhyffu4"></a><span>JSONiq basics</span></h1><h2 class="c4"><a name="h.ncbxtez2z3rn"></a><span>The real JSONiq Hello, World!</span></h2><p class="c4"><span>Wondering what a hello world program looks like in JSONiq? Here it is:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">"Hello, World!"</span></p><p class="c4 c11"><span class="c0 c5">Hello, World!</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4"><span>Not surprisingly, it outputs the string "Hello, World!".</span></p><h2 class="c4"><a name="h.ifcjheuaxoqc"></a><span>Numbers and arithmetic operations</span></h2><p class="c4 c9"><span>Okay, so, now, you might be thinking: "What is the use of this language if it just outputs what I put in?" Of course, JSONiq can more than that. And still in a declarative way. Here is how it works with numbers:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">2 + 2</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span>will output:</span></p><p class="c4 c11"><span class="c0 c5">4</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>whereas</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">(38 + 2) div 2 + 11 * 2</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span>will output</span></p><p class="c4 c11"><span class="c0 c5">42</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4 c9"><span>(mind the division operator which is the "div" keyword. The slash operator has different semantics).</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>Like JSON, JSONiq works with decimals and doubles:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">6.022e23 * 42</span></p><p class="c4 c11"><span class="c0 c5">2.52924E25</span></p><h2 class="c4"><a name="h.jmbc6c1fqqwx"></a><span>Logical operations</span></h2><p class="c4 c9"><span>JSONiq supports boolean operations.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4"><span class="c0">true and false</span></p><p class="c4 c11"><span class="c0 c5">false</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">(true or false) and (false or true)</span></p><p class="c4 c11"><span class="c0 c5">true</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>The unary not is a function (yes, JSONiq has functions):</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">not(true)</span></p><p class="c4 c11"><span class="c0 c5">false</span></p><h2 class="c4"><a name="h.iq1ixg5ywx0r"></a><span>Strings</span></h2><p class="c4"><span>JSONiq is capable of manipulating strings as well, using functions:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">concat("Hello ", "Captain ", "Kirk")</span></p><p class="c4 c11"><span class="c0 c5">Hello Captain Kirk</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">substring("Mister Spock", 8, 5)</span></p><p class="c4 c11"><span class="c0 c5">Spock</span></p><p class="c1"><span class="c5"></span></p><p class="c4 c9"><span>JSONiq comes up with a rich string function library out of the box, inherited from its base language. These functions are listed </span><span class="c20"><a class="c13" href="http://www.w3.org/TR/xpath-functions-30/#string-functions">here</a></span><span> (actually, you will find many more for numbers, etc.)</span></p><h2 class="c4"><a name="h.rv6w8p4wenfa"></a><span>Sequences</span></h2><p class="c4"><span>Until now, we have only been working with single values (an object, an array, a number, a string, a boolean). JSONiq supports sequences of values. You can build a sequence using commas:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)</span></p><p class="c4 c11"><span class="c5">1 2 3 4 5 6 7 8 9 10</span></p><p class="c4 c8"><span class="c5"></span></p><p class="c4"><span class="c0">1, </span><span class="c0">true</span><span class="c0">, 4.2e1, "Life"</span></p><p class="c4 c11"><span class="c0 c5">1 true 42 Life</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span>The "to" operator is very convenient, too:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">(1 to 100)</span></p><p class="c4 c11"><span class="c5">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20</span></p><p class="c4 c11"><span class="c5">21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40</span></p><p class="c4 c11"><span class="c5">41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60</span></p><p class="c4 c11"><span class="c5">61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80</span></p><p class="c4 c11"><span class="c5">81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>Some functions even work on sequences:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">sum(1 to 100)</span></p><p class="c4 c11"><span class="c0 c5">5050</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">string-join(("These", "are", "some", "words"), "-")</span></p><p class="c4 c11"><span class="c0 c5">These-are-some-words</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">count(10 to 20)</span></p><p class="c4 c11"><span class="c0 c5">11</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4"><span class="c0">avg(1 to 100)</span></p><p class="c4 c11"><span class="c0 c5">50.5</span></p><p class="c4 c8"><span class="c5"></span></p><p class="c4"><span>Unlike arrays, sequences are flat. The sequence (3) is identical to the integer 3, and (1, (2, 3)) is identical to (1, 2, 3).</span></p><h1 class="c4"><a name="h.7x2r8sj1zjwe"></a><span>A bit more in depth</span></h1><h2 class="c4"><a name="h.b6c9zq9um8cu"></a><span>Variables</span></h2><p class="c4"><span>You can bind a sequence of values to a (dollar-prefixed) variable, like so:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $x := "Bearing 3 1 4 Mark 5. "</span></p><p class="c4"><span class="c0">return concat($x, "Engage!")</span></p><p class="c4 c11"><span class="c0 c5">Bearing 3 1 4 Mark 5. Engage!</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c1"><span class="c0"></span></p><p class="c4"><span class="c0">let $x := ("Kirk", "Picard", "Sisko")</span></p><p class="c4"><span class="c0">return string-join($x, " and ")</span></p><p class="c4 c11"><span class="c0 c5">Kirk and Picard and Sisko</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4"><span>You can bind as many variables as you want:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $x := 1</span></p><p class="c4"><span class="c0">let $y := $x * 2</span></p><p class="c4"><span class="c0">let $z := $y + $x</span></p><p class="c4"><span class="c0">return ($x, $y, $z)</span></p><p class="c4 c11"><span class="c0 c5">1 2 3</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>and even reuse the same name to hide formerly declared variables:</span></p><p class="c4"><span class="c0">let $x := 1</span></p><p class="c4"><span class="c0">let $x := $x + 2</span></p><p class="c4"><span class="c0">let $x := $x + 3</span></p><p class="c4"><span class="c0">return $x</span></p><p class="c4 c11"><span class="c0 c5">6</span></p><h2 class="c4"><a name="h.92ak2udyfghp"></a><span>Iteration</span></h2><p class="c4 c9"><span>In a way very similar to let, you can iterate over a sequence of values with the "for" keyword. Instead of binding the entire sequence of the variable, it will bind each value of the sequence in turn to this variable.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span class="c0">for $i in 1 to 10</span></p><p class="c4 c9"><span class="c0">return $i * 2</span></p><p class="c4 c11"><span class="c0 c5">2 4 6 8 10 12 14 16 18 20</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>More interestingly, you can combine fors and lets like so:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">let $sequence := 1 to 10</span></p><p class="c4"><span class="c0">for $value in $sequence</span></p><p class="c4"><span class="c0">let $square := $value * 2</span></p><p class="c4"><span class="c0">return $square</span></p><p class="c4 c11"><span class="c0 c5">2 4 6 8 10 12 14 16 18 20</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>and even filter out some values:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">let $sequence := 1 to 10</span></p><p class="c4"><span class="c0">for $value in $sequence</span></p><p class="c4"><span class="c0">let $square := $value * 2</span></p><p class="c4"><span class="c0">where $square < 10</span></p><p class="c4"><span class="c0">return $square</span></p><p class="c4 c11"><span class="c0 c5">2 4 6 8</span></p><h2 class="c4"><a name="h.5fcoouj7073u"></a><span>Note that you can only iterate over sequences, not arrays. To iterate over an array, you can obtain the sequence of its values with jn:members([1, 2, 3]).</span></h2><h2 class="c4"><a name="h.zdhx60a5duyu"></a><span>Conditions</span></h2><p class="c4"><span>You can make the output depend on a condition with an if-then-else construct:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">for $x in 1 to 10</span></p><p class="c4"><span class="c0">return if ($x < 5) then $x</span></p><p class="c4"><span class="c0"> else -$x</span></p><p class="c4 c11"><span class="c0 c5">1 2 3 4 -5 -6 -7 -8 -9 -10</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>Note that the else clause is required - however, it can be the empty sequence () which is often when you need if only the then clause is relevant to you.</span></p><h2 class="c4"><a name="h.ccs6lkxiixw4"></a><span>Composability of Expressions</span></h2><p class="c4"><span>Now that you know of a couple of elementary JSONiq expressions, you can combine them in more elaborate expressions. For example, you can put any sequence of values in an array:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">[ 1 to 10 ]</span></p><p class="c4 c11"><span class="c0 c5">[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>Or you can dynamically compute the value of object pairs (or their key):</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">{</span></p><p class="c4"><span class="c0"> "Greeting" : (let $d := "Mister Spock"</span></p><p class="c4"><span class="c0"> return concat("Hello, ", $d)),</span></p><p class="c4"><span class="c0"> "Farewell" : string-join(("Live", "long", "and", "prosper"),</span></p><p class="c4"><span class="c0"> " ")</span></p><p class="c4"><span class="c0">}</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4 c11"><span class="c0 c5">{ "Greeting" : "Hello, Mister Spock", "Farewell" : "Live long and prosper" }</span></p><p class="c4 c8"><span class="c5"></span></p><p class="c4"><span>You can dynamically generate object singletons (with a single pair):</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">{ concat("Integer ", 2) : 2 * 2 }</span></p><p class="c4 c11"><span class="c0 c5">{ "Integer 2" : 4 }</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>and then merge lots of them into a new object with the {| |} notation:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">{|</span></p><p class="c4"><span class="c0"> for $i in 1 to 10</span></p><p class="c4"><span class="c0"> return { concat("Square of ", $i) : $i * $i }</span></p><p class="c4"><span class="c0">|}</span></p><p class="c2"><span class="c0 c5">{</span></p><p class="c2"><span class="c0 c5">"Square of 1" : 1,</span></p><p class="c2"><span class="c0 c5">"Square of 2" : 4,</span></p><p class="c2"><span class="c0 c5">"Square of 3" : 9,</span></p><p class="c2"><span class="c0 c5">"Square of 4" : 16,</span></p><p class="c2"><span class="c0 c5">"Square of 5" : 25,</span></p><p class="c2"><span class="c0 c5">"Square of 6" : 36,</span></p><p class="c2"><span class="c0 c5">"Square of 7" : 49,</span></p><p class="c2"><span class="c0 c5">"Square of 8" : 64,</span></p><p class="c2"><span class="c0 c5">"Square of 9" : 81,</span></p><p class="c2"><span class="c0 c5">"Square of 10" : 100</span></p><p class="c2"><span class="c0 c5">}</span></p><h1 class="c4"><a name="h.mjv7kyjurri2"></a><span>JSON Navigation</span></h1><p class="c4 c9"><span>Up to now, you have learnt how to compose expressions so as to do some computations and to build objects and arrays. It also works the other way round: if you have some JSON data, you can access it and navigate.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span>All you need to know is: JSONiq views</span></p><ol class="c15" start="1"><li class="c14 c4 c9"><span>an array as an ordered list of values,</span></li><li class="c14 c4 c9"><span>an object as a set of name/value pairs</span></li></ol><h2 class="c4 c9"><a name="h.xosiyb17dh24"></a><span>Objects</span></h2><p class="c4 c9"><span>You can use an object as if it were a function and pass the call an argument of type xs:string. It will return the value associated thereto:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">let $person := {</span></p><p class="c4"><span class="c0"> "first name" : "Sarah",</span></p><p class="c4"><span class="c0"> "age" : 13,</span></p><p class="c4"><span class="c0"> "gender" : "female",</span></p><p class="c4"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">}</span></p><p class="c4"><span class="c0">return $person("first name")</span></p><p class="c4 c11"><span class="c0 c5">"Sarah"</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>You can also ask for all keys in an object:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $person := {</span></p><p class="c4"><span class="c0"> "name" : "Sarah",</span></p><p class="c4"><span class="c0"> "age" : 13,</span></p><p class="c4"><span class="c0"> "gender" : "female",</span></p><p class="c4"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">}</span></p><p class="c4"><span class="c0">return { "keys" : [ jn:keys($person)] }</span></p><p class="c1 c19"><span class="c0 c5"></span></p><p class="c4 c11 c19"><span class="c0 c5">{ "keys" : [ "name", "age", "gender", "friends" ] }</span></p><h2 class="c4"><a name="h.mrf42gizl3y6"></a><span>Arrays</span></h2><p class="c4 c9"><span>You can use an array as if it were a function and pass the call an argument of type xs:integer. It will return the entry at that position:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">let $friends := [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">return $friends(2)</span></p><p class="c4 c11"><span class="c0 c5">Mary</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>It is also possible to get the size of an array:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $person := {</span></p><p class="c4"><span class="c0"> "name" : "Sarah",</span></p><p class="c4"><span class="c0"> "age" : 13,</span></p><p class="c4"><span class="c0"> "gender" : "female",</span></p><p class="c4"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">}</span></p><p class="c4"><span class="c0">return { "how many friends" : jn:size($person("friends")) }</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4 c11"><span class="c0 c5">{ "how many friends" : 3 }</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>For convenience, there is a function that returns all elements in an array, as a sequence:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $person := {</span></p><p class="c4"><span class="c0"> "name" : "Sarah",</span></p><p class="c4"><span class="c0"> "age" : 13,</span></p><p class="c4"><span class="c0"> "gender" : "female",</span></p><p class="c4"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">}</span></p><p class="c4"><span class="c0">return jn:members($person("friends"))</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4 c11"><span class="c0 c5">Jim Mary Jennifer</span></p><p class="c1"><span class="c5"></span></p><h1 class="c4"><a name="h.eb0bxle2oykl"></a><span>Relational Algebra</span></h1><p class="c4 c9"><span>Do you r</span><span>emember SQL's SELECT FROM WHERE statements? JSONiq inherits selection, projection and join capability from XQuery, too.</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $stores :=</span></p><p class="c4"><span class="c0">[</span></p><p class="c4"><span class="c0"> { "store number" : 1, "state" : "MA" },</span></p><p class="c4"><span class="c0"> { "store number" : 2, "state" : "MA" },</span></p><p class="c4"><span class="c0"> { "store number" : 3, "state" : "CA" },</span></p><p class="c4"><span class="c0"> { "store number" : 4, "state" : "CA" }</span></p><p class="c4"><span class="c0">]</span></p><p class="c4"><span class="c0">let $sales := [</span></p><p class="c4"><span class="c0"> { "product" : "broiler", "store number" : 1, "quantity" : 20 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 100 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 50 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 3, "quantity" : 50 },</span></p><p class="c4"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 100 },</span></p><p class="c4"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 150 },</span></p><p class="c4"><span class="c0"> { "product" : "socks", "store number" : 1, "quantity" : 500 },</span></p><p class="c4"><span class="c0"> { "product" : "socks", "store number" : 2, "quantity" : 10 },</span></p><p class="c4"><span class="c0"> { "product" : "shirt", "store number" : 3, "quantity" : 10 }</span></p><p class="c4"><span class="c0">]</span></p><p class="c4"><span class="c0">let $join :=</span></p><p class="c4"><span class="c0"> for $store in jn:members($stores), $sale in jn:members($sales)</span></p><p class="c4"><span class="c0"> where $store("store number") = $sale("store number")</span></p><p class="c4"><span class="c0"> return {</span></p><p class="c4"><span class="c0"> "nb" : $store("store number"),</span></p><p class="c4"><span class="c0"> "state" : $store("state"),</span></p><p class="c4"><span class="c0"> "sold" : $sale("product")</span></p><p class="c4"><span class="c0"> }</span></p><p class="c4"><span class="c0">return [$join]</span></p><p class="c2"><span class="c0 c5">[ </span></p><p class="c2"><span class="c0 c5">{ "nb" : 1, "state" : "MA", "sold" : "broiler" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 1, "state" : "MA", "sold" : "socks" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 2, "state" : "MA", "sold" : "socks" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 3, "state" : "CA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 3, "state" : "CA", "sold" : "shirt" }</span></p><p class="c2"><span class="c0 c5"> ]</span></p><h1 class="c4"><a name="h.oii6pvliilhi"></a><span>Access external data</span></h1><p class="c4"><span>Our implementation supports collections of (and indices on) JSON objects or arrays:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">dml:collection("my:data")</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "Your" }</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "Collection" }</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "of" }</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "JSON" }</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "objects" }</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>It is also possible to get JSON content with an HTTP request, or by parsing it from a string. The EXPath http-client module (described in the Zorba documentation) allows you to make HTTP requests, and the jn:parse-json() function allows you to use the body as an object or an array.</span></p><h1 class="c4"><a name="h.bm3buqmzhtko"></a><span>I want more</span></h1><p class="c4 c9"><span>JSONiq supports JSON updates. You can declaratively update your JSON data. JSONiq provides updating expressions. The list of updates that is eventually output by your program is then applied to your JSON data.</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">copy $people := {</span></p><p class="c4"><span class="c0"> "John" : { "status" : "single" },</span></p><p class="c4"><span class="c0"> "Mary" : { "status" : "single" } }</span></p><p class="c4"><span class="c0">modify (replace json value of $people("John")("status") with "married",</span></p><p class="c4"><span class="c0"> replace json value of $people("Mary")("status") with "married")</span></p><p class="c4"><span class="c0">return $people</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4 c11"><span class="c0 c5">{ "John" : { "status" : "married" }, "Mary" : { "status" : "married" } }</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4 c9"><span>Other updates are insertion into an object or an array, replacement of a value in an object or an array, deletion in an object or an array, renaming an object pair, appending to an array. This is documented on jsoniq.org.</span></p><h2 class="c4"><a name="h.5itcphr8262b"></a><span>Even more</span></h2><p class="c4"><span>JSONiq can do way more that what is presented here. Here are a couple of highlights:</span></p><p class="c4 c9"><span>- JSONiq is a strongly typed language, but is smart enough to not bother you with types when unnecessary. It potentially supports static typing as well to detect errors before you even execute your program.</span></p><p class="c4"><span>- You can define your own functions and modules.</span></p><p class="c4"><span>- JSONiq provides you with loads of available modules shipped with Zorba.</span></p><p class="c4 c9"><span>- JSONiq has tons of further features such as switch, typeswitch and try-catch expressions, universal/existential quantifiers, path expressions, filtering expressions, functors, mappings, grouping, windowing.</span></p><h2 class="c4"><a name="h.j7oh3cyhem38"></a><span>More is not enough</span></h2><p class="c4 c9"><span>- JSONiq supports XML. Yes: you can manipulate JSON and XML with the same language! JSONiq is actually a superset of XQuery, a W3C standard, and extends its data model to support JSON.</span></p><p class="c4 c9"><span>- JSONiq supports scripting. If you need to write a full-fledged, side-effecting Web application, scripting is for you.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span>The complete JSONiq specification is available on </span><span class="c20"><a class="c13" href="http://jsoniq.org/">http://jsoniq.org/</a></span></p></body></html> |
474 | \ No newline at end of file |
475 | +<html><head><title>XQuery for JSON</title><style type="text/css">@import url('https://themes.googleusercontent.com/fonts/css?kit=lhDjYqiy3mZ0x6ROQEUoUw');ol{margin:0;padding:0}.c1{height:11pt;text-align:right;direction:ltr}.c3{color:#1155cc;text-decoration:underline;font-weight:bold}.c15{list-style-type:disc;margin:0;padding:0}.c16{max-width:468pt;background-color:#ffffff;padding:72pt 72pt 72pt 72pt}.c7{color:#ff0000;font-style:italic}.c19{text-indent:-13.5pt;margin-left:76.5pt}.c2{direction:ltr;margin-left:144pt}.c13{color:inherit;text-decoration:inherit}.c14{padding-left:0pt;margin-left:36pt}.c20{color:#1155cc;text-decoration:underline}.c17{color:#4a86e8}.c6{text-align:center}.c0{font-family:"Consolas"}.c10{font-style:italic}.c4{direction:ltr}.c9{text-align:justify}.c11{text-align:right}.c5{color:#38761d}.c18{color:#ff9900}.c12{font-weight:bold}.c8{height:11pt}.title{padding-top:24pt;line-height:1.15;text-align:center;color:#4a86e8;font-size:36pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}.subtitle{padding-top:18pt;line-height:1.15;text-align:left;color:#666666;font-style:italic;font-size:24pt;font-family:"Georgia";padding-bottom:4pt}li{color:#000000;font-size:11pt;font-family:"Arial"}p{color:#000000;font-size:11pt;margin:0;font-family:"Arial"}h1{padding-top:24pt;line-height:1.15;text-align:left;color:#4a86e8;font-size:24pt;font-family:"Arial";font-weight:bold;padding-bottom:6pt}h2{padding-top:18pt;line-height:1.15;text-align:left;color:#ff9900;font-size:18pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h3{padding-top:14pt;line-height:1.15;text-align:left;color:#000000;font-size:14pt;font-family:"Arial";font-weight:bold;padding-bottom:4pt}h4{padding-top:12pt;line-height:1.15;text-align:left;color:#000000;font-size:12pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}h5{padding-top:11pt;line-height:1.15;text-align:left;color:#000000;font-size:11pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}h6{padding-top:10pt;line-height:1.15;text-align:left;color:#000000;font-size:10pt;font-family:"Arial";font-weight:bold;padding-bottom:2pt}</style></head><body class="c16"><p class="c4 title"><a name="h.ngvhp3svo6iy"></a><span>JSONiq for JSON users</span></p><p class="c6 c4"><span>This tutorial introduces the JSONiq language, which declaratively manipulates JSON data.</span></p><p class="c6 c4"><span>Why don't you go ahead can try the queries of this document on our online demo interface?</span></p><p class="c4 c6"><span> </span><span class="c3"><a class="c13" href="http://zorbawebsite2.my28msec.com/html/demo">http://zorbawebsite2.my28msec.com/html/demo</a></span></p><p class="c4 c8"><span></span></p><h1 class="c4"><a name="h.f453h84m2u1a"></a><span>JSON</span></h1><p class="c4 c9"><span>As explained on the official Web site </span><span class="c20"><a class="c13" href="http://www.json.org/">http://www.json.org/</a></span><span>, JSON is a lightweight data-interchange format designed for humans as well as for computers. It supports as values:</span></p><ol class="c15" start="1"><li class="c14 c4 c9"><span>objects (string-to-value maps)</span></li><li class="c4 c9 c14"><span>arrays (ordered sequences of values)</span></li><li class="c14 c4 c9"><span>strings</span></li><li class="c14 c4 c9"><span>numbers</span></li><li class="c14 c4 c9"><span>booleans (true, false)</span></li><li class="c14 c4 c9"><span>null</span></li></ol><p class="c4 c8"><span></span></p><p class="c4"><span>JSONiq provides declarative querying and updating capabilities on JSON data.</span></p><h1 class="c4"><a name="h.qtfakecy3fr7"></a><span>Elevator Pitch</span></h1><p class="c4 c9"><span>JSONiq is based on XQuery, which is a W3C standard (like XML and HTML). XQuery is a very powerful declarative language that originally manipulates XML data, but it turns out that it is also a very good fit for manipulating JSON natively.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span>JSONiq, since it extends XQuery, is a very powerful general-purpose declarative programming language. Our experience is that, for the same task, you will probably write about 80% less code compared to imperative languages like JavaScript, Python or Ruby. Additionally, you get the benefits of strong type checking without actually having to write type declarations.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span>Here is an appetizer before we start the tutorial from scratch.</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $stores :=</span></p><p class="c4"><span class="c0">[</span></p><p class="c4"><span class="c0"> { "store number" : 1, "state" : "MA" },</span></p><p class="c4"><span class="c0"> { "store number" : 2, "state" : "MA" },</span></p><p class="c4"><span class="c0"> { "store number" : 3, "state" : "CA" },</span></p><p class="c4"><span class="c0"> { "store number" : 4, "state" : "CA" }</span></p><p class="c4"><span class="c0">]</span></p><p class="c4"><span class="c0">let $sales := [</span></p><p class="c4"><span class="c0"> { "product" : "broiler", "store number" : 1, "quantity" : 20 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 100 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 50 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 3, "quantity" : 50 },</span></p><p class="c4"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 100 },</span></p><p class="c4"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 150 },</span></p><p class="c4"><span class="c0"> { "product" : "socks", "store number" : 1, "quantity" : 500 },</span></p><p class="c4"><span class="c0"> { "product" : "socks", "store number" : 2, "quantity" : 10 },</span></p><p class="c4"><span class="c0"> { "product" : "shirt", "store number" : 3, "quantity" : 10 }</span></p><p class="c4"><span class="c0">]</span></p><p class="c4"><span class="c0">let $join :=</span></p><p class="c4"><span class="c0"> for $store in jn:members($stores), $sale in jn:members($sales)</span></p><p class="c4"><span class="c0"> where $store("store number") = $sale("store number")</span></p><p class="c4"><span class="c0"> return {</span></p><p class="c4"><span class="c0"> "nb" : $store("store number"),</span></p><p class="c4"><span class="c0"> "state" : $store("state"),</span></p><p class="c4"><span class="c0"> "sold" : $sale("product")</span></p><p class="c4"><span class="c0"> }</span></p><p class="c4"><span class="c0">return [$join]</span></p><p class="c2"><span class="c0 c5">[ </span></p><p class="c2"><span class="c0 c5"> { "nb" : 1, "state" : "MA", "sold" : "broiler" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 1, "state" : "MA", "sold" : "socks" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 2, "state" : "MA", "sold" : "socks" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 3, "state" : "CA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c2"><span class="c0 c5"> { "nb" : 3, "state" : "CA", "sold" : "shirt" }</span></p><p class="c2"><span class="c0 c5"> ]</span></p><p class="c4 c8"><span></span></p><h1 class="c4"><a name="h.yugk1mszt0re"></a><span>And here you go</span></h1><h2 class="c4"><a name="h.4uvhbej4btrt"></a><span>Actually</span><span>, you already knew some JSONiq</span></h2><p class="c4 c9"><span>The first thing you need to know is that, as a rule of thumb, a well-formed JSON document is a JSONiq expression as well.</span></p><p class="c4 c8"><span></span></p><p class="c4 c9"><span>This means that, most of the time, you can copy-and-paste a JSON document into a query. The following are JSONiq queries that are "idempotent" (they just output themselves):</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">{ "pi" : 3.14, "sq2" : 1.4 }</span></p><p class="c4 c11"><span class="c0 c5">{ "pi" : 3.14, "sq2" : 1.4 }</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4"><span class="c0">[ 2, 3, 5, 7, 11, 13 ]</span></p><p class="c4 c11"><span class="c0 c5">[ 2, 3, 5, 7, 11, 13 ]</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">{</span></p><p class="c4"><span class="c0"> "operations" : [</span></p><p class="c4"><span class="c0"> { "binary" : [ "and", "or"] },</span></p><p class="c4"><span class="c0"> { "unary" : ["not"] }</span></p><p class="c4"><span class="c0"> ],</span></p><p class="c4"><span class="c0"> "bits" : [</span></p><p class="c4"><span class="c0"> 0, 1</span></p><p class="c4"><span class="c0"> ]</span></p><p class="c4"><span class="c0">}</span></p><p class="c2"><span class="c0 c5">{</span></p><p class="c2"><span class="c0 c5"> "operations" : [</span></p><p class="c2"><span class="c0 c5"> { "binary" : [ "and", "or" ] },</span></p><p class="c2"><span class="c0 c5"> { "unary" : [ "not" ] }</span></p><p class="c2"><span class="c0 c5"> ],</span></p><p class="c2"><span class="c0 c5"> "bits" : [</span></p><p class="c2"><span class="c0 c5"> 0, 1</span></p><p class="c2"><span class="c0 c5"> ]</span></p><p class="c2"><span class="c0 c5">}</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">[ { "Question" : "Ultimate" }, ["Life", "the universe", "and everything"] ]</span></p><p class="c1"><span class="c0"></span></p><p class="c4 c11"><span class="c0 c5">[ { "Question" : "Ultimate" }, [ "Life", "the universe", "and everything" ] ]</span></p><p class="c1"><span class="c0"></span></p><p class="c4"><span>This works with objects, arrays (even nested), strings, numbers, booleans, null. </span><span class="c10">The exceptions to this rule (but we are working on it!) are that:</span></p><p class="c4 c9"><span class="c10">(i) empty objects are not recognized and must be written {| |}.</span></p><p class="c4 c9"><span class="c10">(ii) characters escaped with the \ in JSON strings are not recognized (XQuery uses another means of escaping characters).</span></p><p class="c4 c8"><span class="c0 c7"></span></p><p class="c4 c9"><span>It also works the other way round: if your query outputs an object or an array, you can use it as a JSON document.</span></p><p class="c4 c8"><span></span></p><p class="c4 c9"><span>JSONiq is a declarative language. This means that you only need to say </span><span class="c10">what</span><span> you want - the compiler will take care of the </span><span class="c10">how</span><span>. In the above queries, you are basically saying: I want to output this JSON content, and here it is.</span></p><h1 class="c4"><a name="h.1gal1zhyffu4"></a><span>JSONiq basics</span></h1><h2 class="c4"><a name="h.ncbxtez2z3rn"></a><span>The real JSONiq Hello, World!</span></h2><p class="c4"><span>Wondering what a hello world program looks like in JSONiq? Here it is:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">"Hello, World!"</span></p><p class="c4 c11"><span class="c0 c5">Hello, World!</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4"><span>Not surprisingly, it outputs the string "Hello, World!".</span></p><h2 class="c4"><a name="h.ifcjheuaxoqc"></a><span>Numbers and arithmetic operations</span></h2><p class="c4 c9"><span>Okay, so, now, you might be thinking: "What is the use of this language if it just outputs what I put in?" Of course, JSONiq can more than that. And still in a declarative way. Here is how it works with numbers:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">2 + 2</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span>will output:</span></p><p class="c4 c11"><span class="c0 c5">4</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>whereas</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">(38 + 2) div 2 + 11 * 2</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span>will output</span></p><p class="c4 c11"><span class="c0 c5">42</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4 c9"><span>(mind the division operator which is the "div" keyword. The slash operator has different semantics).</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>Like JSON, JSONiq works with decimals and doubles:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">6.022e23 * 42</span></p><p class="c4 c11"><span class="c0 c5">2.52924E25</span></p><h2 class="c4"><a name="h.jmbc6c1fqqwx"></a><span>Logical operations</span></h2><p class="c4 c9"><span>JSONiq supports boolean operations.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4"><span class="c0">true and false</span></p><p class="c4 c11"><span class="c0 c5">false</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">(true or false) and (false or true)</span></p><p class="c4 c11"><span class="c0 c5">true</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>The unary not is a function (yes, JSONiq has functions):</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">not(true)</span></p><p class="c4 c11"><span class="c0 c5">false</span></p><h2 class="c4"><a name="h.iq1ixg5ywx0r"></a><span>Strings</span></h2><p class="c4"><span>JSONiq is capable of manipulating strings as well, using functions:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">concat("Hello ", "Captain ", "Kirk")</span></p><p class="c4 c11"><span class="c0 c5">Hello Captain Kirk</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">substring("Mister Spock", 8, 5)</span></p><p class="c4 c11"><span class="c0 c5">Spock</span></p><p class="c1"><span class="c5"></span></p><p class="c4 c9"><span>JSONiq comes up with a rich string function library out of the box, inherited from its base language. These functions are listed </span><span class="c20"><a class="c13" href="http://www.w3.org/TR/xpath-functions-30/#string-functions">here</a></span><span> (actually, you will find many more for numbers, etc.)</span></p><h2 class="c4"><a name="h.rv6w8p4wenfa"></a><span>Sequences</span></h2><p class="c4"><span>Until now, we have only been working with single values (an object, an array, a number, a string, a boolean). JSONiq supports sequences of values. You can build a sequence using commas:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)</span></p><p class="c4 c11"><span class="c5">1 2 3 4 5 6 7 8 9 10</span></p><p class="c4 c8"><span class="c5"></span></p><p class="c4"><span class="c0">1, </span><span class="c0">true</span><span class="c0">, 4.2e1, "Life"</span></p><p class="c4 c11"><span class="c0 c5">1 true 42 Life</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span>The "to" operator is very convenient, too:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">(1 to 100)</span></p><p class="c4 c11"><span class="c5">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20</span></p><p class="c4 c11"><span class="c5">21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40</span></p><p class="c4 c11"><span class="c5">41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60</span></p><p class="c4 c11"><span class="c5">61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80</span></p><p class="c4 c11"><span class="c5">81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>Some functions even work on sequences:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">sum(1 to 100)</span></p><p class="c4 c11"><span class="c0 c5">5050</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">string-join(("These", "are", "some", "words"), "-")</span></p><p class="c4 c11"><span class="c0 c5">These-are-some-words</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span class="c0">count(10 to 20)</span></p><p class="c4 c11"><span class="c0 c5">11</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4"><span class="c0">avg(1 to 100)</span></p><p class="c4 c11"><span class="c0 c5">50.5</span></p><p class="c4 c8"><span class="c5"></span></p><p class="c4"><span>Unlike arrays, sequences are flat. The sequence (3) is identical to the integer 3, and (1, (2, 3)) is identical to (1, 2, 3).</span></p><h1 class="c4"><a name="h.7x2r8sj1zjwe"></a><span>A bit more in depth</span></h1><h2 class="c4"><a name="h.b6c9zq9um8cu"></a><span>Variables</span></h2><p class="c4"><span>You can bind a sequence of values to a (dollar-prefixed) variable, like so:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $x := "Bearing 3 1 4 Mark 5. "</span></p><p class="c4"><span class="c0">return concat($x, "Engage!")</span></p><p class="c4 c11"><span class="c0 c5">Bearing 3 1 4 Mark 5. Engage!</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c1"><span class="c0"></span></p><p class="c4"><span class="c0">let $x := ("Kirk", "Picard", "Sisko")</span></p><p class="c4"><span class="c0">return string-join($x, " and ")</span></p><p class="c4 c11"><span class="c0 c5">Kirk and Picard and Sisko</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4"><span>You can bind as many variables as you want:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $x := 1</span></p><p class="c4"><span class="c0">let $y := $x * 2</span></p><p class="c4"><span class="c0">let $z := $y + $x</span></p><p class="c4"><span class="c0">return ($x, $y, $z)</span></p><p class="c4 c11"><span class="c0 c5">1 2 3</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>and even reuse the same name to hide formerly declared variables:</span></p><p class="c4"><span class="c0">let $x := 1</span></p><p class="c4"><span class="c0">let $x := $x + 2</span></p><p class="c4"><span class="c0">let $x := $x + 3</span></p><p class="c4"><span class="c0">return $x</span></p><p class="c4 c11"><span class="c0 c5">6</span></p><h2 class="c4"><a name="h.92ak2udyfghp"></a><span>Iteration</span></h2><p class="c4 c9"><span>In a way very similar to let, you can iterate over a sequence of values with the "for" keyword. Instead of binding the entire sequence of the variable, it will bind each value of the sequence in turn to this variable.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span class="c0">for $i in 1 to 10</span></p><p class="c4 c9"><span class="c0">return $i * 2</span></p><p class="c4 c11"><span class="c0 c5">2 4 6 8 10 12 14 16 18 20</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>More interestingly, you can combine fors and lets like so:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">let $sequence := 1 to 10</span></p><p class="c4"><span class="c0">for $value in $sequence</span></p><p class="c4"><span class="c0">let $square := $value * 2</span></p><p class="c4"><span class="c0">return $square</span></p><p class="c4 c11"><span class="c0 c5">2 4 6 8 10 12 14 16 18 20</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>and even filter out some values:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">let $sequence := 1 to 10</span></p><p class="c4"><span class="c0">for $value in $sequence</span></p><p class="c4"><span class="c0">let $square := $value * 2</span></p><p class="c4"><span class="c0">where $square < 10</span></p><p class="c4"><span class="c0">return $square</span></p><p class="c4 c11"><span class="c0 c5">2 4 6 8</span></p><h2 class="c4"><a name="h.5fcoouj7073u"></a><span>Note that you can only iterate over sequences, not arrays. To iterate over an array, you can obtain the sequence of its values with jn:members([1, 2, 3]).</span></h2><h2 class="c4"><a name="h.zdhx60a5duyu"></a><span>Conditions</span></h2><p class="c4"><span>You can make the output depend on a condition with an if-then-else construct:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">for $x in 1 to 10</span></p><p class="c4"><span class="c0">return if ($x < 5) then $x</span></p><p class="c4"><span class="c0"> else -$x</span></p><p class="c4 c11"><span class="c0 c5">1 2 3 4 -5 -6 -7 -8 -9 -10</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>Note that the else clause is required - however, it can be the empty sequence () which is often when you need if only the then clause is relevant to you.</span></p><h2 class="c4"><a name="h.ccs6lkxiixw4"></a><span>Composability of Expressions</span></h2><p class="c4"><span>Now that you know of a couple of elementary JSONiq expressions, you can combine them in more elaborate expressions. For example, you can put any sequence of values in an array:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">[ 1 to 10 ]</span></p><p class="c4 c11"><span class="c0 c5">[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>Or you can dynamically compute the value of object pairs (or their key):</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">{</span></p><p class="c4"><span class="c0"> "Greeting" : (let $d := "Mister Spock"</span></p><p class="c4"><span class="c0"> return concat("Hello, ", $d)),</span></p><p class="c4"><span class="c0"> "Farewell" : string-join(("Live", "long", "and", "prosper"),</span></p><p class="c4"><span class="c0"> " ")</span></p><p class="c4"><span class="c0">}</span></p><p class="c4 c8"><span class="c0 c5"></span></p><p class="c4 c11"><span class="c0 c5">{ "Greeting" : "Hello, Mister Spock", "Farewell" : "Live long and prosper" }</span></p><p class="c4 c8"><span class="c5"></span></p><p class="c4"><span>You can dynamically generate object singletons (with a single pair):</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">{ concat("Integer ", 2) : 2 * 2 }</span></p><p class="c4 c11"><span class="c0 c5">{ "Integer 2" : 4 }</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>and then merge lots of them into a new object with the {| |} notation:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">{|</span></p><p class="c4"><span class="c0"> for $i in 1 to 10</span></p><p class="c4"><span class="c0"> return { concat("Square of ", $i) : $i * $i }</span></p><p class="c4"><span class="c0">|}</span></p><p class="c2"><span class="c0 c5">{</span></p><p class="c2"><span class="c0 c5">"Square of 1" : 1,</span></p><p class="c2"><span class="c0 c5">"Square of 2" : 4,</span></p><p class="c2"><span class="c0 c5">"Square of 3" : 9,</span></p><p class="c2"><span class="c0 c5">"Square of 4" : 16,</span></p><p class="c2"><span class="c0 c5">"Square of 5" : 25,</span></p><p class="c2"><span class="c0 c5">"Square of 6" : 36,</span></p><p class="c2"><span class="c0 c5">"Square of 7" : 49,</span></p><p class="c2"><span class="c0 c5">"Square of 8" : 64,</span></p><p class="c2"><span class="c0 c5">"Square of 9" : 81,</span></p><p class="c2"><span class="c0 c5">"Square of 10" : 100</span></p><p class="c2"><span class="c0 c5">}</span></p><h1 class="c4"><a name="h.mjv7kyjurri2"></a><span>JSON Navigation</span></h1><p class="c4 c9"><span>Up to now, you have learnt how to compose expressions so as to do some computations and to build objects and arrays. It also works the other way round: if you have some JSON data, you can access it and navigate.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span>All you need to know is: JSONiq views</span></p><ol class="c15" start="1"><li class="c14 c4 c9"><span>an array as an ordered list of values,</span></li><li class="c14 c4 c9"><span>an object as a set of name/value pairs</span></li></ol><h2 class="c4 c9"><a name="h.xosiyb17dh24"></a><span>Objects</span></h2><p class="c4 c9"><span>You can use an object as if it were a function and pass the call an argument of type xs:string. It will return the value associated thereto:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">let $person := {</span></p><p class="c4"><span class="c0"> "first name" : "Sarah",</span></p><p class="c4"><span class="c0"> "age" : 13,</span></p><p class="c4"><span class="c0"> "gender" : "female",</span></p><p class="c4"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">}</span></p><p class="c4"><span class="c0">return $person("first name")</span></p><p class="c4 c11"><span class="c0 c5">"Sarah"</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>You can also ask for all keys in an object:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $person := {</span></p><p class="c4"><span class="c0"> "name" : "Sarah",</span></p><p class="c4"><span class="c0"> "age" : 13,</span></p><p class="c4"><span class="c0"> "gender" : "female",</span></p><p class="c4"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">}</span></p><p class="c4"><span class="c0">return { "keys" : [ jn:keys($person)] }</span></p><p class="c1 c19"><span class="c0 c5"></span></p><p class="c4 c11 c19"><span class="c0 c5">{ "keys" : [ "name", "age", "gender", "friends" ] }</span></p><h2 class="c4"><a name="h.mrf42gizl3y6"></a><span>Arrays</span></h2><p class="c4 c9"><span>You can use an array as if it were a function and pass the call an argument of type xs:integer. It will return the entry at that position:</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4"><span class="c0">let $friends := [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">return $friends(2)</span></p><p class="c4 c11"><span class="c0 c5">Mary</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>It is also possible to get the size of an array:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $person := {</span></p><p class="c4"><span class="c0"> "name" : "Sarah",</span></p><p class="c4"><span class="c0"> "age" : 13,</span></p><p class="c4"><span class="c0"> "gender" : "female",</span></p><p class="c4"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">}</span></p><p class="c4"><span class="c0">return { "how many friends" : jn:size($person("friends")) }</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4 c11"><span class="c0 c5">{ "how many friends" : 3 }</span></p><p class="c4 c8"><span></span></p><p class="c4"><span>For convenience, there is a function that returns all elements in an array, as a sequence:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $person := {</span></p><p class="c4"><span class="c0"> "name" : "Sarah",</span></p><p class="c4"><span class="c0"> "age" : 13,</span></p><p class="c4"><span class="c0"> "gender" : "female",</span></p><p class="c4"><span class="c0"> "friends" : [ "Jim", "Mary", "Jennifer"]</span></p><p class="c4"><span class="c0">}</span></p><p class="c4"><span class="c0">return jn:members($person("friends"))</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4 c11"><span class="c0 c5">Jim Mary Jennifer</span></p><p class="c1"><span class="c5"></span></p><h1 class="c4"><a name="h.eb0bxle2oykl"></a><span>Relational Algebra</span></h1><p class="c4 c9"><span>Do you r</span><span>emember SQL's SELECT FROM WHERE statements? JSONiq inherits selection, projection and join capability from XQuery, too.</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">let $stores :=</span></p><p class="c4"><span class="c0">[</span></p><p class="c4"><span class="c0"> { "store number" : 1, "state" : "MA" },</span></p><p class="c4"><span class="c0"> { "store number" : 2, "state" : "MA" },</span></p><p class="c4"><span class="c0"> { "store number" : 3, "state" : "CA" },</span></p><p class="c4"><span class="c0"> { "store number" : 4, "state" : "CA" }</span></p><p class="c4"><span class="c0">]</span></p><p class="c4"><span class="c0">let $sales := [</span></p><p class="c4"><span class="c0"> { "product" : "broiler", "store number" : 1, "quantity" : 20 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 100 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 2, "quantity" : 50 },</span></p><p class="c4"><span class="c0"> { "product" : "toaster", "store number" : 3, "quantity" : 50 },</span></p><p class="c4"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 100 },</span></p><p class="c4"><span class="c0"> { "product" : "blender", "store number" : 3, "quantity" : 150 },</span></p><p class="c4"><span class="c0"> { "product" : "socks", "store number" : 1, "quantity" : 500 },</span></p><p class="c4"><span class="c0"> { "product" : "socks", "store number" : 2, "quantity" : 10 },</span></p><p class="c4"><span class="c0"> { "product" : "shirt", "store number" : 3, "quantity" : 10 }</span></p><p class="c4"><span class="c0">]</span></p><p class="c4"><span class="c0">let $join :=</span></p><p class="c4"><span class="c0"> for $store in jn:members($stores), $sale in jn:members($sales)</span></p><p class="c4"><span class="c0"> where $store("store number") = $sale("store number")</span></p><p class="c4"><span class="c0"> return {</span></p><p class="c4"><span class="c0"> "nb" : $store("store number"),</span></p><p class="c4"><span class="c0"> "state" : $store("state"),</span></p><p class="c4"><span class="c0"> "sold" : $sale("product")</span></p><p class="c4"><span class="c0"> }</span></p><p class="c4"><span class="c0">return [$join]</span></p><p class="c2"><span class="c0 c5">[ </span></p><p class="c2"><span class="c0 c5">{ "nb" : 1, "state" : "MA", "sold" : "broiler" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 1, "state" : "MA", "sold" : "socks" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 2, "state" : "MA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 2, "state" : "MA", "sold" : "socks" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 3, "state" : "CA", "sold" : "toaster" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 3, "state" : "CA", "sold" : "blender" },</span></p><p class="c2"><span class="c0 c5">{ "nb" : 3, "state" : "CA", "sold" : "shirt" }</span></p><p class="c2"><span class="c0 c5"> ]</span></p><h1 class="c4"><a name="h.oii6pvliilhi"></a><span>Access external data</span></h1><p class="c4"><span>Our implementation supports collections of (and indices on) JSON objects or arrays:</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">dml:collection("my:data")</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "Your" }</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "Collection" }</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "of" }</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "JSON" }</span></p><p class="c4 c11"><span class="c0 c5">{ "foo" : "objects" }</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4"><span>It is also possible to get JSON content with an HTTP request, or by parsing it from a string. The EXPath http-client module (described in the Zorba documentation) allows you to make HTTP requests, and the jn:parse-json() function allows you to use the body as an object or an array.</span></p><h1 class="c4"><a name="h.bm3buqmzhtko"></a><span>I want more</span></h1><p class="c4 c9"><span>JSONiq supports JSON updates. You can declaratively update your JSON data. JSONiq provides updating expressions. The list of updates that is eventually output by your program is then applied to your JSON data.</span></p><p class="c4 c8"><span></span></p><p class="c4"><span class="c0">copy $people := {</span></p><p class="c4"><span class="c0"> "John" : { "status" : "single" },</span></p><p class="c4"><span class="c0"> "Mary" : { "status" : "single" } }</span></p><p class="c4"><span class="c0">modify (replace json value of $people("John")("status") with "married",</span></p><p class="c4"><span class="c0"> replace json value of $people("Mary")("status") with "married")</span></p><p class="c4"><span class="c0">return $people</span></p><p class="c4 c8"><span class="c0"></span></p><p class="c4 c11"><span class="c0 c5">{ "John" : { "status" : "married" }, "Mary" : { "status" : "married" } }</span></p><p class="c1"><span class="c0 c5"></span></p><p class="c4 c9"><span>Other updates are insertion into an object or an array, replacement of a value in an object or an array, deletion in an object or an array, renaming an object pair, appending to an array. This is documented on jsoniq.org.</span></p><h2 class="c4"><a name="h.5itcphr8262b"></a><span>Even more</span></h2><p class="c4"><span>JSONiq can do way more that what is presented here. Here are a couple of highlights:</span></p><p class="c4 c9"><span>- JSONiq is a strongly typed language, but is smart enough to not bother you with types when unnecessary. It potentially supports static typing as well to detect errors before you even execute your program.</span></p><p class="c4"><span>- You can define your own functions and modules.</span></p><p class="c4"><span>- JSONiq provides you with loads of available modules shipped with Zorba.</span></p><p class="c4 c9"><span>- JSONiq has tons of further features such as switch, typeswitch and try-catch expressions, universal/existential quantifiers, path expressions, filtering expressions, functors, mappings, grouping, windowing.</span></p><h2 class="c4"><a name="h.j7oh3cyhem38"></a><span>More is not enough</span></h2><p class="c4 c9"><span>- JSONiq supports XML. Yes: you can manipulate JSON and XML with the same language! JSONiq is actually a superset of XQuery, a W3C standard, and extends its data model to support JSON.</span></p><p class="c4 c9"><span>- JSONiq supports scripting. If you need to write a full-fledged, side-effecting Web application, scripting is for you.</span></p><p class="c4 c9 c8"><span></span></p><p class="c4 c9"><span>The complete JSONiq specification is available on </span><span class="c20"><a class="c13" href="http://jsoniq.org/">http://jsoniq.org/</a></span></p></body></html> |
476 | |
477 | === modified file 'doc/zorba/build_and_install.dox' |
478 | --- doc/zorba/build_and_install.dox 2013-02-07 17:24:36 +0000 |
479 | +++ doc/zorba/build_and_install.dox 2013-09-30 21:53:02 +0000 |
480 | @@ -5,22 +5,22 @@ |
481 | Once you have successfully configured your Zorba build (as described |
482 | in \ref configure_zorba), you should now be able to build the project. |
483 | |
484 | -- For Makefile-based builds, just type \c make (or <tt>make j2</tt> to |
485 | +- For Makefile-based builds, just type \c make (or \code make j2 \endcode to |
486 | do a parallel build on a multi-core machine) from inside the \c |
487 | {ZORBABUILD} directory. |
488 | |
489 | - For IDE-based builds, open the project created in the previous step |
490 | - and build the \c ALL target. |
491 | + and build the <b>ALL</b> target. |
492 | |
493 | The build will take some time. If it finishes successfully, you're |
494 | ready to install and run Zorba. |
495 | |
496 | \section install_zorba Installing Zorba |
497 | |
498 | -- For Makefile-based builds, just type <tt>make install</tt>. There |
499 | -is also a <tt>make uninstall</tt> target. |
500 | +- For Makefile-based builds, just type \code make install \endcode. There |
501 | +is also a \code make uninstall \endcode target. |
502 | |
503 | -- For IDE-based builds, invoke the \c INSTALL project. |
504 | +- For IDE-based builds, invoke the <b>INSTALL</b> project. |
505 | |
506 | In either case, Zorba will be installed into the location specified by |
507 | the CMake configuration parameter \c CMAKE_INSTALL_PREFIX, as |
508 | @@ -28,7 +28,7 @@ |
509 | |
510 | \section install_paths Setting the PATH |
511 | |
512 | -In order for users on your system to use Zorba, the \c bin/ subdirectory |
513 | +In order for users on your system to use Zorba, the <b>bin/</b> subdirectory |
514 | of your installation directory must be on their path. |
515 | |
516 | \section testing_install Testing your Zorba Installation |
517 | @@ -50,10 +50,8 @@ |
518 | |
519 | \section build_help Help! |
520 | |
521 | -If you have any problems building or running Zorba, contact the \c |
522 | -zorba-users mailing list. Sign up and see other instructions at |
523 | +If you have any problems building or running Zorba, contact the <b>zorba-users<b> |
524 | +mailing list. Sign up and see other instructions at |
525 | https://groups.google.com/forum/?hl=en&fromgroups#!forum/zorba-users . |
526 | |
527 | - |
528 | */ |
529 | - |
530 | |
531 | === modified file 'doc/zorba/build_configure.dox' |
532 | --- doc/zorba/build_configure.dox 2012-05-02 10:40:42 +0000 |
533 | +++ doc/zorba/build_configure.dox 2013-09-30 21:53:02 +0000 |
534 | @@ -10,10 +10,10 @@ |
535 | The instructions in this section are based on executing commands at |
536 | the command line. It is also possible configure Zorba using CMake's |
537 | GUI configuration utility if you prefer. On Linux distributions, this |
538 | -is often a separate package named \"\c cmake-gui\". On Windows, the |
539 | +is often a separate package named <b>"cmake-gui"</b>. On Windows, the |
540 | GUI is installed by default and can be started via the Start menu. On |
541 | -MacOS, it is available as the \"\c gui\" variant of the \c cmake |
542 | -package. |
543 | +MacOS, it is available as the <b>"gui"</b> variant of the |
544 | +<a href="http://www.cmake.org/">CMake</a> package. |
545 | |
546 | \note |
547 | The important configuration parameters - source and build directory; |
548 | @@ -61,7 +61,7 @@ |
549 | cmake -G "Visual Studio 10" {ZORBASRC} \endcode |
550 | |
551 | The list of available Generators for your CMake installation |
552 | -can be seen by typing \" <tt>cmake --help</tt> \". |
553 | +can be seen by typing \code cmake --help \endcode. |
554 | |
555 | \section configure_parameters Configuration Parameters (the -D arguments) |
556 | |
557 | |
558 | === modified file 'doc/zorba/build_macos.dox' |
559 | --- doc/zorba/build_macos.dox 2012-05-02 10:40:42 +0000 |
560 | +++ doc/zorba/build_macos.dox 2013-09-30 21:53:02 +0000 |
561 | @@ -14,7 +14,7 @@ |
562 | CMake on Mac OS X uses the Makefile generator. |
563 | Alternatively, |
564 | you can specify different generators (e.g., Xcode) |
565 | -by starting CMake using the \c -G option (e.g., <tt>-G Xcode</tt>). |
566 | +by starting CMake using the <b>-G</b> option (e.g., <b>-G Xcode</b>). |
567 | |
568 | \section macos_swig Swig Version |
569 | |
570 | |
571 | === modified file 'doc/zorba/build_prepare.dox' |
572 | --- doc/zorba/build_prepare.dox 2013-06-19 19:51:53 +0000 |
573 | +++ doc/zorba/build_prepare.dox 2013-09-30 21:53:02 +0000 |
574 | @@ -13,8 +13,8 @@ |
575 | |
576 | \subsection download_source Getting a Source Code Release |
577 | |
578 | -You may download the latest Zorba release source code as either a \c |
579 | -.zip or \c .tar.gz file from Launchpad: |
580 | +You may download the latest Zorba release source code as either a |
581 | +<b>.zip</b> or <b>.tar.gz</b> file from Launchpad: |
582 | https://launchpad.net/zorba/+download . |
583 | |
584 | \subsection checkout_source Getting the Latest Code from Launchpad |
585 | @@ -77,15 +77,16 @@ |
586 | |
587 | \note |
588 | Please note that some of these modules depend on other modules. Most |
589 | -notably, the EXPath http-client module (in the \c http-client module |
590 | -package) depends on the \c html module, which is in the \c |
591 | -data-converters module package. So, if you download the \c http-client |
592 | -package, you must also download the \c data-converters package (and |
593 | -ensure that \c libtidy is installed; see \ref noncore_requirements). |
594 | +notably, the EXPath http-client module (in the |
595 | +<a href="../modules/expath.org_ns_http-client.html">http-client</a> module |
596 | +package) depends on the |
597 | +<a href="../modules//www.zorba-xquery.com_modules_converters_html">html</a> |
598 | +module, which is in the <b>data-converters</b> module package. So, if you |
599 | +download the <b>http-client</b> package, you must also download the |
600 | +<b>data-converters</b> package (and ensure that |
601 | +<a href="http://tidy.sourceforge.net/">libtidy</a> is installed; see \ref noncore_requirements). |
602 | \note |
603 | -Please see our <a |
604 | -href="/img/documentation/2.9/zorba/modules.svg">module-interdependency |
605 | -graph</a> for details. |
606 | +Please see our <a href="../modules/images/modules.svg">module-interdependency graph</a> for details. |
607 | |
608 | \section create_build_dir Creating a Build Directory |
609 | |
610 | @@ -93,7 +94,7 @@ |
611 | href="http://www.cmake.org/Wiki/CMake_FAQ#What_is_an_.22out-of-source.22_build.3F" |
612 | target="_blank">out-of-source build</a>, which means you need to |
613 | create a separate (empty) build directory. A common convention is to |
614 | -create a directory named \"\c build\" in the Zorba source directory, |
615 | +create a directory named <b>"build"</b> in the Zorba source directory, |
616 | but you may name it and place it anywhere you like. We refer to this |
617 | directory as \c {ZORBABUILD} in the following steps. |
618 | |
619 | |
620 | === modified file 'doc/zorba/build_prerequisites.dox' |
621 | --- doc/zorba/build_prerequisites.dox 2013-06-19 15:19:17 +0000 |
622 | +++ doc/zorba/build_prerequisites.dox 2013-09-30 21:53:02 +0000 |
623 | @@ -45,7 +45,7 @@ |
624 | (http://xerces.apache.org/xerces-c/). This package is required to |
625 | enable XML schema support. This feature is enabled by default. In |
626 | order to disable XML schema support, you need to provide the CMake |
627 | - configuration parameter \c ZORBA_NO_XMLSCHEMA=ON. Note that the Zorba |
628 | + configuration parameter <b>ZORBA_NO_XMLSCHEMA=ON</b>. Note that the Zorba |
629 | team tests with Xerces-C 3.1.1. Xerces-C 2.8.0 in particular is known |
630 | to cause a few bugs with schema handling. |
631 | |
632 | @@ -53,7 +53,7 @@ |
633 | required to enable Unicode support as well as some other |
634 | internationalization features. This feature is enabled by |
635 | default. To build without ICU, you need to provide the CMake |
636 | - configuration parameter \c ZORBA_NO_ICU=ON. |
637 | + configuration parameter <b>ZORBA_NO_ICU=ON</b>. |
638 | |
639 | \subsection optional_core_zorba Optional for Core Zorba |
640 | |
641 | @@ -63,14 +63,13 @@ |
642 | by CMake. |
643 | |
644 | - CURL (libcurl) 7.12 or later (http://curl.haxx.se/). This package is |
645 | - required if <a |
646 | - href="../xqdoc/xhtml/www.zorba-xquery.com_modules_http-client.html">Zorba's built-in |
647 | + required if <a href="../modules/www.zorba-xquery.com_modules_http-client.html">Zorba's built-in |
648 | HTTP module</a> should be available. Zorba will automatically be |
649 | built with this module if the curl packages are installed. |
650 | \note Please note that other modules depend on the http-client module |
651 | (i.e., import it). Hence, those dependent modules will not work if |
652 | the http module is not available. Please see our <a |
653 | - href="../xqdoc/xhtml/images/modules.svg">module |
654 | + href="../modules/images/modules.svg">module |
655 | dependency graph</a> for the module inter-dependencies. |
656 | \note Also note that Zorba internally uses this module when resolving |
657 | http: URIs in queries, module/schema imports, and so on. If this |
658 | @@ -78,12 +77,12 @@ |
659 | URIs from the web. |
660 | \note If you happen to have libcurl installed but would like to build |
661 | Zorba without HTTP support, you may set the CMake configuration |
662 | - parameter \c ZORBA_SUPPRESS_CURL=ON. |
663 | + parameter <b>ZORBA_SUPPRESS_CURL=ON</b>. |
664 | |
665 | - LibXslt version 1.1.24 or later (http://xmlsoft.org/XSLT/). The |
666 | LibXslt package is required for XQueryX support. This feature is |
667 | not enabled by default. To enable XQueryX support, you need to |
668 | - provide the CMake configuration parameter \c ZORBA_XQUERYX=ON. |
669 | + provide the CMake configuration parameter <b>ZORBA_XQUERYX=ON</b>. |
670 | |
671 | - Flex 2.5.33 or later (http://flex.sourceforge.net/) and |
672 | Bison 2.4 or later (http://www.gnu.org/software/bison/) are |
673 | @@ -101,9 +100,7 @@ |
674 | that affects a small number of platforms, including at least |
675 | FreeBSD. If you get compilation errors that look similar to this: |
676 | |
677 | -\code |
678 | - build/swig/php/zorba_apiPHP5_wrap.cxx:953: error: invalid conversion from 'const char*' to 'char*' |
679 | -\endcode |
680 | + <b>build/swig/php/zorba_apiPHP5_wrap.cxx:953: error: invalid conversion from 'const char*' to 'char*'</b> |
681 | |
682 | then you may have run into this bug. Our experience is that Swig |
683 | version at least 2.0.7 has corrected this bug, so please try upgrading |
684 | @@ -123,14 +120,14 @@ |
685 | All such modules are not built if the library (and development headers) they require are not available. |
686 | Here is a list of the libraries required by the current non-core modules packages: |
687 | |
688 | -- data-converters (CSV, HTML) |
689 | +- data-converters (HTML module) |
690 | - Tidy (http://tidy.sourceforge.net) |
691 | - data-formatting (XSL-FO) |
692 | - Java (http://java.sun.com/javase/downloads/index.jsp) |
693 | - Apache FOP (http://xmlgraphics.apache.org/fop/download.html) |
694 | |
695 | +- email (SMTP module) |
696 | - IMAP CClient (http://www.washington.edu/imap/) |
697 | -- geo |
698 | +- geo (GEO module) |
699 | - GEOS version 3.2.2 or later (http://trac.osgeo.org/geos/) |
700 | - EXPath http-client |
701 | - CURL 7.12 or later (http://curl.haxx.se/) |
702 | @@ -139,6 +136,9 @@ |
703 | - languages (XSLT) |
704 | - LibXslt version 1.1.24 or later (http://xmlsoft.org/XSLT/) |
705 | |
706 | +For a more up to date list please see section "External C++ Library dependencies" |
707 | +in the <a href="../modules/images/modules.svg">module dependency graph</a>. |
708 | + |
709 | In many cases you can find binary packages for these dependencies, which |
710 | will be the quickest and easiest way to meet the requirements. We have |
711 | provided links or instructions for downloading binary packages for some |
712 | |
713 | === modified file 'doc/zorba/commandline.dox' |
714 | --- doc/zorba/commandline.dox 2013-08-23 11:15:04 +0000 |
715 | +++ doc/zorba/commandline.dox 2013-09-30 21:53:02 +0000 |
716 | @@ -193,15 +193,15 @@ |
717 | These are the files used in this example and their meaning: |
718 | <table border="0"> |
719 | <tr> |
720 | - <td><tt> works-mod.xml</tt></td> |
721 | + <td><tt>works-mod.xml</tt></td> |
722 | <td>File that will be used as external variable.</td> |
723 | </tr> |
724 | <tr> |
725 | - <td><tt> comandline_doc_example_2.xq</tt></td> |
726 | + <td><tt>comandline_doc_example_2.xq</tt></td> |
727 | <td>This is an update query. For details please see below.</td> |
728 | </tr> |
729 | <tr> |
730 | - <td><tt> comandline_doc_example_2-test.xq</tt></td> |
731 | + <td><tt>comandline_doc_example_2-test.xq</tt></td> |
732 | <td>Query used to see the results of the update query. For details please see below.</td> |
733 | </tr> |
734 | </table> |
735 | |
736 | === modified file 'doc/zorba/conformance.dox' |
737 | --- doc/zorba/conformance.dox 2013-06-19 22:47:21 +0000 |
738 | +++ doc/zorba/conformance.dox 2013-09-30 21:53:02 +0000 |
739 | @@ -14,33 +14,35 @@ |
740 | |
741 | |
742 | \section summary_XQ10 Summary conformance W3C XQuery 1.0 |
743 | -<table border="1" bordercolor="black" bgcolor="lightcyan" cellpadding="4"> |
744 | + |
745 | +\htmlonly |
746 | +<table border="1" cellpadding="4"> |
747 | <tr> |
748 | - <td bgcolor="paleturquoise"> |
749 | + <td bgcolor="lightcyan"> |
750 | Product |
751 | </td> |
752 | - <td bgcolor="paleturquoise"> |
753 | + <td bgcolor="lightcyan"> |
754 | Version |
755 | </td> |
756 | - <td bgcolor="paleturquoise"> |
757 | + <td bgcolor="lightcyan"> |
758 | Tests passed |
759 | </td> |
760 | - <td bgcolor="paleturquoise"> |
761 | + <td bgcolor="lightcyan"> |
762 | Tests failed |
763 | </td> |
764 | - <td bgcolor="paleturquoise"> |
765 | + <td bgcolor="lightcyan"> |
766 | Tests run |
767 | </td> |
768 | - <td bgcolor="paleturquoise"> |
769 | + <td bgcolor="lightcyan"> |
770 | % passed |
771 | </td> |
772 | </tr> |
773 | <tr> |
774 | - <td bgcolor="paleturquoise"> |
775 | + <td bgcolor="lightcyan"> |
776 | Zorba |
777 | </td> |
778 | - <td bgcolor="paleturquoise"> |
779 | - 2.9.1 |
780 | + <td bgcolor="lightcyan"> |
781 | + 1.9.1 |
782 | </td> |
783 | <td> |
784 | 21581 |
785 | @@ -56,36 +58,38 @@ |
786 | </td> |
787 | </tr> |
788 | </table> |
789 | +\endhtmlonly |
790 | |
791 | \section summary_XQ30 Summary conformance W3C XQuery 3.0 |
792 | |
793 | -<table border="1" bordercolor="black" bgcolor="lightcyan" cellpadding="4"> |
794 | +\htmlonly |
795 | +<table border="1" cellpadding="4"> |
796 | <tr> |
797 | - <td bgcolor="paleturquoise"> |
798 | + <td bgcolor="lightcyan"> |
799 | Product |
800 | </td> |
801 | - <td bgcolor="paleturquoise"> |
802 | + <td bgcolor="lightcyan"> |
803 | Version |
804 | </td> |
805 | - <td bgcolor="paleturquoise"> |
806 | + <td bgcolor="lightcyan"> |
807 | Tests passed |
808 | </td> |
809 | - <td bgcolor="paleturquoise"> |
810 | + <td bgcolor="lightcyan"> |
811 | Tests failed |
812 | </td> |
813 | - <td bgcolor="paleturquoise"> |
814 | + <td bgcolor="lightcyan"> |
815 | Tests run |
816 | </td> |
817 | - <td bgcolor="paleturquoise"> |
818 | + <td bgcolor="lightcyan"> |
819 | % passed |
820 | </td> |
821 | </tr> |
822 | <tr> |
823 | - <td bgcolor="paleturquoise"> |
824 | + <td bgcolor="lightcyan"> |
825 | Zorba |
826 | </td> |
827 | - <td bgcolor="paleturquoise"> |
828 | - 2.9.1 |
829 | + <td bgcolor="lightcyan"> |
830 | + 1.9.1 |
831 | </td> |
832 | <td> |
833 | 25897 |
834 | @@ -101,215 +105,179 @@ |
835 | </td> |
836 | </tr> |
837 | </table> |
838 | +\endhtmlonly |
839 | |
840 | \section summaryXQUTS Summary conformance W3C XQuery Update Facility 1.0 |
841 | |
842 | The following table shows the supported features: |
843 | -<table bgcolor="lightcyan"> |
844 | - <tr> |
845 | - <td>W3C XQuery Update Facility 1.0 feature</td> |
846 | - <td>supported</td> |
847 | - </tr> |
848 | - <tr> |
849 | - <td></td> |
850 | - <td></td> |
851 | - </tr> |
852 | - <tr> |
853 | - <td>Minimal Conformance</td> |
854 | +\htmlonly |
855 | +<table border="1"> |
856 | + <tr> |
857 | + <td bgcolor="lightcyan">W3C XQuery Update Facility 1.0 feature</td> |
858 | + <td bgcolor="lightcyan">supported</td> |
859 | + </tr> |
860 | + <tr> |
861 | + <td bgcolor="lightcyan">Minimal Conformance</td> |
862 | <td bgcolor="mediumseagreen">true</td> |
863 | </tr> |
864 | <tr> |
865 | - <td>Update Facility Static Typing Feature</td> |
866 | + <td bgcolor="lightcyan">Update Facility Static Typing Feature</td> |
867 | <td bgcolor="white">false</td> |
868 | </tr> |
869 | </table> |
870 | +\endhtmlonly |
871 | |
872 | This is the W3C XQuery Update Facility 1.0 conformance summary: |
873 | In generating the report we used Zorba version 2.5 that can be downloaded from https://launchpad.net/zorba/trunk/2.5 and XQUTS version 'current' (XQUTS version taken from CVS as of 2012-01-12). |
874 | -<table bgcolor="lightcyan"> |
875 | - <tr> |
876 | - <td>W3C XQuery Update Facility 1.0 feature</td> |
877 | - <td>supported</td> |
878 | - </tr> |
879 | - <tr> |
880 | - <td></td> |
881 | - <td></td> |
882 | - </tr> |
883 | - <tr> |
884 | - <td>Minimal Conformance</td> |
885 | - <td bgcolor="mediumseagreen">true</td> |
886 | - </tr> |
887 | - <tr> |
888 | - <td>Update Facility Static Typing Feature</td> |
889 | - <td bgcolor="white">false</td> |
890 | - </tr> |
891 | -</table> |
892 | -<table bgcolor="lightcyan"> |
893 | - <tr> |
894 | - <td>W3C XQuery Update Facility 1.0 features</td> |
895 | - <td>XQuery</td> |
896 | - <td>XQueryX</td> |
897 | - </tr> |
898 | - <tr> |
899 | - <td></td> |
900 | - <td></td> |
901 | - <td></td> |
902 | - </tr> |
903 | - <tr bgcolor="lightcyan"> |
904 | +\htmlonly |
905 | +<table border="1"> |
906 | + <tr> |
907 | + <td bgcolor="lightcyan">W3C XQuery Update Facility 1.0 features</td> |
908 | + <td bgcolor="lightcyan">XQuery</td> |
909 | + <td bgcolor="lightcyan">XQueryX</td> |
910 | + </tr> |
911 | + <tr> |
912 | <td bgcolor="lightcyan">Minimal Conformance</td> |
913 | - <td align="center" bgcolor="mediumseagreen">667/667<br />100%</td> |
914 | - <td align="center" bgcolor="mediumseagreen">667/667<br />100%</td> |
915 | + <td align="center" bgcolor="mediumseagreen">667/667 100%</td> |
916 | + <td align="center" bgcolor="mediumseagreen">667/667 100%</td> |
917 | </tr> |
918 | <tr bgcolor="lightcyan"> |
919 | <td bgcolor="lightcyan">Optional Features</td> |
920 | - <td align="center" bgcolor="palegreen">97/126<br />76.98%</td> |
921 | - <td align="center" bgcolor="palegreen">97/126<br />76.98%</td> |
922 | + <td align="center" bgcolor="palegreen">97/126 76.98%</td> |
923 | + <td align="center" bgcolor="palegreen">97/126 76.98%</td> |
924 | </tr> |
925 | <tr bgcolor="lightcyan"> |
926 | <td bgcolor="lightcyan">Â Â Revalidation</td> |
927 | - <td align="center" bgcolor="palegreen">76/77<br /> |
928 | - </td> |
929 | - <td align="center" bgcolor="palegreen">76/77<br /> |
930 | - </td> |
931 | + <td align="center" bgcolor="palegreen">76/77 </td> |
932 | + <td align="center" bgcolor="palegreen">76/77 </td> |
933 | </tr> |
934 | <tr bgcolor="lightcyan"> |
935 | <td bgcolor="lightcyan">Â Â Update Facility Static Typing Feature</td> |
936 | - <td align="center" bgcolor="white">0/27<br /> |
937 | - </td> |
938 | - <td align="center" bgcolor="white">0/27<br /> |
939 | - </td> |
940 | + <td align="center" bgcolor="white">0/27 </td> |
941 | + <td align="center" bgcolor="white">0/27 </td> |
942 | </tr> |
943 | <tr bgcolor="lightcyan"> |
944 | <td bgcolor="lightcyan">Â Â Tests that need the Full Axis Feature</td> |
945 | - <td align="center" bgcolor="mediumseagreen">14/14<br /> |
946 | - </td> |
947 | - <td align="center" bgcolor="mediumseagreen">14/14<br /> |
948 | - </td> |
949 | + <td align="center" bgcolor="mediumseagreen">14/14 </td> |
950 | + <td align="center" bgcolor="mediumseagreen">14/14 </td> |
951 | </tr> |
952 | <tr bgcolor="lightcyan"> |
953 | <td bgcolor="lightcyan">Â Â fn:put applied to nodes other than document and element nodes</td> |
954 | - <td align="center" bgcolor="palegreen">7/8<br /> |
955 | - </td> |
956 | - <td align="center" bgcolor="palegreen">7/8<br /> |
957 | - </td> |
958 | + <td align="center" bgcolor="palegreen">7/8 </td> |
959 | + <td align="center" bgcolor="palegreen">7/8 </td> |
960 | </tr> |
961 | <tr bgcolor="lightcyan"> |
962 | <td bgcolor="lightcyan">Use Cases</td> |
963 | - <td align="center" bgcolor="mediumseagreen">22/22<br />100%</td> |
964 | - <td align="center" bgcolor="mediumseagreen">22/22<br />100%</td> |
965 | + <td align="center" bgcolor="mediumseagreen">22/22 100%</td> |
966 | + <td align="center" bgcolor="mediumseagreen">22/22 100%</td> |
967 | </tr> |
968 | </table> |
969 | +\endhtmlonly |
970 | |
971 | \section summaryXQFTTS Summary conformance W3C XQuery and XPath Full Text 1.0 |
972 | The following table shows the supported features: |
973 | -<table bgcolor="lightcyan"> |
974 | - <tr> |
975 | - <td>W3C XQuery and XPath Full Text 1.0 features</td> |
976 | - <td>supported</td> |
977 | - </tr> |
978 | - <tr> |
979 | - <td></td> |
980 | - <td></td> |
981 | - </tr> |
982 | - <tr> |
983 | - <td>Minimal Conformance</td> |
984 | - <td bgcolor="mediumseagreen">true</td> |
985 | - </tr> |
986 | - <tr> |
987 | - <td>FTMildNot Operator</td> |
988 | - <td bgcolor="mediumseagreen">true</td> |
989 | - </tr> |
990 | - <tr> |
991 | - <td>FTUnaryNot Operator</td> |
992 | - <td bgcolor="mediumseagreen">true</td> |
993 | - </tr> |
994 | - <tr> |
995 | - <td>FTUnit and FTBigUnit</td> |
996 | - <td bgcolor="mediumseagreen">true</td> |
997 | - </tr> |
998 | - <tr> |
999 | - <td>FTOrder Operator</td> |
1000 | - <td bgcolor="mediumseagreen">true</td> |
1001 | - </tr> |
1002 | - <tr> |
1003 | - <td>FTScope Operator</td> |
1004 | - <td bgcolor="mediumseagreen">true</td> |
1005 | - </tr> |
1006 | - <tr> |
1007 | - <td>FTWindow Operator</td> |
1008 | - <td bgcolor="mediumseagreen">true</td> |
1009 | - </tr> |
1010 | - <tr> |
1011 | - <td>FTDistance Operator</td> |
1012 | - <td bgcolor="mediumseagreen">true</td> |
1013 | - </tr> |
1014 | - <tr> |
1015 | - <td>FTTimes Operator</td> |
1016 | - <td bgcolor="mediumseagreen">true</td> |
1017 | - </tr> |
1018 | - <tr> |
1019 | - <td>FTContent Operator</td> |
1020 | - <td bgcolor="mediumseagreen">true</td> |
1021 | - </tr> |
1022 | - <tr> |
1023 | - <td>FTCaseOption</td> |
1024 | - <td bgcolor="mediumseagreen">true</td> |
1025 | - </tr> |
1026 | - <tr> |
1027 | - <td>FTStopwordOption</td> |
1028 | - <td bgcolor="mediumseagreen">true</td> |
1029 | - </tr> |
1030 | - <tr> |
1031 | - <td>FTLanguageOption</td> |
1032 | - <td bgcolor="mediumseagreen">true</td> |
1033 | - </tr> |
1034 | - <tr> |
1035 | - <td>FTIgnoreOption</td> |
1036 | - <td bgcolor="white">false</td> |
1037 | - </tr> |
1038 | - <tr> |
1039 | - <td>Scoring</td> |
1040 | - <td bgcolor="white">false</td> |
1041 | - </tr> |
1042 | - <tr> |
1043 | - <td>Weights</td> |
1044 | +\htmlonly |
1045 | +<table border="1"> |
1046 | + <tr> |
1047 | + <td bgcolor="lightcyan">W3C XQuery and XPath Full Text 1.0 features</td> |
1048 | + <td bgcolor="lightcyan">supported</td> |
1049 | + </tr> |
1050 | + <tr> |
1051 | + <td bgcolor="lightcyan">Minimal Conformance</td> |
1052 | + <td bgcolor="mediumseagreen">true</td> |
1053 | + </tr> |
1054 | + <tr> |
1055 | + <td bgcolor="lightcyan">FTMildNot Operator</td> |
1056 | + <td bgcolor="mediumseagreen">true</td> |
1057 | + </tr> |
1058 | + <tr> |
1059 | + <td bgcolor="lightcyan">FTUnaryNot Operator</td> |
1060 | + <td bgcolor="mediumseagreen">true</td> |
1061 | + </tr> |
1062 | + <tr> |
1063 | + <td bgcolor="lightcyan">FTUnit and FTBigUnit</td> |
1064 | + <td bgcolor="mediumseagreen">true</td> |
1065 | + </tr> |
1066 | + <tr> |
1067 | + <td bgcolor="lightcyan">FTOrder Operator</td> |
1068 | + <td bgcolor="mediumseagreen">true</td> |
1069 | + </tr> |
1070 | + <tr> |
1071 | + <td bgcolor="lightcyan">FTScope Operator</td> |
1072 | + <td bgcolor="mediumseagreen">true</td> |
1073 | + </tr> |
1074 | + <tr> |
1075 | + <td bgcolor="lightcyan">FTWindow Operator</td> |
1076 | + <td bgcolor="mediumseagreen">true</td> |
1077 | + </tr> |
1078 | + <tr> |
1079 | + <td bgcolor="lightcyan">FTDistance Operator</td> |
1080 | + <td bgcolor="mediumseagreen">true</td> |
1081 | + </tr> |
1082 | + <tr> |
1083 | + <td bgcolor="lightcyan">FTTimes Operator</td> |
1084 | + <td bgcolor="mediumseagreen">true</td> |
1085 | + </tr> |
1086 | + <tr> |
1087 | + <td bgcolor="lightcyan">FTContent Operator</td> |
1088 | + <td bgcolor="mediumseagreen">true</td> |
1089 | + </tr> |
1090 | + <tr> |
1091 | + <td bgcolor="lightcyan">FTCaseOption</td> |
1092 | + <td bgcolor="mediumseagreen">true</td> |
1093 | + </tr> |
1094 | + <tr> |
1095 | + <td bgcolor="lightcyan">FTStopwordOption</td> |
1096 | + <td bgcolor="mediumseagreen">true</td> |
1097 | + </tr> |
1098 | + <tr> |
1099 | + <td bgcolor="lightcyan">FTLanguageOption</td> |
1100 | + <td bgcolor="mediumseagreen">true</td> |
1101 | + </tr> |
1102 | + <tr> |
1103 | + <td bgcolor="lightcyan">FTIgnoreOption</td> |
1104 | + <td bgcolor="white">false</td> |
1105 | + </tr> |
1106 | + <tr> |
1107 | + <td bgcolor="lightcyan">Scoring</td> |
1108 | + <td bgcolor="white">false</td> |
1109 | + </tr> |
1110 | + <tr> |
1111 | + <td bgcolor="lightcyan">Weights</td> |
1112 | <td bgcolor="white">false</td> |
1113 | </tr> |
1114 | </table> |
1115 | +\endhtmlonly |
1116 | |
1117 | This is the W3C XQuery and XPath Full Text 1.0 conformance summary: |
1118 | In generating the report we used Zorba version 2.5 that can be downloaded from https://launchpad.net/zorba/trunk/2.5 and XQFTTS version 'current' (XQFTTS taken from W3C CVS as of 2012-01-12). |
1119 | - |
1120 | -<table bgcolor="lightcyan"> |
1121 | - <tr> |
1122 | - <td>W3C XQuery and XPath Full Text 1.0 features</td> |
1123 | - <td>XQuery</td> |
1124 | - <td>XQueryX</td> |
1125 | - </tr> |
1126 | - <tr> |
1127 | - <td></td> |
1128 | - <td></td> |
1129 | - <td></td> |
1130 | - </tr> |
1131 | - <tr bgcolor="lightcyan"> |
1132 | +\htmlonly |
1133 | +<table border="1"> |
1134 | + <tr> |
1135 | + <td bgcolor="lightcyan">W3C XQuery and XPath Full Text 1.0 features</td> |
1136 | + <td bgcolor="lightcyan">XQuery</td> |
1137 | + <td bgcolor="lightcyan">XQueryX</td> |
1138 | + </tr> |
1139 | + <tr> |
1140 | <td bgcolor="lightcyan">Minimal Conformance</td> |
1141 | - <td align="center" bgcolor="palegreen">384/429<br />89.51%</td> |
1142 | - <td align="center" bgcolor="palegreen">374/429<br />87.18%</td> |
1143 | + <td align="center" bgcolor="palegreen">384/429 89.51%</td> |
1144 | + <td align="center" bgcolor="palegreen">374/429 87.18%</td> |
1145 | </tr> |
1146 | - <tr bgcolor="lightcyan"> |
1147 | + <tr> |
1148 | <td bgcolor="lightcyan">Optional Features</td> |
1149 | - <td align="center" bgcolor="palegreen">106/125<br />84.8%</td> |
1150 | - <td align="center" bgcolor="palegreen">97/125<br />77.6%</td> |
1151 | + <td align="center" bgcolor="palegreen">106/125 84.8%</td> |
1152 | + <td align="center" bgcolor="palegreen">97/125 77.6%</td> |
1153 | </tr> |
1154 | - <tr bgcolor="lightcyan"> |
1155 | + <tr> |
1156 | <td bgcolor="lightcyan">Use Cases</td> |
1157 | - <td align="center" bgcolor="palegreen">120/135<br />88.89%</td> |
1158 | - <td align="center" bgcolor="palegreen">102/135<br />75.56%</td> |
1159 | + <td align="center" bgcolor="palegreen">120/135 88.89%</td> |
1160 | + <td align="center" bgcolor="palegreen">102/135 75.56%</td> |
1161 | </tr> |
1162 | - <tr bgcolor="lightcyan"> |
1163 | + <tr> |
1164 | <td bgcolor="lightcyan">Consistency in XQFTTS Catalog</td> |
1165 | - <td align="center" bgcolor="mediumseagreen">3/3<br />100%</td> |
1166 | - <td align="center" bgcolor="mediumseagreen">3/3<br />100%</td> |
1167 | + <td align="center" bgcolor="mediumseagreen">3/3 100%</td> |
1168 | + <td align="center" bgcolor="mediumseagreen">3/3 100%</td> |
1169 | </tr> |
1170 | </table> |
1171 | +\endhtmlonly |
1172 | */ |
1173 | |
1174 | === modified file 'doc/zorba/conformanceXQFTTS.dox' |
1175 | --- doc/zorba/conformanceXQFTTS.dox 2013-02-07 17:24:36 +0000 |
1176 | +++ doc/zorba/conformanceXQFTTS.dox 2013-09-30 21:53:02 +0000 |
1177 | @@ -2,19 +2,15 @@ |
1178 | |
1179 | In generating the report we used Zorba version 2.5 that can be downloaded from https://launchpad.net/zorba/trunk/2.5 and XQFTTS version 'current' (XQFTTS taken from W3C CVS as of 2012-01-12). |
1180 | Zorba achieves 89.51% on minimal conformance (and 84.8% on Optional Features) for the W3C XPath Full Text 1.0 Test Suite. |
1181 | - |
1182 | -Please see the table below for more details. |
1183 | -<table bgcolor="lightcyan"> |
1184 | + |
1185 | +Please see the table below for more details. |
1186 | +\htmlonly |
1187 | +<table border="1" bgcolor="lightcyan"> |
1188 | <tr> |
1189 | <td>W3C XQuery and XPath Full Text 1.0 features</td> |
1190 | <td>XQuery</td> |
1191 | <td>XQueryX</td> |
1192 | </tr> |
1193 | - <tr> |
1194 | - <td></td> |
1195 | - <td></td> |
1196 | - <td></td> |
1197 | - </tr> |
1198 | <tr bgcolor="lightcyan"> |
1199 | <td bgcolor="paleturquoise">Minimal Conformance</td> |
1200 | <td align="center" bgcolor="paleturquoise"></td> |
1201 | @@ -486,4 +482,5 @@ |
1202 | <td align="center" bgcolor="mediumseagreen">3/3</td> |
1203 | </tr> |
1204 | </table> |
1205 | +\endhtmlonly |
1206 | */ |
1207 | \ No newline at end of file |
1208 | |
1209 | === modified file 'doc/zorba/conformanceXQUTS.dox' |
1210 | --- doc/zorba/conformanceXQUTS.dox 2013-02-07 17:24:36 +0000 |
1211 | +++ doc/zorba/conformanceXQUTS.dox 2013-09-30 21:53:02 +0000 |
1212 | @@ -2,19 +2,15 @@ |
1213 | |
1214 | In generating the report we used Zorba version 2.5 that can be downloaded from https://launchpad.net/zorba/trunk/2.5 and XQUTS version 'current' (XQUTS version taken from CVS as of 2012-01-12). |
1215 | Zorba achieves 100% on minimal conformance (and 76.98% on Optional Features) for the W3C XQuery Update Facility Test Suite. |
1216 | - |
1217 | -Please see the table below for more details. |
1218 | -<table bgcolor="lightcyan"> |
1219 | + |
1220 | +Please see the table below for more details. |
1221 | +\htmlonly |
1222 | +<table border="1" bgcolor="lightcyan"> |
1223 | <tr> |
1224 | <td>W3C XQuery Update Facility 1.0 features</td> |
1225 | <td>XQuery</td> |
1226 | <td>XQueryX</td> |
1227 | </tr> |
1228 | - <tr> |
1229 | - <td></td> |
1230 | - <td></td> |
1231 | - <td></td> |
1232 | - </tr> |
1233 | <tr bgcolor="lightcyan"> |
1234 | <td bgcolor="paleturquoise">Minimal Conformance</td> |
1235 | <td align="center" bgcolor="paleturquoise"></td> |
1236 | @@ -251,7 +247,8 @@ |
1237 | <td align="center" bgcolor="mediumseagreen">14/14</td> |
1238 | </tr> |
1239 | <tr bgcolor="lightcyan"> |
1240 | - <td bgcolor="paleturquoise">Â Â fn:put applied to nodes other than document and element nodes</td> |
1241 | + <td bgcolor="paleturquoise">Â Â fn:put applied to nodes other than document and element |
1242 | + nodes</td> |
1243 | <td align="center" bgcolor="paleturquoise"></td> |
1244 | <td align="center" bgcolor="paleturquoise"></td> |
1245 | </tr> |
1246 | @@ -271,7 +268,8 @@ |
1247 | <td align="center" bgcolor="mediumseagreen">1/1</td> |
1248 | </tr> |
1249 | <tr bgcolor="lightcyan"> |
1250 | - <td bgcolor="lightcyan">Â Â Â Â fn:put() applied to processing-instruction nodes - unsupported</td> |
1251 | + <td bgcolor="lightcyan">Â Â Â Â fn:put() applied to processing-instruction nodes - |
1252 | + unsupported</td> |
1253 | <td align="center" bgcolor="mediumseagreen">1/1</td> |
1254 | <td align="center" bgcolor="mediumseagreen">1/1</td> |
1255 | </tr> |
1256 | @@ -316,7 +314,8 @@ |
1257 | <td align="center" bgcolor="mediumseagreen">1/1</td> |
1258 | </tr> |
1259 | <tr bgcolor="lightcyan"> |
1260 | - <td bgcolor="lightcyan">Â Â Use Cases "Namespaces" - moving elements from one namespace to another</td> |
1261 | + <td bgcolor="lightcyan">Â Â Use Cases "Namespaces" - moving elements from one namespace to |
1262 | + another</td> |
1263 | <td align="center" bgcolor="mediumseagreen">1/1</td> |
1264 | <td align="center" bgcolor="mediumseagreen">1/1</td> |
1265 | </tr> |
1266 | @@ -331,4 +330,5 @@ |
1267 | <td align="center" bgcolor="mediumseagreen">1/1</td> |
1268 | </tr> |
1269 | </table> |
1270 | +\endhtmlonly |
1271 | */ |
1272 | \ No newline at end of file |
1273 | |
1274 | === modified file 'doc/zorba/conformance_XQ10.dox' |
1275 | --- doc/zorba/conformance_XQ10.dox 2013-06-19 22:47:21 +0000 |
1276 | +++ doc/zorba/conformance_XQ10.dox 2013-09-30 21:53:02 +0000 |
1277 | @@ -9,3041 +9,1537 @@ |
1278 | Zorba achieves 99.53 for the XQuery 1.0 tests in <a href="http://dev.w3.org/2011/QT3-test-suite/">XQuery/XPath/XSLT 3.* Test Suite</a>. |
1279 | |
1280 | Please see the table below for more details. |
1281 | - |
1282 | +\htmlonly |
1283 | <table border="1" width="100%"> |
1284 | <th> |
1285 | - <b> |
1286 | - Summary of results for XQuery 1.0 |
1287 | - </b> |
1288 | + <b> Summary of results for XQuery 1.0 </b> |
1289 | </th> |
1290 | <tr> |
1291 | <td> |
1292 | <table> |
1293 | <tr> |
1294 | - <td> |
1295 | - Legend: |
1296 | - </td> |
1297 | + <td> Legend: </td> |
1298 | <td> |
1299 | <table> |
1300 | <tr> |
1301 | - <td bgcolor="mediumseagreen"> |
1302 | - |
1303 | + <td bgcolor="mediumseagreen"> |
1304 | </td> |
1305 | </tr> |
1306 | </table> |
1307 | </td> |
1308 | - <td> |
1309 | - passed |
1310 | - </td> |
1311 | - <td> |
1312 | - |
1313 | - </td> |
1314 | - <td> |
1315 | - <table> |
1316 | - <tr> |
1317 | - <td bgcolor="palegreen"> |
1318 | - |
1319 | - </td> |
1320 | - </tr> |
1321 | - </table> |
1322 | - </td> |
1323 | - <td> |
1324 | - almost passed<br>(≥ 98%) |
1325 | - </td> |
1326 | - <td> |
1327 | - |
1328 | - </td> |
1329 | - <td> |
1330 | - <table> |
1331 | - <tr> |
1332 | - <td bgcolor="coral"> |
1333 | - |
1334 | - </td> |
1335 | - </tr> |
1336 | - </table> |
1337 | - </td> |
1338 | - <td> |
1339 | - failed |
1340 | - </td> |
1341 | - <td> |
1342 | - |
1343 | - </td> |
1344 | - <td> |
1345 | - <table> |
1346 | - <tr> |
1347 | - <td bgcolor="white"> |
1348 | - |
1349 | - </td> |
1350 | - </tr> |
1351 | - </table> |
1352 | - </td> |
1353 | - <td> |
1354 | - untested |
1355 | - </td> |
1356 | + <td> passed </td> |
1357 | + <td> </td> |
1358 | + <td> |
1359 | + <table> |
1360 | + <tr> |
1361 | + <td bgcolor="palegreen"> </td> |
1362 | + </tr> |
1363 | + </table> |
1364 | + </td> |
1365 | + <td> almost passed (≥ 98%) </td> |
1366 | + <td> </td> |
1367 | + <td> |
1368 | + <table> |
1369 | + <tr> |
1370 | + <td bgcolor="coral"> </td> |
1371 | + </tr> |
1372 | + </table> |
1373 | + </td> |
1374 | + <td> failed </td> |
1375 | + <td> </td> |
1376 | + <td> |
1377 | + <table> |
1378 | + <tr> |
1379 | + <td bgcolor="white"> </td> |
1380 | + </tr> |
1381 | + </table> |
1382 | + </td> |
1383 | + <td> untested </td> |
1384 | </tr> |
1385 | </table> |
1386 | - </td> |
1387 | - </tr> |
1388 | - </table> |
1389 | + </td> |
1390 | + </tr> |
1391 | +</table> |
1392 | +\endhtmlonly |
1393 | + |
1394 | +\htmlonly |
1395 | <table border="1" bordercolor="black" bgcolor="lightcyan" cellpadding="2"> |
1396 | <tr> |
1397 | - <th> |
1398 | - Tests |
1399 | - </th> |
1400 | - <th> |
1401 | - Zorba 2.9.1 |
1402 | - <br> |
1403 | - XQ30 |
1404 | - <br> |
1405 | - (QT3 vCVS) |
1406 | - </th> |
1407 | - </tr> |
1408 | - <tr> |
1409 | - <td valign="top"> |
1410 | - fn-abs |
1411 | - </td> |
1412 | - <td align="center" bgcolor="mediumseagreen"> |
1413 | - 183/183 |
1414 | - </td> |
1415 | - </tr> |
1416 | - <tr> |
1417 | - <td valign="top"> |
1418 | - fn-adjust-date-to-timezone |
1419 | - </td> |
1420 | - <td align="center" bgcolor="mediumseagreen"> |
1421 | - 40/40 |
1422 | - </td> |
1423 | - </tr> |
1424 | - <tr> |
1425 | - <td valign="top"> |
1426 | - fn-adjust-dateTime-to-timezone |
1427 | - </td> |
1428 | - <td align="center" bgcolor="mediumseagreen"> |
1429 | - 47/47 |
1430 | - </td> |
1431 | - </tr> |
1432 | - <tr> |
1433 | - <td valign="top"> |
1434 | - fn-adjust-time-to-timezone |
1435 | - </td> |
1436 | - <td align="center" bgcolor="mediumseagreen"> |
1437 | - 41/41 |
1438 | - </td> |
1439 | - </tr> |
1440 | - <tr> |
1441 | - <td valign="top"> |
1442 | - fn-analyze-string |
1443 | - </td> |
1444 | - <td align="center" bgcolor="white"> |
1445 | - 0/0 |
1446 | - </td> |
1447 | - </tr> |
1448 | - <tr> |
1449 | - <td valign="top"> |
1450 | - fn-available-environment-variables |
1451 | - </td> |
1452 | - <td align="center" bgcolor="mediumseagreen"> |
1453 | - 1/1 |
1454 | - </td> |
1455 | - </tr> |
1456 | - <tr> |
1457 | - <td valign="top"> |
1458 | - fn-avg |
1459 | - </td> |
1460 | - <td align="center" bgcolor="mediumseagreen"> |
1461 | - 237/237 |
1462 | - </td> |
1463 | - </tr> |
1464 | - <tr> |
1465 | - <td valign="top"> |
1466 | - fn-base-uri |
1467 | - </td> |
1468 | - <td align="center" bgcolor="mediumseagreen"> |
1469 | - 62/62 |
1470 | - </td> |
1471 | - </tr> |
1472 | - <tr> |
1473 | - <td valign="top"> |
1474 | - fn-boolean |
1475 | - </td> |
1476 | - <td align="center" bgcolor="mediumseagreen"> |
1477 | - 136/136 |
1478 | - </td> |
1479 | - </tr> |
1480 | - <tr> |
1481 | - <td valign="top"> |
1482 | - fn-ceiling |
1483 | - </td> |
1484 | - <td align="center" bgcolor="mediumseagreen"> |
1485 | - 87/87 |
1486 | - </td> |
1487 | - </tr> |
1488 | - <tr> |
1489 | - <td valign="top"> |
1490 | - fn-codepoint-equal |
1491 | - </td> |
1492 | - <td align="center" bgcolor="mediumseagreen"> |
1493 | - 36/36 |
1494 | - </td> |
1495 | - </tr> |
1496 | - <tr> |
1497 | - <td valign="top"> |
1498 | - fn-codepoints-to-string |
1499 | - </td> |
1500 | - <td align="center" bgcolor="mediumseagreen"> |
1501 | - 76/76 |
1502 | - </td> |
1503 | - </tr> |
1504 | - <tr> |
1505 | - <td valign="top"> |
1506 | - fn-collection |
1507 | - </td> |
1508 | - <td align="center" bgcolor="coral"> |
1509 | - 18/29 |
1510 | - </td> |
1511 | - </tr> |
1512 | - <tr> |
1513 | - <td valign="top"> |
1514 | - fn-compare |
1515 | - </td> |
1516 | - <td align="center" bgcolor="palegreen"> |
1517 | - 63/64 |
1518 | - </td> |
1519 | - </tr> |
1520 | - <tr> |
1521 | - <td valign="top"> |
1522 | - fn-concat |
1523 | - </td> |
1524 | - <td align="center" bgcolor="mediumseagreen"> |
1525 | - 95/95 |
1526 | - </td> |
1527 | - </tr> |
1528 | - <tr> |
1529 | - <td valign="top"> |
1530 | - fn-contains |
1531 | - </td> |
1532 | - <td align="center" bgcolor="mediumseagreen"> |
1533 | - 41/41 |
1534 | - </td> |
1535 | - </tr> |
1536 | - <tr> |
1537 | - <td valign="top"> |
1538 | - fn-count |
1539 | - </td> |
1540 | - <td align="center" bgcolor="mediumseagreen"> |
1541 | - 316/316 |
1542 | - </td> |
1543 | - </tr> |
1544 | - <tr> |
1545 | - <td valign="top"> |
1546 | - fn-current-date |
1547 | - </td> |
1548 | - <td align="center" bgcolor="mediumseagreen"> |
1549 | - 26/26 |
1550 | - </td> |
1551 | - </tr> |
1552 | - <tr> |
1553 | - <td valign="top"> |
1554 | - fn-current-dateTime |
1555 | - </td> |
1556 | - <td align="center" bgcolor="mediumseagreen"> |
1557 | - 27/27 |
1558 | - </td> |
1559 | - </tr> |
1560 | - <tr> |
1561 | - <td valign="top"> |
1562 | - fn-current-time |
1563 | - </td> |
1564 | - <td align="center" bgcolor="mediumseagreen"> |
1565 | - 24/24 |
1566 | - </td> |
1567 | - </tr> |
1568 | - <tr> |
1569 | - <td valign="top"> |
1570 | - fn-data |
1571 | - </td> |
1572 | - <td align="center" bgcolor="mediumseagreen"> |
1573 | - 53/53 |
1574 | - </td> |
1575 | - </tr> |
1576 | - <tr> |
1577 | - <td valign="top"> |
1578 | - fn-dateTime |
1579 | - </td> |
1580 | - <td align="center" bgcolor="mediumseagreen"> |
1581 | - 52/52 |
1582 | - </td> |
1583 | - </tr> |
1584 | - <tr> |
1585 | - <td valign="top"> |
1586 | - fn-day-from-date |
1587 | - </td> |
1588 | - <td align="center" bgcolor="mediumseagreen"> |
1589 | - 27/27 |
1590 | - </td> |
1591 | - </tr> |
1592 | - <tr> |
1593 | - <td valign="top"> |
1594 | - fn-day-from-dateTime |
1595 | - </td> |
1596 | - <td align="center" bgcolor="mediumseagreen"> |
1597 | - 27/27 |
1598 | - </td> |
1599 | - </tr> |
1600 | - <tr> |
1601 | - <td valign="top"> |
1602 | - fn-days-from-duration |
1603 | - </td> |
1604 | - <td align="center" bgcolor="mediumseagreen"> |
1605 | - 31/31 |
1606 | - </td> |
1607 | - </tr> |
1608 | - <tr> |
1609 | - <td valign="top"> |
1610 | - fn-deep-equal |
1611 | - </td> |
1612 | - <td align="center" bgcolor="coral"> |
1613 | - 204/210 |
1614 | - </td> |
1615 | - </tr> |
1616 | - <tr> |
1617 | - <td valign="top"> |
1618 | - fn-default-collation |
1619 | - </td> |
1620 | - <td align="center" bgcolor="mediumseagreen"> |
1621 | - 7/7 |
1622 | - </td> |
1623 | - </tr> |
1624 | - <tr> |
1625 | - <td valign="top"> |
1626 | - fn-distinct-values |
1627 | - </td> |
1628 | - <td align="center" bgcolor="mediumseagreen"> |
1629 | - 104/104 |
1630 | - </td> |
1631 | - </tr> |
1632 | - <tr> |
1633 | - <td valign="top"> |
1634 | - fn-doc |
1635 | - </td> |
1636 | - <td align="center" bgcolor="mediumseagreen"> |
1637 | - 43/43 |
1638 | - </td> |
1639 | - </tr> |
1640 | - <tr> |
1641 | - <td valign="top"> |
1642 | - fn-doc-available |
1643 | - </td> |
1644 | - <td align="center" bgcolor="mediumseagreen"> |
1645 | - 13/13 |
1646 | - </td> |
1647 | - </tr> |
1648 | - <tr> |
1649 | - <td valign="top"> |
1650 | - fn-document-uri |
1651 | - </td> |
1652 | - <td align="center" bgcolor="mediumseagreen"> |
1653 | - 35/35 |
1654 | - </td> |
1655 | - </tr> |
1656 | - <tr> |
1657 | - <td valign="top"> |
1658 | - fn-element-with-id |
1659 | - </td> |
1660 | - <td align="center" bgcolor="mediumseagreen"> |
1661 | - 5/5 |
1662 | - </td> |
1663 | - </tr> |
1664 | - <tr> |
1665 | - <td valign="top"> |
1666 | - fn-empty |
1667 | - </td> |
1668 | - <td align="center" bgcolor="mediumseagreen"> |
1669 | - 54/54 |
1670 | - </td> |
1671 | - </tr> |
1672 | - <tr> |
1673 | - <td valign="top"> |
1674 | - fn-encode-for-uri |
1675 | - </td> |
1676 | - <td align="center" bgcolor="mediumseagreen"> |
1677 | - 29/29 |
1678 | - </td> |
1679 | - </tr> |
1680 | - <tr> |
1681 | - <td valign="top"> |
1682 | - fn-ends-with |
1683 | - </td> |
1684 | - <td align="center" bgcolor="mediumseagreen"> |
1685 | - 38/38 |
1686 | - </td> |
1687 | - </tr> |
1688 | - <tr> |
1689 | - <td valign="top"> |
1690 | - fn-environment-variable |
1691 | - </td> |
1692 | - <td align="center" bgcolor="mediumseagreen"> |
1693 | - 3/3 |
1694 | - </td> |
1695 | - </tr> |
1696 | - <tr> |
1697 | - <td valign="top"> |
1698 | - fn-error |
1699 | - </td> |
1700 | - <td align="center" bgcolor="mediumseagreen"> |
1701 | - 97/97 |
1702 | - </td> |
1703 | - </tr> |
1704 | - <tr> |
1705 | - <td valign="top"> |
1706 | - fn-escape-html-uri |
1707 | - </td> |
1708 | - <td align="center" bgcolor="mediumseagreen"> |
1709 | - 34/34 |
1710 | - </td> |
1711 | - </tr> |
1712 | - <tr> |
1713 | - <td valign="top"> |
1714 | - fn-exactly-one |
1715 | - </td> |
1716 | - <td align="center" bgcolor="mediumseagreen"> |
1717 | - 54/54 |
1718 | - </td> |
1719 | - </tr> |
1720 | - <tr> |
1721 | - <td valign="top"> |
1722 | - fn-exists |
1723 | - </td> |
1724 | - <td align="center" bgcolor="mediumseagreen"> |
1725 | - 58/58 |
1726 | - </td> |
1727 | - </tr> |
1728 | - <tr> |
1729 | - <td valign="top"> |
1730 | - fn-false |
1731 | - </td> |
1732 | - <td align="center" bgcolor="mediumseagreen"> |
1733 | - 24/24 |
1734 | - </td> |
1735 | - </tr> |
1736 | - <tr> |
1737 | - <td valign="top"> |
1738 | - fn-filter |
1739 | - </td> |
1740 | - <td align="center" bgcolor="white"> |
1741 | - 0/0 |
1742 | - </td> |
1743 | - </tr> |
1744 | - <tr> |
1745 | - <td valign="top"> |
1746 | - fn-floor |
1747 | - </td> |
1748 | - <td align="center" bgcolor="mediumseagreen"> |
1749 | - 88/88 |
1750 | - </td> |
1751 | - </tr> |
1752 | - <tr> |
1753 | - <td valign="top"> |
1754 | - fn-fold-left |
1755 | - </td> |
1756 | - <td align="center" bgcolor="white"> |
1757 | - 0/0 |
1758 | - </td> |
1759 | - </tr> |
1760 | - <tr> |
1761 | - <td valign="top"> |
1762 | - fn-fold-right |
1763 | - </td> |
1764 | - <td align="center" bgcolor="white"> |
1765 | - 0/0 |
1766 | - </td> |
1767 | - </tr> |
1768 | - <tr> |
1769 | - <td valign="top"> |
1770 | - fn-format-date |
1771 | - </td> |
1772 | - <td align="center" bgcolor="white"> |
1773 | - 0/0 |
1774 | - </td> |
1775 | - </tr> |
1776 | - <tr> |
1777 | - <td valign="top"> |
1778 | - fn-format-dateTime |
1779 | - </td> |
1780 | - <td align="center" bgcolor="white"> |
1781 | - 0/0 |
1782 | - </td> |
1783 | - </tr> |
1784 | - <tr> |
1785 | - <td valign="top"> |
1786 | - fn-format-integer |
1787 | - </td> |
1788 | - <td align="center" bgcolor="white"> |
1789 | - 0/0 |
1790 | - </td> |
1791 | - </tr> |
1792 | - <tr> |
1793 | - <td valign="top"> |
1794 | - fn-format-number |
1795 | - </td> |
1796 | - <td align="center" bgcolor="white"> |
1797 | - 0/0 |
1798 | - </td> |
1799 | - </tr> |
1800 | - <tr> |
1801 | - <td valign="top"> |
1802 | - fn-format-time |
1803 | - </td> |
1804 | - <td align="center" bgcolor="white"> |
1805 | - 0/0 |
1806 | - </td> |
1807 | - </tr> |
1808 | - <tr> |
1809 | - <td valign="top"> |
1810 | - fn-function-lookup |
1811 | - </td> |
1812 | - <td align="center" bgcolor="white"> |
1813 | - 0/0 |
1814 | - </td> |
1815 | - </tr> |
1816 | - <tr> |
1817 | - <td valign="top"> |
1818 | - fn-function-arity |
1819 | - </td> |
1820 | - <td align="center" bgcolor="white"> |
1821 | - 0/0 |
1822 | - </td> |
1823 | - </tr> |
1824 | - <tr> |
1825 | - <td valign="top"> |
1826 | - fn-function-name |
1827 | - </td> |
1828 | - <td align="center" bgcolor="white"> |
1829 | - 0/0 |
1830 | - </td> |
1831 | - </tr> |
1832 | - <tr> |
1833 | - <td valign="top"> |
1834 | - fn-generate-id |
1835 | - </td> |
1836 | - <td align="center" bgcolor="white"> |
1837 | - 0/0 |
1838 | - </td> |
1839 | - </tr> |
1840 | - <tr> |
1841 | - <td valign="top"> |
1842 | - fn-has-children |
1843 | - </td> |
1844 | - <td align="center" bgcolor="white"> |
1845 | - 0/0 |
1846 | - </td> |
1847 | - </tr> |
1848 | - <tr> |
1849 | - <td valign="top"> |
1850 | - fn-head |
1851 | - </td> |
1852 | - <td align="center" bgcolor="white"> |
1853 | - 0/0 |
1854 | - </td> |
1855 | - </tr> |
1856 | - <tr> |
1857 | - <td valign="top"> |
1858 | - fn-hours-from-dateTime |
1859 | - </td> |
1860 | - <td align="center" bgcolor="mediumseagreen"> |
1861 | - 27/27 |
1862 | - </td> |
1863 | - </tr> |
1864 | - <tr> |
1865 | - <td valign="top"> |
1866 | - fn-hours-from-duration |
1867 | - </td> |
1868 | - <td align="center" bgcolor="mediumseagreen"> |
1869 | - 31/31 |
1870 | - </td> |
1871 | - </tr> |
1872 | - <tr> |
1873 | - <td valign="top"> |
1874 | - fn-hours-from-time |
1875 | - </td> |
1876 | - <td align="center" bgcolor="mediumseagreen"> |
1877 | - 27/27 |
1878 | - </td> |
1879 | - </tr> |
1880 | - <tr> |
1881 | - <td valign="top"> |
1882 | - fn-id |
1883 | - </td> |
1884 | - <td align="center" bgcolor="coral"> |
1885 | - 39/41 |
1886 | - </td> |
1887 | - </tr> |
1888 | - <tr> |
1889 | - <td valign="top"> |
1890 | - fn-idref |
1891 | - </td> |
1892 | - <td align="center" bgcolor="mediumseagreen"> |
1893 | - 30/30 |
1894 | - </td> |
1895 | - </tr> |
1896 | - <tr> |
1897 | - <td valign="top"> |
1898 | - fn-implicit-timezone |
1899 | - </td> |
1900 | - <td align="center" bgcolor="mediumseagreen"> |
1901 | - 27/27 |
1902 | - </td> |
1903 | - </tr> |
1904 | - <tr> |
1905 | - <td valign="top"> |
1906 | - fn-innermost |
1907 | - </td> |
1908 | - <td align="center" bgcolor="white"> |
1909 | - 0/0 |
1910 | - </td> |
1911 | - </tr> |
1912 | - <tr> |
1913 | - <td valign="top"> |
1914 | - fn-index-of |
1915 | - </td> |
1916 | - <td align="center" bgcolor="mediumseagreen"> |
1917 | - 53/53 |
1918 | - </td> |
1919 | - </tr> |
1920 | - <tr> |
1921 | - <td valign="top"> |
1922 | - fn-insert-before |
1923 | - </td> |
1924 | - <td align="center" bgcolor="mediumseagreen"> |
1925 | - 43/43 |
1926 | - </td> |
1927 | - </tr> |
1928 | - <tr> |
1929 | - <td valign="top"> |
1930 | - fn-in-scope-prefixes |
1931 | - </td> |
1932 | - <td align="center" bgcolor="mediumseagreen"> |
1933 | - 58/58 |
1934 | - </td> |
1935 | - </tr> |
1936 | - <tr> |
1937 | - <td valign="top"> |
1938 | - fn-iri-to-uri |
1939 | - </td> |
1940 | - <td align="center" bgcolor="mediumseagreen"> |
1941 | - 46/46 |
1942 | - </td> |
1943 | - </tr> |
1944 | - <tr> |
1945 | - <td valign="top"> |
1946 | - fn-lang |
1947 | - </td> |
1948 | - <td align="center" bgcolor="mediumseagreen"> |
1949 | - 36/36 |
1950 | - </td> |
1951 | - </tr> |
1952 | - <tr> |
1953 | - <td valign="top"> |
1954 | - fn-last |
1955 | - </td> |
1956 | - <td align="center" bgcolor="mediumseagreen"> |
1957 | - 65/65 |
1958 | - </td> |
1959 | - </tr> |
1960 | - <tr> |
1961 | - <td valign="top"> |
1962 | - fn-local-name |
1963 | - </td> |
1964 | - <td align="center" bgcolor="mediumseagreen"> |
1965 | - 59/59 |
1966 | - </td> |
1967 | - </tr> |
1968 | - <tr> |
1969 | - <td valign="top"> |
1970 | - fn-local-name-from-QName |
1971 | - </td> |
1972 | - <td align="center" bgcolor="mediumseagreen"> |
1973 | - 24/24 |
1974 | - </td> |
1975 | - </tr> |
1976 | - <tr> |
1977 | - <td valign="top"> |
1978 | - fn-lower-case |
1979 | - </td> |
1980 | - <td align="center" bgcolor="mediumseagreen"> |
1981 | - 24/24 |
1982 | - </td> |
1983 | - </tr> |
1984 | - <tr> |
1985 | - <td valign="top"> |
1986 | - fn-map |
1987 | - </td> |
1988 | - <td align="center" bgcolor="white"> |
1989 | - 0/0 |
1990 | - </td> |
1991 | - </tr> |
1992 | - <tr> |
1993 | - <td valign="top"> |
1994 | - fn-max |
1995 | - </td> |
1996 | - <td align="center" bgcolor="mediumseagreen"> |
1997 | - 201/201 |
1998 | - </td> |
1999 | - </tr> |
2000 | - <tr> |
2001 | - <td valign="top"> |
2002 | - fn-map-pairs |
2003 | - </td> |
2004 | - <td align="center" bgcolor="white"> |
2005 | - 0/0 |
2006 | - </td> |
2007 | - </tr> |
2008 | - <tr> |
2009 | - <td valign="top"> |
2010 | - fn-matches |
2011 | - </td> |
2012 | - <td align="center" bgcolor="palegreen"> |
2013 | - 145/146 |
2014 | - </td> |
2015 | - </tr> |
2016 | - <tr> |
2017 | - <td valign="top"> |
2018 | - fn-matches.re |
2019 | - </td> |
2020 | - <td align="center" bgcolor="mediumseagreen"> |
2021 | - 1/1 |
2022 | - </td> |
2023 | - </tr> |
2024 | - <tr> |
2025 | - <td valign="top"> |
2026 | - fn-min |
2027 | - </td> |
2028 | - <td align="center" bgcolor="mediumseagreen"> |
2029 | - 200/200 |
2030 | - </td> |
2031 | - </tr> |
2032 | - <tr> |
2033 | - <td valign="top"> |
2034 | - fn-minutes-from-dateTime |
2035 | - </td> |
2036 | - <td align="center" bgcolor="mediumseagreen"> |
2037 | - 27/27 |
2038 | - </td> |
2039 | - </tr> |
2040 | - <tr> |
2041 | - <td valign="top"> |
2042 | - fn-minutes-from-duration |
2043 | - </td> |
2044 | - <td align="center" bgcolor="mediumseagreen"> |
2045 | - 32/32 |
2046 | - </td> |
2047 | - </tr> |
2048 | - <tr> |
2049 | - <td valign="top"> |
2050 | - fn-minutes-from-time |
2051 | - </td> |
2052 | - <td align="center" bgcolor="mediumseagreen"> |
2053 | - 27/27 |
2054 | - </td> |
2055 | - </tr> |
2056 | - <tr> |
2057 | - <td valign="top"> |
2058 | - fn-month-from-date |
2059 | - </td> |
2060 | - <td align="center" bgcolor="mediumseagreen"> |
2061 | - 27/27 |
2062 | - </td> |
2063 | - </tr> |
2064 | - <tr> |
2065 | - <td valign="top"> |
2066 | - fn-months-from-duration |
2067 | - </td> |
2068 | - <td align="center" bgcolor="mediumseagreen"> |
2069 | - 31/31 |
2070 | - </td> |
2071 | - </tr> |
2072 | - <tr> |
2073 | - <td valign="top"> |
2074 | - fn-month-from-dateTime |
2075 | - </td> |
2076 | - <td align="center" bgcolor="mediumseagreen"> |
2077 | - 27/27 |
2078 | - </td> |
2079 | - </tr> |
2080 | - <tr> |
2081 | - <td valign="top"> |
2082 | - fn-name |
2083 | - </td> |
2084 | - <td align="center" bgcolor="mediumseagreen"> |
2085 | - 33/33 |
2086 | - </td> |
2087 | - </tr> |
2088 | - <tr> |
2089 | - <td valign="top"> |
2090 | - fn-namespace-uri |
2091 | - </td> |
2092 | - <td align="center" bgcolor="mediumseagreen"> |
2093 | - 33/33 |
2094 | - </td> |
2095 | - </tr> |
2096 | - <tr> |
2097 | - <td valign="top"> |
2098 | - fn-namespace-uri-for-prefix |
2099 | - </td> |
2100 | - <td align="center" bgcolor="mediumseagreen"> |
2101 | - 29/29 |
2102 | - </td> |
2103 | - </tr> |
2104 | - <tr> |
2105 | - <td valign="top"> |
2106 | - fn-namespace-uri-from-QName |
2107 | - </td> |
2108 | - <td align="center" bgcolor="mediumseagreen"> |
2109 | - 29/29 |
2110 | - </td> |
2111 | - </tr> |
2112 | - <tr> |
2113 | - <td valign="top"> |
2114 | - fn-nilled |
2115 | - </td> |
2116 | - <td align="center" bgcolor="mediumseagreen"> |
2117 | - 54/54 |
2118 | - </td> |
2119 | - </tr> |
2120 | - <tr> |
2121 | - <td valign="top"> |
2122 | - fn-node-name |
2123 | - </td> |
2124 | - <td align="center" bgcolor="mediumseagreen"> |
2125 | - 35/35 |
2126 | - </td> |
2127 | - </tr> |
2128 | - <tr> |
2129 | - <td valign="top"> |
2130 | - fn-normalize-space |
2131 | - </td> |
2132 | - <td align="center" bgcolor="coral"> |
2133 | - 37/39 |
2134 | - </td> |
2135 | - </tr> |
2136 | - <tr> |
2137 | - <td valign="top"> |
2138 | - fn-normalize-unicode |
2139 | - </td> |
2140 | - <td align="center" bgcolor="coral"> |
2141 | - 41/44 |
2142 | - </td> |
2143 | - </tr> |
2144 | - <tr> |
2145 | - <td valign="top"> |
2146 | - fn-not |
2147 | - </td> |
2148 | - <td align="center" bgcolor="mediumseagreen"> |
2149 | - 83/83 |
2150 | - </td> |
2151 | - </tr> |
2152 | - <tr> |
2153 | - <td valign="top"> |
2154 | - fn-number |
2155 | - </td> |
2156 | - <td align="center" bgcolor="mediumseagreen"> |
2157 | - 66/66 |
2158 | - </td> |
2159 | - </tr> |
2160 | - <tr> |
2161 | - <td valign="top"> |
2162 | - fn-one-or-more |
2163 | - </td> |
2164 | - <td align="center" bgcolor="mediumseagreen"> |
2165 | - 56/56 |
2166 | - </td> |
2167 | - </tr> |
2168 | - <tr> |
2169 | - <td valign="top"> |
2170 | - fn-outermost |
2171 | - </td> |
2172 | - <td align="center" bgcolor="white"> |
2173 | - 0/0 |
2174 | - </td> |
2175 | - </tr> |
2176 | - <tr> |
2177 | - <td valign="top"> |
2178 | - fn-parse-json |
2179 | - </td> |
2180 | - <td align="center" bgcolor="white"> |
2181 | - 0/0 |
2182 | - </td> |
2183 | - </tr> |
2184 | - <tr> |
2185 | - <td valign="top"> |
2186 | - fn-parse-xml |
2187 | - </td> |
2188 | - <td align="center" bgcolor="white"> |
2189 | - 0/0 |
2190 | - </td> |
2191 | - </tr> |
2192 | - <tr> |
2193 | - <td valign="top"> |
2194 | - fn-parse-xml-fragment |
2195 | - </td> |
2196 | - <td align="center" bgcolor="white"> |
2197 | - 0/0 |
2198 | - </td> |
2199 | - </tr> |
2200 | - <tr> |
2201 | - <td valign="top"> |
2202 | - fn-path |
2203 | - </td> |
2204 | - <td align="center" bgcolor="white"> |
2205 | - 0/0 |
2206 | - </td> |
2207 | - </tr> |
2208 | - <tr> |
2209 | - <td valign="top"> |
2210 | - fn-position |
2211 | - </td> |
2212 | - <td align="center" bgcolor="mediumseagreen"> |
2213 | - 66/66 |
2214 | - </td> |
2215 | - </tr> |
2216 | - <tr> |
2217 | - <td valign="top"> |
2218 | - fn-prefix-from-QName |
2219 | - </td> |
2220 | - <td align="center" bgcolor="mediumseagreen"> |
2221 | - 24/24 |
2222 | - </td> |
2223 | - </tr> |
2224 | - <tr> |
2225 | - <td valign="top"> |
2226 | - fn-QName |
2227 | - </td> |
2228 | - <td align="center" bgcolor="mediumseagreen"> |
2229 | - 34/34 |
2230 | - </td> |
2231 | - </tr> |
2232 | - <tr> |
2233 | - <td valign="top"> |
2234 | - fn-remove |
2235 | - </td> |
2236 | - <td align="center" bgcolor="mediumseagreen"> |
2237 | - 48/48 |
2238 | - </td> |
2239 | - </tr> |
2240 | - <tr> |
2241 | - <td valign="top"> |
2242 | - fn-replace |
2243 | - </td> |
2244 | - <td align="center" bgcolor="palegreen"> |
2245 | - 72/73 |
2246 | - </td> |
2247 | - </tr> |
2248 | - <tr> |
2249 | - <td valign="top"> |
2250 | - fn-resolve-QName |
2251 | - </td> |
2252 | - <td align="center" bgcolor="mediumseagreen"> |
2253 | - 27/27 |
2254 | - </td> |
2255 | - </tr> |
2256 | - <tr> |
2257 | - <td valign="top"> |
2258 | - fn-resolve-uri |
2259 | - </td> |
2260 | - <td align="center" bgcolor="coral"> |
2261 | - 36/38 |
2262 | - </td> |
2263 | - </tr> |
2264 | - <tr> |
2265 | - <td valign="top"> |
2266 | - fn-reverse |
2267 | - </td> |
2268 | - <td align="center" bgcolor="mediumseagreen"> |
2269 | - 70/70 |
2270 | - </td> |
2271 | - </tr> |
2272 | - <tr> |
2273 | - <td valign="top"> |
2274 | - fn-root |
2275 | - </td> |
2276 | - <td align="center" bgcolor="mediumseagreen"> |
2277 | - 36/36 |
2278 | - </td> |
2279 | - </tr> |
2280 | - <tr> |
2281 | - <td valign="top"> |
2282 | - fn-round |
2283 | - </td> |
2284 | - <td align="center" bgcolor="mediumseagreen"> |
2285 | - 245/245 |
2286 | - </td> |
2287 | - </tr> |
2288 | - <tr> |
2289 | - <td valign="top"> |
2290 | - fn-round-half-to-even |
2291 | - </td> |
2292 | - <td align="center" bgcolor="mediumseagreen"> |
2293 | - 128/128 |
2294 | - </td> |
2295 | - </tr> |
2296 | - <tr> |
2297 | - <td valign="top"> |
2298 | - fn-seconds-from-dateTime |
2299 | - </td> |
2300 | - <td align="center" bgcolor="mediumseagreen"> |
2301 | - 27/27 |
2302 | - </td> |
2303 | - </tr> |
2304 | - <tr> |
2305 | - <td valign="top"> |
2306 | - fn-seconds-from-duration |
2307 | - </td> |
2308 | - <td align="center" bgcolor="mediumseagreen"> |
2309 | - 32/32 |
2310 | - </td> |
2311 | - </tr> |
2312 | - <tr> |
2313 | - <td valign="top"> |
2314 | - fn-seconds-from-time |
2315 | - </td> |
2316 | - <td align="center" bgcolor="mediumseagreen"> |
2317 | - 27/27 |
2318 | - </td> |
2319 | - </tr> |
2320 | - <tr> |
2321 | - <td valign="top"> |
2322 | - fn-serialize |
2323 | - </td> |
2324 | - <td align="center" bgcolor="white"> |
2325 | - 0/0 |
2326 | - </td> |
2327 | - </tr> |
2328 | - <tr> |
2329 | - <td valign="top"> |
2330 | - fn-serialize-json |
2331 | - </td> |
2332 | - <td align="center" bgcolor="white"> |
2333 | - 0/0 |
2334 | - </td> |
2335 | - </tr> |
2336 | - <tr> |
2337 | - <td valign="top"> |
2338 | - fn-starts-with |
2339 | - </td> |
2340 | - <td align="center" bgcolor="mediumseagreen"> |
2341 | - 39/39 |
2342 | - </td> |
2343 | - </tr> |
2344 | - <tr> |
2345 | - <td valign="top"> |
2346 | - fn-static-base-uri |
2347 | - </td> |
2348 | - <td align="center" bgcolor="mediumseagreen"> |
2349 | - 18/18 |
2350 | - </td> |
2351 | - </tr> |
2352 | - <tr> |
2353 | - <td valign="top"> |
2354 | - fn-string |
2355 | - </td> |
2356 | - <td align="center" bgcolor="mediumseagreen"> |
2357 | - 62/62 |
2358 | - </td> |
2359 | - </tr> |
2360 | - <tr> |
2361 | - <td valign="top"> |
2362 | - fn-string-join |
2363 | - </td> |
2364 | - <td align="center" bgcolor="mediumseagreen"> |
2365 | - 34/34 |
2366 | - </td> |
2367 | - </tr> |
2368 | - <tr> |
2369 | - <td valign="top"> |
2370 | - fn-string-length |
2371 | - </td> |
2372 | - <td align="center" bgcolor="coral"> |
2373 | - 33/35 |
2374 | - </td> |
2375 | - </tr> |
2376 | - <tr> |
2377 | - <td valign="top"> |
2378 | - fn-string-to-codepoints |
2379 | - </td> |
2380 | - <td align="center" bgcolor="mediumseagreen"> |
2381 | - 44/44 |
2382 | - </td> |
2383 | - </tr> |
2384 | - <tr> |
2385 | - <td valign="top"> |
2386 | - fn-subsequence |
2387 | - </td> |
2388 | - <td align="center" bgcolor="mediumseagreen"> |
2389 | - 103/103 |
2390 | - </td> |
2391 | - </tr> |
2392 | - <tr> |
2393 | - <td valign="top"> |
2394 | - fn-substring |
2395 | - </td> |
2396 | - <td align="center" bgcolor="mediumseagreen"> |
2397 | - 48/48 |
2398 | - </td> |
2399 | - </tr> |
2400 | - <tr> |
2401 | - <td valign="top"> |
2402 | - fn-substring-after |
2403 | - </td> |
2404 | - <td align="center" bgcolor="coral"> |
2405 | - 36/37 |
2406 | - </td> |
2407 | - </tr> |
2408 | - <tr> |
2409 | - <td valign="top"> |
2410 | - fn-substring-before |
2411 | - </td> |
2412 | - <td align="center" bgcolor="coral"> |
2413 | - 35/36 |
2414 | - </td> |
2415 | - </tr> |
2416 | - <tr> |
2417 | - <td valign="top"> |
2418 | - fn-sum |
2419 | - </td> |
2420 | - <td align="center" bgcolor="mediumseagreen"> |
2421 | - 218/218 |
2422 | - </td> |
2423 | - </tr> |
2424 | - <tr> |
2425 | - <td valign="top"> |
2426 | - fn-tail |
2427 | - </td> |
2428 | - <td align="center" bgcolor="white"> |
2429 | - 0/0 |
2430 | - </td> |
2431 | - </tr> |
2432 | - <tr> |
2433 | - <td valign="top"> |
2434 | - fn-timezone-from-date |
2435 | - </td> |
2436 | - <td align="center" bgcolor="mediumseagreen"> |
2437 | - 34/34 |
2438 | - </td> |
2439 | - </tr> |
2440 | - <tr> |
2441 | - <td valign="top"> |
2442 | - fn-timezone-from-dateTime |
2443 | - </td> |
2444 | - <td align="center" bgcolor="mediumseagreen"> |
2445 | - 27/27 |
2446 | - </td> |
2447 | - </tr> |
2448 | - <tr> |
2449 | - <td valign="top"> |
2450 | - fn-timezone-from-time |
2451 | - </td> |
2452 | - <td align="center" bgcolor="mediumseagreen"> |
2453 | - 27/27 |
2454 | - </td> |
2455 | - </tr> |
2456 | - <tr> |
2457 | - <td valign="top"> |
2458 | - fn-tokenize |
2459 | - </td> |
2460 | - <td align="center" bgcolor="mediumseagreen"> |
2461 | - 50/50 |
2462 | - </td> |
2463 | - </tr> |
2464 | - <tr> |
2465 | - <td valign="top"> |
2466 | - fn-trace |
2467 | - </td> |
2468 | - <td align="center" bgcolor="mediumseagreen"> |
2469 | - 27/27 |
2470 | - </td> |
2471 | - </tr> |
2472 | - <tr> |
2473 | - <td valign="top"> |
2474 | - fn-translate |
2475 | - </td> |
2476 | - <td align="center" bgcolor="mediumseagreen"> |
2477 | - 42/42 |
2478 | - </td> |
2479 | - </tr> |
2480 | - <tr> |
2481 | - <td valign="top"> |
2482 | - fn-true |
2483 | - </td> |
2484 | - <td align="center" bgcolor="mediumseagreen"> |
2485 | - 24/24 |
2486 | - </td> |
2487 | - </tr> |
2488 | - <tr> |
2489 | - <td valign="top"> |
2490 | - fn-unordered |
2491 | - </td> |
2492 | - <td align="center" bgcolor="mediumseagreen"> |
2493 | - 34/34 |
2494 | - </td> |
2495 | - </tr> |
2496 | - <tr> |
2497 | - <td valign="top"> |
2498 | - fn-unparsed-text |
2499 | - </td> |
2500 | - <td align="center" bgcolor="white"> |
2501 | - 0/0 |
2502 | - </td> |
2503 | - </tr> |
2504 | - <tr> |
2505 | - <td valign="top"> |
2506 | - fn-unparsed-text-available |
2507 | - </td> |
2508 | - <td align="center" bgcolor="white"> |
2509 | - 0/0 |
2510 | - </td> |
2511 | - </tr> |
2512 | - <tr> |
2513 | - <td valign="top"> |
2514 | - fn-unparsed-text-lines |
2515 | - </td> |
2516 | - <td align="center" bgcolor="white"> |
2517 | - 0/0 |
2518 | - </td> |
2519 | - </tr> |
2520 | - <tr> |
2521 | - <td valign="top"> |
2522 | - fn-upper-case |
2523 | - </td> |
2524 | - <td align="center" bgcolor="mediumseagreen"> |
2525 | - 24/24 |
2526 | - </td> |
2527 | - </tr> |
2528 | - <tr> |
2529 | - <td valign="top"> |
2530 | - fn-uri-collection |
2531 | - </td> |
2532 | - <td align="center" bgcolor="white"> |
2533 | - 0/0 |
2534 | - </td> |
2535 | - </tr> |
2536 | - <tr> |
2537 | - <td valign="top"> |
2538 | - fn-year-from-date |
2539 | - </td> |
2540 | - <td align="center" bgcolor="mediumseagreen"> |
2541 | - 27/27 |
2542 | - </td> |
2543 | - </tr> |
2544 | - <tr> |
2545 | - <td valign="top"> |
2546 | - fn-years-from-duration |
2547 | - </td> |
2548 | - <td align="center" bgcolor="mediumseagreen"> |
2549 | - 31/31 |
2550 | - </td> |
2551 | - </tr> |
2552 | - <tr> |
2553 | - <td valign="top"> |
2554 | - fn-year-from-dateTime |
2555 | - </td> |
2556 | - <td align="center" bgcolor="mediumseagreen"> |
2557 | - 27/27 |
2558 | - </td> |
2559 | - </tr> |
2560 | - <tr> |
2561 | - <td valign="top"> |
2562 | - fn-zero-or-one |
2563 | - </td> |
2564 | - <td align="center" bgcolor="mediumseagreen"> |
2565 | - 51/51 |
2566 | - </td> |
2567 | - </tr> |
2568 | - <tr> |
2569 | - <td valign="top"> |
2570 | - math-acos |
2571 | - </td> |
2572 | - <td align="center" bgcolor="white"> |
2573 | - 0/0 |
2574 | - </td> |
2575 | - </tr> |
2576 | - <tr> |
2577 | - <td valign="top"> |
2578 | - math-asin |
2579 | - </td> |
2580 | - <td align="center" bgcolor="white"> |
2581 | - 0/0 |
2582 | - </td> |
2583 | - </tr> |
2584 | - <tr> |
2585 | - <td valign="top"> |
2586 | - math-atan |
2587 | - </td> |
2588 | - <td align="center" bgcolor="white"> |
2589 | - 0/0 |
2590 | - </td> |
2591 | - </tr> |
2592 | - <tr> |
2593 | - <td valign="top"> |
2594 | - math-atan2 |
2595 | - </td> |
2596 | - <td align="center" bgcolor="white"> |
2597 | - 0/0 |
2598 | - </td> |
2599 | - </tr> |
2600 | - <tr> |
2601 | - <td valign="top"> |
2602 | - math-cos |
2603 | - </td> |
2604 | - <td align="center" bgcolor="white"> |
2605 | - 0/0 |
2606 | - </td> |
2607 | - </tr> |
2608 | - <tr> |
2609 | - <td valign="top"> |
2610 | - math-exp |
2611 | - </td> |
2612 | - <td align="center" bgcolor="white"> |
2613 | - 0/0 |
2614 | - </td> |
2615 | - </tr> |
2616 | - <tr> |
2617 | - <td valign="top"> |
2618 | - math-exp10 |
2619 | - </td> |
2620 | - <td align="center" bgcolor="white"> |
2621 | - 0/0 |
2622 | - </td> |
2623 | - </tr> |
2624 | - <tr> |
2625 | - <td valign="top"> |
2626 | - math-log |
2627 | - </td> |
2628 | - <td align="center" bgcolor="white"> |
2629 | - 0/0 |
2630 | - </td> |
2631 | - </tr> |
2632 | - <tr> |
2633 | - <td valign="top"> |
2634 | - math-log10 |
2635 | - </td> |
2636 | - <td align="center" bgcolor="white"> |
2637 | - 0/0 |
2638 | - </td> |
2639 | - </tr> |
2640 | - <tr> |
2641 | - <td valign="top"> |
2642 | - math-pi |
2643 | - </td> |
2644 | - <td align="center" bgcolor="white"> |
2645 | - 0/0 |
2646 | - </td> |
2647 | - </tr> |
2648 | - <tr> |
2649 | - <td valign="top"> |
2650 | - math-pow |
2651 | - </td> |
2652 | - <td align="center" bgcolor="white"> |
2653 | - 0/0 |
2654 | - </td> |
2655 | - </tr> |
2656 | - <tr> |
2657 | - <td valign="top"> |
2658 | - math-sin |
2659 | - </td> |
2660 | - <td align="center" bgcolor="white"> |
2661 | - 0/0 |
2662 | - </td> |
2663 | - </tr> |
2664 | - <tr> |
2665 | - <td valign="top"> |
2666 | - math-sqrt |
2667 | - </td> |
2668 | - <td align="center" bgcolor="white"> |
2669 | - 0/0 |
2670 | - </td> |
2671 | - </tr> |
2672 | - <tr> |
2673 | - <td valign="top"> |
2674 | - math-tan |
2675 | - </td> |
2676 | - <td align="center" bgcolor="white"> |
2677 | - 0/0 |
2678 | - </td> |
2679 | - </tr> |
2680 | - <tr> |
2681 | - <td valign="top"> |
2682 | - map-new |
2683 | - </td> |
2684 | - <td align="center" bgcolor="white"> |
2685 | - 0/0 |
2686 | - </td> |
2687 | - </tr> |
2688 | - <tr> |
2689 | - <td valign="top"> |
2690 | - map-contains |
2691 | - </td> |
2692 | - <td align="center" bgcolor="white"> |
2693 | - 0/0 |
2694 | - </td> |
2695 | - </tr> |
2696 | - <tr> |
2697 | - <td valign="top"> |
2698 | - map-get |
2699 | - </td> |
2700 | - <td align="center" bgcolor="white"> |
2701 | - 0/0 |
2702 | - </td> |
2703 | - </tr> |
2704 | - <tr> |
2705 | - <td valign="top"> |
2706 | - map-entry |
2707 | - </td> |
2708 | - <td align="center" bgcolor="white"> |
2709 | - 0/0 |
2710 | - </td> |
2711 | - </tr> |
2712 | - <tr> |
2713 | - <td valign="top"> |
2714 | - map-size |
2715 | - </td> |
2716 | - <td align="center" bgcolor="white"> |
2717 | - 0/0 |
2718 | - </td> |
2719 | - </tr> |
2720 | - <tr> |
2721 | - <td valign="top"> |
2722 | - map-keys |
2723 | - </td> |
2724 | - <td align="center" bgcolor="white"> |
2725 | - 0/0 |
2726 | - </td> |
2727 | - </tr> |
2728 | - <tr> |
2729 | - <td valign="top"> |
2730 | - map-remove |
2731 | - </td> |
2732 | - <td align="center" bgcolor="white"> |
2733 | - 0/0 |
2734 | - </td> |
2735 | - </tr> |
2736 | - <tr> |
2737 | - <td valign="top"> |
2738 | - map-collation |
2739 | - </td> |
2740 | - <td align="center" bgcolor="white"> |
2741 | - 0/0 |
2742 | - </td> |
2743 | - </tr> |
2744 | - <tr> |
2745 | - <td valign="top"> |
2746 | - xs-anyURI |
2747 | - </td> |
2748 | - <td align="center" bgcolor="coral"> |
2749 | - 11/13 |
2750 | - </td> |
2751 | - </tr> |
2752 | - <tr> |
2753 | - <td valign="top"> |
2754 | - xs-base64Binary |
2755 | - </td> |
2756 | - <td align="center" bgcolor="coral"> |
2757 | - 36/37 |
2758 | - </td> |
2759 | - </tr> |
2760 | - <tr> |
2761 | - <td valign="top"> |
2762 | - xs-dateTimeStamp |
2763 | - </td> |
2764 | - <td align="center" bgcolor="mediumseagreen"> |
2765 | - 6/6 |
2766 | - </td> |
2767 | - </tr> |
2768 | - <tr> |
2769 | - <td valign="top"> |
2770 | - xs-double |
2771 | - </td> |
2772 | - <td align="center" bgcolor="mediumseagreen"> |
2773 | - 3/3 |
2774 | - </td> |
2775 | - </tr> |
2776 | - <tr> |
2777 | - <td valign="top"> |
2778 | - xs-error |
2779 | - </td> |
2780 | - <td align="center" bgcolor="white"> |
2781 | - 0/0 |
2782 | - </td> |
2783 | - </tr> |
2784 | - <tr> |
2785 | - <td valign="top"> |
2786 | - xs-float |
2787 | - </td> |
2788 | - <td align="center" bgcolor="mediumseagreen"> |
2789 | - 5/5 |
2790 | - </td> |
2791 | - </tr> |
2792 | - <tr> |
2793 | - <td valign="top"> |
2794 | - xs-hexBinary |
2795 | - </td> |
2796 | - <td align="center" bgcolor="mediumseagreen"> |
2797 | - 1/1 |
2798 | - </td> |
2799 | - </tr> |
2800 | - <tr> |
2801 | - <td valign="top"> |
2802 | - xs-normalizedString |
2803 | - </td> |
2804 | - <td align="center" bgcolor="mediumseagreen"> |
2805 | - 6/6 |
2806 | - </td> |
2807 | - </tr> |
2808 | - <tr> |
2809 | - <td valign="top"> |
2810 | - xs-token |
2811 | - </td> |
2812 | - <td align="center" bgcolor="mediumseagreen"> |
2813 | - 6/6 |
2814 | - </td> |
2815 | - </tr> |
2816 | - <tr> |
2817 | - <td valign="top"> |
2818 | - op-add-dayTimeDurations |
2819 | - </td> |
2820 | - <td align="center" bgcolor="mediumseagreen"> |
2821 | - 61/61 |
2822 | - </td> |
2823 | - </tr> |
2824 | - <tr> |
2825 | - <td valign="top"> |
2826 | - op-add-dayTimeDuration-to-date |
2827 | - </td> |
2828 | - <td align="center" bgcolor="mediumseagreen"> |
2829 | - 25/25 |
2830 | - </td> |
2831 | - </tr> |
2832 | - <tr> |
2833 | - <td valign="top"> |
2834 | - op-add-dayTimeDuration-to-dateTime |
2835 | - </td> |
2836 | - <td align="center" bgcolor="mediumseagreen"> |
2837 | - 27/27 |
2838 | - </td> |
2839 | - </tr> |
2840 | - <tr> |
2841 | - <td valign="top"> |
2842 | - op-add-dayTimeDuration-to-time |
2843 | - </td> |
2844 | - <td align="center" bgcolor="mediumseagreen"> |
2845 | - 26/26 |
2846 | - </td> |
2847 | - </tr> |
2848 | - <tr> |
2849 | - <td valign="top"> |
2850 | - op-add-yearMonthDurations |
2851 | - </td> |
2852 | - <td align="center" bgcolor="mediumseagreen"> |
2853 | - 27/27 |
2854 | - </td> |
2855 | - </tr> |
2856 | - <tr> |
2857 | - <td valign="top"> |
2858 | - op-add-yearMonthDuration-to-date |
2859 | - </td> |
2860 | - <td align="center" bgcolor="mediumseagreen"> |
2861 | - 27/27 |
2862 | - </td> |
2863 | - </tr> |
2864 | - <tr> |
2865 | - <td valign="top"> |
2866 | - op-add-yearMonthDuration-to-dateTime |
2867 | - </td> |
2868 | - <td align="center" bgcolor="mediumseagreen"> |
2869 | - 29/29 |
2870 | - </td> |
2871 | - </tr> |
2872 | - <tr> |
2873 | - <td valign="top"> |
2874 | - op-anyURI-equal |
2875 | - </td> |
2876 | - <td align="center" bgcolor="mediumseagreen"> |
2877 | - 22/22 |
2878 | - </td> |
2879 | - </tr> |
2880 | - <tr> |
2881 | - <td valign="top"> |
2882 | - op-anyURI-greater-than |
2883 | - </td> |
2884 | - <td align="center" bgcolor="mediumseagreen"> |
2885 | - 10/10 |
2886 | - </td> |
2887 | - </tr> |
2888 | - <tr> |
2889 | - <td valign="top"> |
2890 | - op-anyURI-less-than |
2891 | - </td> |
2892 | - <td align="center" bgcolor="mediumseagreen"> |
2893 | - 8/8 |
2894 | - </td> |
2895 | - </tr> |
2896 | - <tr> |
2897 | - <td valign="top"> |
2898 | - op-bang |
2899 | - </td> |
2900 | - <td align="center" bgcolor="white"> |
2901 | - 0/0 |
2902 | - </td> |
2903 | - </tr> |
2904 | - <tr> |
2905 | - <td valign="top"> |
2906 | - op-base64Binary-equal |
2907 | - </td> |
2908 | - <td align="center" bgcolor="mediumseagreen"> |
2909 | - 30/30 |
2910 | - </td> |
2911 | - </tr> |
2912 | - <tr> |
2913 | - <td valign="top"> |
2914 | - op-boolean-equal |
2915 | - </td> |
2916 | - <td align="center" bgcolor="mediumseagreen"> |
2917 | - 55/55 |
2918 | - </td> |
2919 | - </tr> |
2920 | - <tr> |
2921 | - <td valign="top"> |
2922 | - op-boolean-greater-than |
2923 | - </td> |
2924 | - <td align="center" bgcolor="mediumseagreen"> |
2925 | - 49/49 |
2926 | - </td> |
2927 | - </tr> |
2928 | - <tr> |
2929 | - <td valign="top"> |
2930 | - op-boolean-less-than |
2931 | - </td> |
2932 | - <td align="center" bgcolor="mediumseagreen"> |
2933 | - 49/49 |
2934 | - </td> |
2935 | - </tr> |
2936 | - <tr> |
2937 | - <td valign="top"> |
2938 | - op-concat |
2939 | - </td> |
2940 | - <td align="center" bgcolor="white"> |
2941 | - 0/0 |
2942 | - </td> |
2943 | - </tr> |
2944 | - <tr> |
2945 | - <td valign="top"> |
2946 | - op-concatenate |
2947 | - </td> |
2948 | - <td align="center" bgcolor="mediumseagreen"> |
2949 | - 54/54 |
2950 | - </td> |
2951 | - </tr> |
2952 | - <tr> |
2953 | - <td valign="top"> |
2954 | - op-date-equal |
2955 | - </td> |
2956 | - <td align="center" bgcolor="mediumseagreen"> |
2957 | - 47/47 |
2958 | - </td> |
2959 | - </tr> |
2960 | - <tr> |
2961 | - <td valign="top"> |
2962 | - op-date-greater-than |
2963 | - </td> |
2964 | - <td align="center" bgcolor="mediumseagreen"> |
2965 | - 48/48 |
2966 | - </td> |
2967 | - </tr> |
2968 | - <tr> |
2969 | - <td valign="top"> |
2970 | - op-date-less-than |
2971 | - </td> |
2972 | - <td align="center" bgcolor="mediumseagreen"> |
2973 | - 48/48 |
2974 | - </td> |
2975 | - </tr> |
2976 | - <tr> |
2977 | - <td valign="top"> |
2978 | - op-dateTime-equal |
2979 | - </td> |
2980 | - <td align="center" bgcolor="mediumseagreen"> |
2981 | - 71/71 |
2982 | - </td> |
2983 | - </tr> |
2984 | - <tr> |
2985 | - <td valign="top"> |
2986 | - op-dateTime-greater-than |
2987 | - </td> |
2988 | - <td align="center" bgcolor="mediumseagreen"> |
2989 | - 44/44 |
2990 | - </td> |
2991 | - </tr> |
2992 | - <tr> |
2993 | - <td valign="top"> |
2994 | - op-dateTime-less-than |
2995 | - </td> |
2996 | - <td align="center" bgcolor="mediumseagreen"> |
2997 | - 44/44 |
2998 | - </td> |
2999 | - </tr> |
3000 | - <tr> |
3001 | - <td valign="top"> |
3002 | - op-dayTimeDuration-greater-than |
3003 | - </td> |
3004 | - <td align="center" bgcolor="mediumseagreen"> |
3005 | - 58/58 |
3006 | - </td> |
3007 | - </tr> |
3008 | - <tr> |
3009 | - <td valign="top"> |
3010 | - op-dayTimeDuration-less-than |
3011 | - </td> |
3012 | - <td align="center" bgcolor="mediumseagreen"> |
3013 | - 46/46 |
3014 | - </td> |
3015 | - </tr> |
3016 | - <tr> |
3017 | - <td valign="top"> |
3018 | - op-divide-dayTimeDuration |
3019 | - </td> |
3020 | - <td align="center" bgcolor="mediumseagreen"> |
3021 | - 55/55 |
3022 | - </td> |
3023 | - </tr> |
3024 | - <tr> |
3025 | - <td valign="top"> |
3026 | - op-divide-dayTimeDuration-by-dayTimeDuration |
3027 | - </td> |
3028 | - <td align="center" bgcolor="mediumseagreen"> |
3029 | - 25/25 |
3030 | - </td> |
3031 | - </tr> |
3032 | - <tr> |
3033 | - <td valign="top"> |
3034 | - op-divide-yearMonthDuration |
3035 | - </td> |
3036 | - <td align="center" bgcolor="mediumseagreen"> |
3037 | - 31/31 |
3038 | - </td> |
3039 | - </tr> |
3040 | - <tr> |
3041 | - <td valign="top"> |
3042 | - op-divide-yearMonthDuration-by-yearMonthDuration |
3043 | - </td> |
3044 | - <td align="center" bgcolor="mediumseagreen"> |
3045 | - 23/23 |
3046 | - </td> |
3047 | - </tr> |
3048 | - <tr> |
3049 | - <td valign="top"> |
3050 | - op-duration-equal |
3051 | - </td> |
3052 | - <td align="center" bgcolor="mediumseagreen"> |
3053 | - 158/158 |
3054 | - </td> |
3055 | - </tr> |
3056 | - <tr> |
3057 | - <td valign="top"> |
3058 | - op-except |
3059 | - </td> |
3060 | - <td align="center" bgcolor="mediumseagreen"> |
3061 | - 71/71 |
3062 | - </td> |
3063 | - </tr> |
3064 | - <tr> |
3065 | - <td valign="top"> |
3066 | - op-gDay-equal |
3067 | - </td> |
3068 | - <td align="center" bgcolor="mediumseagreen"> |
3069 | - 51/51 |
3070 | - </td> |
3071 | - </tr> |
3072 | - <tr> |
3073 | - <td valign="top"> |
3074 | - op-gMonth-equal |
3075 | - </td> |
3076 | - <td align="center" bgcolor="mediumseagreen"> |
3077 | - 45/45 |
3078 | - </td> |
3079 | - </tr> |
3080 | - <tr> |
3081 | - <td valign="top"> |
3082 | - op-gMonthDay-equal |
3083 | - </td> |
3084 | - <td align="center" bgcolor="mediumseagreen"> |
3085 | - 51/51 |
3086 | - </td> |
3087 | - </tr> |
3088 | - <tr> |
3089 | - <td valign="top"> |
3090 | - op-gYear-equal |
3091 | - </td> |
3092 | - <td align="center" bgcolor="mediumseagreen"> |
3093 | - 46/46 |
3094 | - </td> |
3095 | - </tr> |
3096 | - <tr> |
3097 | - <td valign="top"> |
3098 | - op-gYearMonth-equal |
3099 | - </td> |
3100 | - <td align="center" bgcolor="mediumseagreen"> |
3101 | - 46/46 |
3102 | - </td> |
3103 | - </tr> |
3104 | - <tr> |
3105 | - <td valign="top"> |
3106 | - op-hexBinary-equal |
3107 | - </td> |
3108 | - <td align="center" bgcolor="mediumseagreen"> |
3109 | - 32/32 |
3110 | - </td> |
3111 | - </tr> |
3112 | - <tr> |
3113 | - <td valign="top"> |
3114 | - op-intersect |
3115 | - </td> |
3116 | - <td align="center" bgcolor="mediumseagreen"> |
3117 | - 71/71 |
3118 | - </td> |
3119 | - </tr> |
3120 | - <tr> |
3121 | - <td valign="top"> |
3122 | - op-is-same-node |
3123 | - </td> |
3124 | - <td align="center" bgcolor="mediumseagreen"> |
3125 | - 37/37 |
3126 | - </td> |
3127 | - </tr> |
3128 | - <tr> |
3129 | - <td valign="top"> |
3130 | - op-multiply-dayTimeDuration |
3131 | - </td> |
3132 | - <td align="center" bgcolor="mediumseagreen"> |
3133 | - 46/46 |
3134 | - </td> |
3135 | - </tr> |
3136 | - <tr> |
3137 | - <td valign="top"> |
3138 | - op-multiply-yearMonthDuration |
3139 | - </td> |
3140 | - <td align="center" bgcolor="mediumseagreen"> |
3141 | - 44/44 |
3142 | - </td> |
3143 | - </tr> |
3144 | - <tr> |
3145 | - <td valign="top"> |
3146 | - op-node-after |
3147 | - </td> |
3148 | - <td align="center" bgcolor="mediumseagreen"> |
3149 | - 35/35 |
3150 | - </td> |
3151 | - </tr> |
3152 | - <tr> |
3153 | - <td valign="top"> |
3154 | - op-node-before |
3155 | - </td> |
3156 | - <td align="center" bgcolor="mediumseagreen"> |
3157 | - 35/35 |
3158 | - </td> |
3159 | - </tr> |
3160 | - <tr> |
3161 | - <td valign="top"> |
3162 | - op-NOTATION-equal |
3163 | - </td> |
3164 | - <td align="center" bgcolor="mediumseagreen"> |
3165 | - 22/22 |
3166 | - </td> |
3167 | - </tr> |
3168 | - <tr> |
3169 | - <td valign="top"> |
3170 | - op-numeric-add |
3171 | - </td> |
3172 | - <td align="center" bgcolor="mediumseagreen"> |
3173 | - 140/140 |
3174 | - </td> |
3175 | - </tr> |
3176 | - <tr> |
3177 | - <td valign="top"> |
3178 | - op-numeric-equal |
3179 | - </td> |
3180 | - <td align="center" bgcolor="mediumseagreen"> |
3181 | - 202/202 |
3182 | - </td> |
3183 | - </tr> |
3184 | - <tr> |
3185 | - <td valign="top"> |
3186 | - op-numeric-divide |
3187 | - </td> |
3188 | - <td align="center" bgcolor="mediumseagreen"> |
3189 | - 140/140 |
3190 | - </td> |
3191 | - </tr> |
3192 | - <tr> |
3193 | - <td valign="top"> |
3194 | - op-numeric-greater-than |
3195 | - </td> |
3196 | - <td align="center" bgcolor="mediumseagreen"> |
3197 | - 116/116 |
3198 | - </td> |
3199 | - </tr> |
3200 | - <tr> |
3201 | - <td valign="top"> |
3202 | - op-numeric-integer-divide |
3203 | - </td> |
3204 | - <td align="center" bgcolor="mediumseagreen"> |
3205 | - 136/136 |
3206 | - </td> |
3207 | - </tr> |
3208 | - <tr> |
3209 | - <td valign="top"> |
3210 | - op-numeric-less-than |
3211 | - </td> |
3212 | - <td align="center" bgcolor="mediumseagreen"> |
3213 | - 183/183 |
3214 | - </td> |
3215 | - </tr> |
3216 | - <tr> |
3217 | - <td valign="top"> |
3218 | - op-numeric-mod |
3219 | - </td> |
3220 | - <td align="center" bgcolor="mediumseagreen"> |
3221 | - 124/124 |
3222 | - </td> |
3223 | - </tr> |
3224 | - <tr> |
3225 | - <td valign="top"> |
3226 | - op-numeric-multiply |
3227 | - </td> |
3228 | - <td align="center" bgcolor="mediumseagreen"> |
3229 | - 107/107 |
3230 | - </td> |
3231 | - </tr> |
3232 | - <tr> |
3233 | - <td valign="top"> |
3234 | - op-numeric-subtract |
3235 | - </td> |
3236 | - <td align="center" bgcolor="mediumseagreen"> |
3237 | - 119/119 |
3238 | - </td> |
3239 | - </tr> |
3240 | - <tr> |
3241 | - <td valign="top"> |
3242 | - op-numeric-unary-minus |
3243 | - </td> |
3244 | - <td align="center" bgcolor="mediumseagreen"> |
3245 | - 64/64 |
3246 | - </td> |
3247 | - </tr> |
3248 | - <tr> |
3249 | - <td valign="top"> |
3250 | - op-numeric-unary-plus |
3251 | - </td> |
3252 | - <td align="center" bgcolor="mediumseagreen"> |
3253 | - 55/55 |
3254 | - </td> |
3255 | - </tr> |
3256 | - <tr> |
3257 | - <td valign="top"> |
3258 | - op-QName-equal |
3259 | - </td> |
3260 | - <td align="center" bgcolor="mediumseagreen"> |
3261 | - 38/38 |
3262 | - </td> |
3263 | - </tr> |
3264 | - <tr> |
3265 | - <td valign="top"> |
3266 | - op-string-equal |
3267 | - </td> |
3268 | - <td align="center" bgcolor="mediumseagreen"> |
3269 | - 15/15 |
3270 | - </td> |
3271 | - </tr> |
3272 | - <tr> |
3273 | - <td valign="top"> |
3274 | - op-string-greater-than |
3275 | - </td> |
3276 | - <td align="center" bgcolor="mediumseagreen"> |
3277 | - 9/9 |
3278 | - </td> |
3279 | - </tr> |
3280 | - <tr> |
3281 | - <td valign="top"> |
3282 | - op-string-less-than |
3283 | - </td> |
3284 | - <td align="center" bgcolor="mediumseagreen"> |
3285 | - 10/10 |
3286 | - </td> |
3287 | - </tr> |
3288 | - <tr> |
3289 | - <td valign="top"> |
3290 | - op-subtract-dates |
3291 | - </td> |
3292 | - <td align="center" bgcolor="mediumseagreen"> |
3293 | - 30/30 |
3294 | - </td> |
3295 | - </tr> |
3296 | - <tr> |
3297 | - <td valign="top"> |
3298 | - op-subtract-dateTimes |
3299 | - </td> |
3300 | - <td align="center" bgcolor="mediumseagreen"> |
3301 | - 30/30 |
3302 | - </td> |
3303 | - </tr> |
3304 | - <tr> |
3305 | - <td valign="top"> |
3306 | - op-subtract-dayTimeDuration-from-date |
3307 | - </td> |
3308 | - <td align="center" bgcolor="mediumseagreen"> |
3309 | - 23/23 |
3310 | - </td> |
3311 | - </tr> |
3312 | - <tr> |
3313 | - <td valign="top"> |
3314 | - op-subtract-dayTimeDuration-from-dateTime |
3315 | - </td> |
3316 | - <td align="center" bgcolor="mediumseagreen"> |
3317 | - 22/22 |
3318 | - </td> |
3319 | - </tr> |
3320 | - <tr> |
3321 | - <td valign="top"> |
3322 | - op-subtract-dayTimeDuration-from-time |
3323 | - </td> |
3324 | - <td align="center" bgcolor="mediumseagreen"> |
3325 | - 27/27 |
3326 | - </td> |
3327 | - </tr> |
3328 | - <tr> |
3329 | - <td valign="top"> |
3330 | - op-subtract-dayTimeDurations |
3331 | - </td> |
3332 | - <td align="center" bgcolor="mediumseagreen"> |
3333 | - 69/69 |
3334 | - </td> |
3335 | - </tr> |
3336 | - <tr> |
3337 | - <td valign="top"> |
3338 | - op-subtract-times |
3339 | - </td> |
3340 | - <td align="center" bgcolor="mediumseagreen"> |
3341 | - 33/33 |
3342 | - </td> |
3343 | - </tr> |
3344 | - <tr> |
3345 | - <td valign="top"> |
3346 | - op-subtract-yearMonthDuration-from-date |
3347 | - </td> |
3348 | - <td align="center" bgcolor="mediumseagreen"> |
3349 | - 25/25 |
3350 | - </td> |
3351 | - </tr> |
3352 | - <tr> |
3353 | - <td valign="top"> |
3354 | - op-subtract-yearMonthDuration-from-dateTime |
3355 | - </td> |
3356 | - <td align="center" bgcolor="mediumseagreen"> |
3357 | - 23/23 |
3358 | - </td> |
3359 | - </tr> |
3360 | - <tr> |
3361 | - <td valign="top"> |
3362 | - op-subtract-yearMonthDurations |
3363 | - </td> |
3364 | - <td align="center" bgcolor="mediumseagreen"> |
3365 | - 33/33 |
3366 | - </td> |
3367 | - </tr> |
3368 | - <tr> |
3369 | - <td valign="top"> |
3370 | - op-time-equal |
3371 | - </td> |
3372 | - <td align="center" bgcolor="mediumseagreen"> |
3373 | - 58/58 |
3374 | - </td> |
3375 | - </tr> |
3376 | - <tr> |
3377 | - <td valign="top"> |
3378 | - op-time-greater-than |
3379 | - </td> |
3380 | - <td align="center" bgcolor="mediumseagreen"> |
3381 | - 44/44 |
3382 | - </td> |
3383 | - </tr> |
3384 | - <tr> |
3385 | - <td valign="top"> |
3386 | - op-time-less-than |
3387 | - </td> |
3388 | - <td align="center" bgcolor="mediumseagreen"> |
3389 | - 44/44 |
3390 | - </td> |
3391 | - </tr> |
3392 | - <tr> |
3393 | - <td valign="top"> |
3394 | - op-to |
3395 | - </td> |
3396 | - <td align="center" bgcolor="mediumseagreen"> |
3397 | - 69/69 |
3398 | - </td> |
3399 | - </tr> |
3400 | - <tr> |
3401 | - <td valign="top"> |
3402 | - op-union |
3403 | - </td> |
3404 | - <td align="center" bgcolor="mediumseagreen"> |
3405 | - 82/82 |
3406 | - </td> |
3407 | - </tr> |
3408 | - <tr> |
3409 | - <td valign="top"> |
3410 | - op-yearMonthDuration-greater-than |
3411 | - </td> |
3412 | - <td align="center" bgcolor="mediumseagreen"> |
3413 | - 34/34 |
3414 | - </td> |
3415 | - </tr> |
3416 | - <tr> |
3417 | - <td valign="top"> |
3418 | - op-yearMonthDuration-less-than |
3419 | - </td> |
3420 | - <td align="center" bgcolor="mediumseagreen"> |
3421 | - 34/34 |
3422 | - </td> |
3423 | - </tr> |
3424 | - <tr> |
3425 | - <td valign="top"> |
3426 | - prod-AllowingEmpty |
3427 | - </td> |
3428 | - <td align="center" bgcolor="white"> |
3429 | - 0/0 |
3430 | - </td> |
3431 | - </tr> |
3432 | - <tr> |
3433 | - <td valign="top"> |
3434 | - prod-Annotation |
3435 | - </td> |
3436 | - <td align="center" bgcolor="white"> |
3437 | - 0/0 |
3438 | - </td> |
3439 | - </tr> |
3440 | - <tr> |
3441 | - <td valign="top"> |
3442 | - prod-AxisStep |
3443 | - </td> |
3444 | - <td align="center" bgcolor="mediumseagreen"> |
3445 | - 330/330 |
3446 | - </td> |
3447 | - </tr> |
3448 | - <tr> |
3449 | - <td valign="top"> |
3450 | - prod-AxisStep.abbr |
3451 | - </td> |
3452 | - <td align="center" bgcolor="mediumseagreen"> |
3453 | - 23/23 |
3454 | - </td> |
3455 | - </tr> |
3456 | - <tr> |
3457 | - <td valign="top"> |
3458 | - prod-AxisStep.ancestor |
3459 | - </td> |
3460 | - <td align="center" bgcolor="mediumseagreen"> |
3461 | - 43/43 |
3462 | - </td> |
3463 | - </tr> |
3464 | - <tr> |
3465 | - <td valign="top"> |
3466 | - prod-AxisStep.ancestor-or-self |
3467 | - </td> |
3468 | - <td align="center" bgcolor="mediumseagreen"> |
3469 | - 31/31 |
3470 | - </td> |
3471 | - </tr> |
3472 | - <tr> |
3473 | - <td valign="top"> |
3474 | - prod-AxisStep.following |
3475 | - </td> |
3476 | - <td align="center" bgcolor="mediumseagreen"> |
3477 | - 25/25 |
3478 | - </td> |
3479 | - </tr> |
3480 | - <tr> |
3481 | - <td valign="top"> |
3482 | - prod-AxisStep.following-sibling |
3483 | - </td> |
3484 | - <td align="center" bgcolor="mediumseagreen"> |
3485 | - 33/33 |
3486 | - </td> |
3487 | - </tr> |
3488 | - <tr> |
3489 | - <td valign="top"> |
3490 | - prod-AxisStep.preceding |
3491 | - </td> |
3492 | - <td align="center" bgcolor="mediumseagreen"> |
3493 | - 31/31 |
3494 | - </td> |
3495 | - </tr> |
3496 | - <tr> |
3497 | - <td valign="top"> |
3498 | - prod-AxisStep.preceding-sibling |
3499 | - </td> |
3500 | - <td align="center" bgcolor="mediumseagreen"> |
3501 | - 28/28 |
3502 | - </td> |
3503 | - </tr> |
3504 | - <tr> |
3505 | - <td valign="top"> |
3506 | - prod-AxisStep.static-typing |
3507 | - </td> |
3508 | - <td align="center" bgcolor="white"> |
3509 | - 0/0 |
3510 | - </td> |
3511 | - </tr> |
3512 | - <tr> |
3513 | - <td valign="top"> |
3514 | - prod-AxisStep.unabbr |
3515 | - </td> |
3516 | - <td align="center" bgcolor="mediumseagreen"> |
3517 | - 26/26 |
3518 | - </td> |
3519 | - </tr> |
3520 | - <tr> |
3521 | - <td valign="top"> |
3522 | - prod-BaseURIDecl |
3523 | - </td> |
3524 | - <td align="center" bgcolor="coral"> |
3525 | - 37/38 |
3526 | - </td> |
3527 | - </tr> |
3528 | - <tr> |
3529 | - <td valign="top"> |
3530 | - prod-BoundarySpaceDecl |
3531 | - </td> |
3532 | - <td align="center" bgcolor="mediumseagreen"> |
3533 | - 28/28 |
3534 | - </td> |
3535 | - </tr> |
3536 | - <tr> |
3537 | - <td valign="top"> |
3538 | - prod-CastableExpr |
3539 | - </td> |
3540 | - <td align="center" bgcolor="mediumseagreen"> |
3541 | - 799/799 |
3542 | - </td> |
3543 | - </tr> |
3544 | - <tr> |
3545 | - <td valign="top"> |
3546 | - prod-CastExpr |
3547 | - </td> |
3548 | - <td align="center" bgcolor="mediumseagreen"> |
3549 | - 2732/2732 |
3550 | - </td> |
3551 | - </tr> |
3552 | - <tr> |
3553 | - <td valign="top"> |
3554 | - prod-CastExpr.derived |
3555 | - </td> |
3556 | - <td align="center" bgcolor="palegreen"> |
3557 | - 154/155 |
3558 | - </td> |
3559 | - </tr> |
3560 | - <tr> |
3561 | - <td valign="top"> |
3562 | - prod-CastExpr.schema |
3563 | - </td> |
3564 | - <td align="center" bgcolor="mediumseagreen"> |
3565 | - 58/58 |
3566 | - </td> |
3567 | - </tr> |
3568 | - <tr> |
3569 | - <td valign="top"> |
3570 | - prod-Comment |
3571 | - </td> |
3572 | - <td align="center" bgcolor="mediumseagreen"> |
3573 | - 45/45 |
3574 | - </td> |
3575 | - </tr> |
3576 | - <tr> |
3577 | - <td valign="top"> |
3578 | - prod-CompAttrConstructor |
3579 | - </td> |
3580 | - <td align="center" bgcolor="mediumseagreen"> |
3581 | - 109/109 |
3582 | - </td> |
3583 | - </tr> |
3584 | - <tr> |
3585 | - <td valign="top"> |
3586 | - prod-CompDocConstructor |
3587 | - </td> |
3588 | - <td align="center" bgcolor="palegreen"> |
3589 | - 57/58 |
3590 | - </td> |
3591 | - </tr> |
3592 | - <tr> |
3593 | - <td valign="top"> |
3594 | - prod-CompCommentConstructor |
3595 | - </td> |
3596 | - <td align="center" bgcolor="mediumseagreen"> |
3597 | - 28/28 |
3598 | - </td> |
3599 | - </tr> |
3600 | - <tr> |
3601 | - <td valign="top"> |
3602 | - prod-CompElemConstructor |
3603 | - </td> |
3604 | - <td align="center" bgcolor="mediumseagreen"> |
3605 | - 72/72 |
3606 | - </td> |
3607 | - </tr> |
3608 | - <tr> |
3609 | - <td valign="top"> |
3610 | - prod-CompNamespaceConstructor |
3611 | - </td> |
3612 | - <td align="center" bgcolor="white"> |
3613 | - 0/0 |
3614 | - </td> |
3615 | - </tr> |
3616 | - <tr> |
3617 | - <td valign="top"> |
3618 | - prod-CompPIConstructor |
3619 | - </td> |
3620 | - <td align="center" bgcolor="mediumseagreen"> |
3621 | - 54/54 |
3622 | - </td> |
3623 | - </tr> |
3624 | - <tr> |
3625 | - <td valign="top"> |
3626 | - prod-CompTextConstructor |
3627 | - </td> |
3628 | - <td align="center" bgcolor="mediumseagreen"> |
3629 | - 35/35 |
3630 | - </td> |
3631 | - </tr> |
3632 | - <tr> |
3633 | - <td valign="top"> |
3634 | - prod-ConstructionDecl |
3635 | - </td> |
3636 | - <td align="center" bgcolor="mediumseagreen"> |
3637 | - 26/26 |
3638 | - </td> |
3639 | - </tr> |
3640 | - <tr> |
3641 | - <td valign="top"> |
3642 | - prod-ConstructionDecl.schema |
3643 | - </td> |
3644 | - <td align="center" bgcolor="mediumseagreen"> |
3645 | - 4/4 |
3646 | - </td> |
3647 | - </tr> |
3648 | - <tr> |
3649 | - <td valign="top"> |
3650 | - prod-ContextItemDecl |
3651 | - </td> |
3652 | - <td align="center" bgcolor="white"> |
3653 | - 0/0 |
3654 | - </td> |
3655 | - </tr> |
3656 | - <tr> |
3657 | - <td valign="top"> |
3658 | - prod-ContextItemExpr |
3659 | - </td> |
3660 | - <td align="center" bgcolor="mediumseagreen"> |
3661 | - 45/45 |
3662 | - </td> |
3663 | - </tr> |
3664 | - <tr> |
3665 | - <td valign="top"> |
3666 | - prod-CopyNamespacesDecl |
3667 | - </td> |
3668 | - <td align="center" bgcolor="mediumseagreen"> |
3669 | - 36/36 |
3670 | - </td> |
3671 | - </tr> |
3672 | - <tr> |
3673 | - <td valign="top"> |
3674 | - prod-CountClause |
3675 | - </td> |
3676 | - <td align="center" bgcolor="white"> |
3677 | - 0/0 |
3678 | - </td> |
3679 | - </tr> |
3680 | - <tr> |
3681 | - <td valign="top"> |
3682 | - prod-DecimalFormatDecl |
3683 | - </td> |
3684 | - <td align="center" bgcolor="white"> |
3685 | - 0/0 |
3686 | - </td> |
3687 | - </tr> |
3688 | - <tr> |
3689 | - <td valign="top"> |
3690 | - prod-DefaultCollationDecl |
3691 | - </td> |
3692 | - <td align="center" bgcolor="mediumseagreen"> |
3693 | - 8/8 |
3694 | - </td> |
3695 | - </tr> |
3696 | - <tr> |
3697 | - <td valign="top"> |
3698 | - prod-DefaultNamespaceDecl |
3699 | - </td> |
3700 | - <td align="center" bgcolor="coral"> |
3701 | - 57/59 |
3702 | - </td> |
3703 | - </tr> |
3704 | - <tr> |
3705 | - <td valign="top"> |
3706 | - prod-DirAttributeList |
3707 | - </td> |
3708 | - <td align="center" bgcolor="mediumseagreen"> |
3709 | - 124/124 |
3710 | - </td> |
3711 | - </tr> |
3712 | - <tr> |
3713 | - <td valign="top"> |
3714 | - prod-DirectConstructor |
3715 | - </td> |
3716 | - <td align="center" bgcolor="mediumseagreen"> |
3717 | - 91/91 |
3718 | - </td> |
3719 | - </tr> |
3720 | - <tr> |
3721 | - <td valign="top"> |
3722 | - prod-DirElemConstructor |
3723 | - </td> |
3724 | - <td align="center" bgcolor="mediumseagreen"> |
3725 | - 67/67 |
3726 | - </td> |
3727 | - </tr> |
3728 | - <tr> |
3729 | - <td valign="top"> |
3730 | - prod-DirElemContent |
3731 | - </td> |
3732 | - <td align="center" bgcolor="palegreen"> |
3733 | - 126/127 |
3734 | - </td> |
3735 | - </tr> |
3736 | - <tr> |
3737 | - <td valign="top"> |
3738 | - prod-DirElemContent.namespace |
3739 | - </td> |
3740 | - <td align="center" bgcolor="palegreen"> |
3741 | - 131/132 |
3742 | - </td> |
3743 | - </tr> |
3744 | - <tr> |
3745 | - <td valign="top"> |
3746 | - prod-DirElemContent.whitespace |
3747 | - </td> |
3748 | - <td align="center" bgcolor="mediumseagreen"> |
3749 | - 83/83 |
3750 | - </td> |
3751 | - </tr> |
3752 | - <tr> |
3753 | - <td valign="top"> |
3754 | - prod-EmptyOrderDecl |
3755 | - </td> |
3756 | - <td align="center" bgcolor="mediumseagreen"> |
3757 | - 32/32 |
3758 | - </td> |
3759 | - </tr> |
3760 | - <tr> |
3761 | - <td valign="top"> |
3762 | - prod-EQName |
3763 | - </td> |
3764 | - <td align="center" bgcolor="mediumseagreen"> |
3765 | - 2/2 |
3766 | - </td> |
3767 | - |
3768 | - |
3769 | - </tr> |
3770 | - <tr> |
3771 | - <td valign="top"> |
3772 | - prod-ExtensionExpr |
3773 | - </td> |
3774 | - <td align="center" bgcolor="mediumseagreen"> |
3775 | - 51/51 |
3776 | - </td> |
3777 | - </tr> |
3778 | - <tr> |
3779 | - <td valign="top"> |
3780 | - prod-FLWORExpr |
3781 | - </td> |
3782 | - <td align="center" bgcolor="mediumseagreen"> |
3783 | - 21/21 |
3784 | - </td> |
3785 | - </tr> |
3786 | - <tr> |
3787 | - <td valign="top"> |
3788 | - prod-FLWORExpr.static-typing |
3789 | - </td> |
3790 | - <td align="center" bgcolor="white"> |
3791 | - 0/0 |
3792 | - </td> |
3793 | - </tr> |
3794 | - <tr> |
3795 | - <td valign="top"> |
3796 | - prod-ForClause |
3797 | - </td> |
3798 | - <td align="center" bgcolor="mediumseagreen"> |
3799 | - 188/188 |
3800 | - </td> |
3801 | - </tr> |
3802 | - <tr> |
3803 | - <td valign="top"> |
3804 | - prod-FunctionCall |
3805 | - </td> |
3806 | - <td align="center" bgcolor="coral"> |
3807 | - 66/69 |
3808 | - </td> |
3809 | - </tr> |
3810 | - <tr> |
3811 | - <td valign="top"> |
3812 | - prod-FunctionDecl |
3813 | - </td> |
3814 | - <td align="center" bgcolor="coral"> |
3815 | - 137/152 |
3816 | - </td> |
3817 | - </tr> |
3818 | - <tr> |
3819 | - <td valign="top"> |
3820 | - prod-GeneralComp.eq |
3821 | - </td> |
3822 | - <td align="center" bgcolor="mediumseagreen"> |
3823 | - 172/172 |
3824 | - </td> |
3825 | - </tr> |
3826 | - <tr> |
3827 | - <td valign="top"> |
3828 | - prod-GeneralComp.ge |
3829 | - </td> |
3830 | - <td align="center" bgcolor="mediumseagreen"> |
3831 | - 110/110 |
3832 | - </td> |
3833 | - </tr> |
3834 | - <tr> |
3835 | - <td valign="top"> |
3836 | - prod-GeneralComp.gt |
3837 | - </td> |
3838 | - <td align="center" bgcolor="mediumseagreen"> |
3839 | - 118/118 |
3840 | - </td> |
3841 | - </tr> |
3842 | - <tr> |
3843 | - <td valign="top"> |
3844 | - prod-GeneralComp.le |
3845 | - </td> |
3846 | - <td align="center" bgcolor="mediumseagreen"> |
3847 | - 108/108 |
3848 | - </td> |
3849 | - </tr> |
3850 | - <tr> |
3851 | - <td valign="top"> |
3852 | - prod-GeneralComp.lt |
3853 | - </td> |
3854 | - <td align="center" bgcolor="mediumseagreen"> |
3855 | - 127/127 |
3856 | - </td> |
3857 | - </tr> |
3858 | - <tr> |
3859 | - <td valign="top"> |
3860 | - prod-GeneralComp.ne |
3861 | - </td> |
3862 | - <td align="center" bgcolor="mediumseagreen"> |
3863 | - 140/140 |
3864 | - </td> |
3865 | - </tr> |
3866 | - <tr> |
3867 | - <td valign="top"> |
3868 | - prod-GroupByClause |
3869 | - </td> |
3870 | - <td align="center" bgcolor="white"> |
3871 | - 0/0 |
3872 | - </td> |
3873 | - </tr> |
3874 | - <tr> |
3875 | - <td valign="top"> |
3876 | - prod-IfExpr |
3877 | - </td> |
3878 | - <td align="center" bgcolor="mediumseagreen"> |
3879 | - 42/42 |
3880 | - </td> |
3881 | - </tr> |
3882 | - <tr> |
3883 | - <td valign="top"> |
3884 | - prod-InstanceofExpr |
3885 | - </td> |
3886 | - <td align="center" bgcolor="palegreen"> |
3887 | - 277/278 |
3888 | - </td> |
3889 | - </tr> |
3890 | - <tr> |
3891 | - <td valign="top"> |
3892 | - prod-LetClause |
3893 | - </td> |
3894 | - <td align="center" bgcolor="mediumseagreen"> |
3895 | - 81/81 |
3896 | - </td> |
3897 | - </tr> |
3898 | - <tr> |
3899 | - <td valign="top"> |
3900 | - prod-Literal |
3901 | - </td> |
3902 | - <td align="center" bgcolor="palegreen"> |
3903 | - 163/166 |
3904 | - </td> |
3905 | - </tr> |
3906 | - <tr> |
3907 | - <td valign="top"> |
3908 | - prod-ModuleImport |
3909 | - </td> |
3910 | - <td align="center" bgcolor="coral"> |
3911 | - 72/80 |
3912 | - </td> |
3913 | - </tr> |
3914 | - <tr> |
3915 | - <td valign="top"> |
3916 | - prod-NamedFunctionRef |
3917 | - </td> |
3918 | - <td align="center" bgcolor="white"> |
3919 | - 0/0 |
3920 | - </td> |
3921 | - </tr> |
3922 | - <tr> |
3923 | - <td valign="top"> |
3924 | - prod-NamespaceDecl |
3925 | - </td> |
3926 | - <td align="center" bgcolor="mediumseagreen"> |
3927 | - 44/44 |
3928 | - </td> |
3929 | - </tr> |
3930 | - <tr> |
3931 | - <td valign="top"> |
3932 | - prod-NameTest |
3933 | - </td> |
3934 | - <td align="center" bgcolor="mediumseagreen"> |
3935 | - 122/122 |
3936 | - </td> |
3937 | - </tr> |
3938 | - <tr> |
3939 | - <td valign="top"> |
3940 | - prod-NodeTest |
3941 | - </td> |
3942 | - <td align="center" bgcolor="mediumseagreen"> |
3943 | - 67/67 |
3944 | - </td> |
3945 | - </tr> |
3946 | - <tr> |
3947 | - <td valign="top"> |
3948 | - prod-OptionDecl |
3949 | - </td> |
3950 | - <td align="center" bgcolor="mediumseagreen"> |
3951 | - 8/8 |
3952 | - </td> |
3953 | - </tr> |
3954 | - <tr> |
3955 | - <td valign="top"> |
3956 | - prod-OptionDecl.serialization |
3957 | - </td> |
3958 | - <td align="center" bgcolor="white"> |
3959 | - 0/0 |
3960 | - </td> |
3961 | - </tr> |
3962 | - <tr> |
3963 | - <td valign="top"> |
3964 | - prod-OrExpr |
3965 | - </td> |
3966 | - <td align="center" bgcolor="mediumseagreen"> |
3967 | - 371/371 |
3968 | - </td> |
3969 | - </tr> |
3970 | - <tr> |
3971 | - <td valign="top"> |
3972 | - prod-OrderByClause |
3973 | - </td> |
3974 | - <td align="center" bgcolor="coral"> |
3975 | - 195/201 |
3976 | - </td> |
3977 | - </tr> |
3978 | - <tr> |
3979 | - <td valign="top"> |
3980 | - prod-OrderingModeDecl |
3981 | - </td> |
3982 | - <td align="center" bgcolor="mediumseagreen"> |
3983 | - 27/27 |
3984 | - </td> |
3985 | - </tr> |
3986 | - <tr> |
3987 | - <td valign="top"> |
3988 | - prod-PathExpr |
3989 | - </td> |
3990 | - <td align="center" bgcolor="mediumseagreen"> |
3991 | - 17/17 |
3992 | - </td> |
3993 | - </tr> |
3994 | - <tr> |
3995 | - <td valign="top"> |
3996 | - prod-ParenthesizedExpr |
3997 | - </td> |
3998 | - <td align="center" bgcolor="mediumseagreen"> |
3999 | - 20/20 |
4000 | - </td> |
4001 | - </tr> |
4002 | - <tr> |
4003 | - <td valign="top"> |
4004 | - prod-PositionalVar |
4005 | - </td> |
4006 | - <td align="center" bgcolor="mediumseagreen"> |
4007 | - 34/34 |
4008 | - </td> |
4009 | - </tr> |
4010 | - <tr> |
4011 | - <td valign="top"> |
4012 | - prod-Predicate |
4013 | - </td> |
4014 | - <td align="center" bgcolor="mediumseagreen"> |
4015 | - 190/190 |
4016 | - </td> |
4017 | - </tr> |
4018 | - <tr> |
4019 | - <td valign="top"> |
4020 | - prod-QuantifiedExpr |
4021 | - </td> |
4022 | - <td align="center" bgcolor="mediumseagreen"> |
4023 | - 200/200 |
4024 | - </td> |
4025 | - </tr> |
4026 | - <tr> |
4027 | - <td valign="top"> |
4028 | - prod-RequireProhibitFeature |
4029 | - </td> |
4030 | - <td align="center" bgcolor="white"> |
4031 | - 0/0 |
4032 | - </td> |
4033 | - </tr> |
4034 | - <tr> |
4035 | - <td valign="top"> |
4036 | - prod-ReturnClause |
4037 | - </td> |
4038 | - <td align="center" bgcolor="mediumseagreen"> |
4039 | - 21/21 |
4040 | - </td> |
4041 | - </tr> |
4042 | - <tr> |
4043 | - <td valign="top"> |
4044 | - prod-SchemaImport |
4045 | - </td> |
4046 | - <td align="center" bgcolor="coral"> |
4047 | - 105/116 |
4048 | - </td> |
4049 | - </tr> |
4050 | - <tr> |
4051 | - <td valign="top"> |
4052 | - prod-SequenceType |
4053 | - </td> |
4054 | - <td align="center" bgcolor="mediumseagreen"> |
4055 | - 21/21 |
4056 | - </td> |
4057 | - </tr> |
4058 | - <tr> |
4059 | - <td valign="top"> |
4060 | - prod-StepExpr |
4061 | - </td> |
4062 | - <td align="center" bgcolor="mediumseagreen"> |
4063 | - 58/58 |
4064 | - </td> |
4065 | - </tr> |
4066 | - <tr> |
4067 | - <td valign="top"> |
4068 | - prod-SwitchExpr |
4069 | - </td> |
4070 | - <td align="center" bgcolor="white"> |
4071 | - 0/0 |
4072 | - </td> |
4073 | - </tr> |
4074 | - <tr> |
4075 | - <td valign="top"> |
4076 | - prod-TreatExpr |
4077 | - </td> |
4078 | - <td align="center" bgcolor="mediumseagreen"> |
4079 | - 69/69 |
4080 | - </td> |
4081 | - </tr> |
4082 | - <tr> |
4083 | - <td valign="top"> |
4084 | - prod-TryCatchExpr |
4085 | - </td> |
4086 | - <td align="center" bgcolor="white"> |
4087 | - 0/0 |
4088 | - </td> |
4089 | - </tr> |
4090 | - <tr> |
4091 | - <td valign="top"> |
4092 | - prod-TypeswitchExpr |
4093 | - </td> |
4094 | - <td align="center" bgcolor="mediumseagreen"> |
4095 | - 56/56 |
4096 | - </td> |
4097 | - </tr> |
4098 | - <tr> |
4099 | - <td valign="top"> |
4100 | - prod-UnorderedExpr |
4101 | - </td> |
4102 | - <td align="center" bgcolor="mediumseagreen"> |
4103 | - 26/26 |
4104 | - </td> |
4105 | - </tr> |
4106 | - <tr> |
4107 | - <td valign="top"> |
4108 | - prod-ValidateExpr |
4109 | - </td> |
4110 | - <td align="center" bgcolor="mediumseagreen"> |
4111 | - 66/66 |
4112 | - </td> |
4113 | - </tr> |
4114 | - <tr> |
4115 | - <td valign="top"> |
4116 | - prod-ValueComp |
4117 | - </td> |
4118 | - <td align="center" bgcolor="mediumseagreen"> |
4119 | - 44/44 |
4120 | - </td> |
4121 | - </tr> |
4122 | - <tr> |
4123 | - <td valign="top"> |
4124 | - prod-VarDecl |
4125 | - </td> |
4126 | - <td align="center" bgcolor="mediumseagreen"> |
4127 | - 124/124 |
4128 | - </td> |
4129 | - </tr> |
4130 | - <tr> |
4131 | - <td valign="top"> |
4132 | - prod-VarDecl.external |
4133 | - </td> |
4134 | - <td align="center" bgcolor="palegreen"> |
4135 | - 94/95 |
4136 | - </td> |
4137 | - </tr> |
4138 | - <tr> |
4139 | - <td valign="top"> |
4140 | - prod-VarDefaultValue |
4141 | - </td> |
4142 | - <td align="center" bgcolor="white"> |
4143 | - 0/0 |
4144 | - </td> |
4145 | - </tr> |
4146 | - <tr> |
4147 | - <td valign="top"> |
4148 | - prod-VersionDecl |
4149 | - </td> |
4150 | - <td align="center" bgcolor="coral"> |
4151 | - 27/28 |
4152 | - </td> |
4153 | - </tr> |
4154 | - <tr> |
4155 | - <td valign="top"> |
4156 | - prod-WhereClause |
4157 | - </td> |
4158 | - <td align="center" bgcolor="mediumseagreen"> |
4159 | - 71/71 |
4160 | - </td> |
4161 | - </tr> |
4162 | - <tr> |
4163 | - <td valign="top"> |
4164 | - prod-WindowClause |
4165 | - </td> |
4166 | - <td align="center" bgcolor="white"> |
4167 | - 0/0 |
4168 | - </td> |
4169 | - </tr> |
4170 | - <tr> |
4171 | - <td valign="top"> |
4172 | - misc-CombinedErrorCodes |
4173 | - </td> |
4174 | - <td align="center" bgcolor="mediumseagreen"> |
4175 | - 254/254 |
4176 | - </td> |
4177 | - </tr> |
4178 | - <tr> |
4179 | - <td valign="top"> |
4180 | - misc-AnnexE |
4181 | - </td> |
4182 | - <td align="center" bgcolor="mediumseagreen"> |
4183 | - 8/8 |
4184 | - </td> |
4185 | - </tr> |
4186 | - <tr> |
4187 | - <td valign="top"> |
4188 | - misc-AppendixA4 |
4189 | - </td> |
4190 | - <td align="center" bgcolor="mediumseagreen"> |
4191 | - 9/9 |
4192 | - </td> |
4193 | - </tr> |
4194 | - <tr> |
4195 | - <td valign="top"> |
4196 | - misc-ErrorsAndOptimization |
4197 | - </td> |
4198 | - <td align="center" bgcolor="mediumseagreen"> |
4199 | - 7/7 |
4200 | - </td> |
4201 | - </tr> |
4202 | - <tr> |
4203 | - <td valign="top"> |
4204 | - misc-HigherOrderFunctions |
4205 | - </td> |
4206 | - <td align="center" bgcolor="white"> |
4207 | - 0/0 |
4208 | - </td> |
4209 | - </tr> |
4210 | - <tr> |
4211 | - <td valign="top"> |
4212 | - misc-MiscFunctions |
4213 | - </td> |
4214 | - <td align="center" bgcolor="mediumseagreen"> |
4215 | - 38/38 |
4216 | - </td> |
4217 | - </tr> |
4218 | - <tr> |
4219 | - <td valign="top"> |
4220 | - misc-StaticContext |
4221 | - </td> |
4222 | - <td align="center" bgcolor="mediumseagreen"> |
4223 | - 1/1 |
4224 | - </td> |
4225 | - </tr> |
4226 | - <tr> |
4227 | - <td valign="top"> |
4228 | - misc-Serialization |
4229 | - </td> |
4230 | - <td align="center" bgcolor="coral"> |
4231 | - 4/12 |
4232 | - </td> |
4233 | - </tr> |
4234 | - <tr> |
4235 | - <td valign="top"> |
4236 | - misc-Surrogates |
4237 | - </td> |
4238 | - <td align="center" bgcolor="mediumseagreen"> |
4239 | - 17/17 |
4240 | - </td> |
4241 | - </tr> |
4242 | - <tr> |
4243 | - <td valign="top"> |
4244 | - misc-XMLEdition |
4245 | - </td> |
4246 | - <td align="center" bgcolor="coral"> |
4247 | - 9/10 |
4248 | - </td> |
4249 | - </tr> |
4250 | - <tr> |
4251 | - <td valign="top"> |
4252 | - app-CatalogCheck |
4253 | - </td> |
4254 | - <td align="center" bgcolor="mediumseagreen"> |
4255 | - 10/10 |
4256 | - </td> |
4257 | - </tr> |
4258 | - <tr> |
4259 | - <td valign="top"> |
4260 | - app-Demos |
4261 | - </td> |
4262 | - <td align="center" bgcolor="mediumseagreen"> |
4263 | - 4/4 |
4264 | - </td> |
4265 | - </tr> |
4266 | - <tr> |
4267 | - <td valign="top"> |
4268 | - app-FunctxFn |
4269 | - </td> |
4270 | - <td align="center" bgcolor="mediumseagreen"> |
4271 | - 500/500 |
4272 | - </td> |
4273 | - </tr> |
4274 | - <tr> |
4275 | - <td valign="top"> |
4276 | - app-FunctxFunctx |
4277 | - </td> |
4278 | - <td align="center" bgcolor="mediumseagreen"> |
4279 | - 627/627 |
4280 | - </td> |
4281 | - </tr> |
4282 | - <tr> |
4283 | - <td valign="top"> |
4284 | - app-UseCaseNS |
4285 | - </td> |
4286 | - <td align="center" bgcolor="mediumseagreen"> |
4287 | - 8/8 |
4288 | - </td> |
4289 | - </tr> |
4290 | - <tr> |
4291 | - <td valign="top"> |
4292 | - app-UseCasePARTS |
4293 | - </td> |
4294 | - <td align="center" bgcolor="mediumseagreen"> |
4295 | - 1/1 |
4296 | - </td> |
4297 | - </tr> |
4298 | - <tr> |
4299 | - <td valign="top"> |
4300 | - app-UseCaseR |
4301 | - </td> |
4302 | - <td align="center" bgcolor="mediumseagreen"> |
4303 | - 18/18 |
4304 | - </td> |
4305 | - </tr> |
4306 | - <tr> |
4307 | - <td valign="top"> |
4308 | - app-UseCaseSEQ |
4309 | - </td> |
4310 | - <td align="center" bgcolor="mediumseagreen"> |
4311 | - 5/5 |
4312 | - </td> |
4313 | - </tr> |
4314 | - <tr> |
4315 | - <td valign="top"> |
4316 | - app-UseCaseSGML |
4317 | - </td> |
4318 | - <td align="center" bgcolor="mediumseagreen"> |
4319 | - 11/11 |
4320 | - </td> |
4321 | - </tr> |
4322 | - <tr> |
4323 | - <td valign="top"> |
4324 | - app-UseCaseSTRING |
4325 | - </td> |
4326 | - <td align="center" bgcolor="mediumseagreen"> |
4327 | - 4/4 |
4328 | - </td> |
4329 | - </tr> |
4330 | - <tr> |
4331 | - <td valign="top"> |
4332 | - app-UseCaseTREE |
4333 | - </td> |
4334 | - <td align="center" bgcolor="mediumseagreen"> |
4335 | - 6/6 |
4336 | - </td> |
4337 | - </tr> |
4338 | - <tr> |
4339 | - <td valign="top"> |
4340 | - app-UseCaseXMP |
4341 | - </td> |
4342 | - <td align="center" bgcolor="mediumseagreen"> |
4343 | - 12/12 |
4344 | - </td> |
4345 | - </tr> |
4346 | - <tr> |
4347 | - <td valign="top"> |
4348 | - app-XMark |
4349 | - </td> |
4350 | - <td align="center" bgcolor="mediumseagreen"> |
4351 | - 21/21 |
4352 | - </td> |
4353 | + <th> Tests </th> |
4354 | + <th> Zorba 2.9.1 XQ30 (QT3 vCVS) </th> |
4355 | + </tr> |
4356 | + <tr> |
4357 | + <td valign="top"> fn-abs </td> |
4358 | + <td align="center" bgcolor="mediumseagreen"> 183/183 </td> |
4359 | + </tr> |
4360 | + <tr> |
4361 | + <td valign="top"> fn-adjust-date-to-timezone </td> |
4362 | + <td align="center" bgcolor="mediumseagreen"> 40/40 </td> |
4363 | + </tr> |
4364 | + <tr> |
4365 | + <td valign="top"> fn-adjust-dateTime-to-timezone </td> |
4366 | + <td align="center" bgcolor="mediumseagreen"> 47/47 </td> |
4367 | + </tr> |
4368 | + <tr> |
4369 | + <td valign="top"> fn-adjust-time-to-timezone </td> |
4370 | + <td align="center" bgcolor="mediumseagreen"> 41/41 </td> |
4371 | + </tr> |
4372 | + <tr> |
4373 | + <td valign="top"> fn-analyze-string </td> |
4374 | + <td align="center" bgcolor="white"> 0/0 </td> |
4375 | + </tr> |
4376 | + <tr> |
4377 | + <td valign="top"> fn-available-environment-variables </td> |
4378 | + <td align="center" bgcolor="mediumseagreen"> 1/1 </td> |
4379 | + </tr> |
4380 | + <tr> |
4381 | + <td valign="top"> fn-avg </td> |
4382 | + <td align="center" bgcolor="mediumseagreen"> 237/237 </td> |
4383 | + </tr> |
4384 | + <tr> |
4385 | + <td valign="top"> fn-base-uri </td> |
4386 | + <td align="center" bgcolor="mediumseagreen"> 62/62 </td> |
4387 | + </tr> |
4388 | + <tr> |
4389 | + <td valign="top"> fn-boolean </td> |
4390 | + <td align="center" bgcolor="mediumseagreen"> 136/136 </td> |
4391 | + </tr> |
4392 | + <tr> |
4393 | + <td valign="top"> fn-ceiling </td> |
4394 | + <td align="center" bgcolor="mediumseagreen"> 87/87 </td> |
4395 | + </tr> |
4396 | + <tr> |
4397 | + <td valign="top"> fn-codepoint-equal </td> |
4398 | + <td align="center" bgcolor="mediumseagreen"> 36/36 </td> |
4399 | + </tr> |
4400 | + <tr> |
4401 | + <td valign="top"> fn-codepoints-to-string </td> |
4402 | + <td align="center" bgcolor="mediumseagreen"> 76/76 </td> |
4403 | + </tr> |
4404 | + <tr> |
4405 | + <td valign="top"> fn-collection </td> |
4406 | + <td align="center" bgcolor="coral"> 18/29 </td> |
4407 | + </tr> |
4408 | + <tr> |
4409 | + <td valign="top"> fn-compare </td> |
4410 | + <td align="center" bgcolor="palegreen"> 63/64 </td> |
4411 | + </tr> |
4412 | + <tr> |
4413 | + <td valign="top"> fn-concat </td> |
4414 | + <td align="center" bgcolor="mediumseagreen"> 95/95 </td> |
4415 | + </tr> |
4416 | + <tr> |
4417 | + <td valign="top"> fn-contains </td> |
4418 | + <td align="center" bgcolor="mediumseagreen"> 41/41 </td> |
4419 | + </tr> |
4420 | + <tr> |
4421 | + <td valign="top"> fn-count </td> |
4422 | + <td align="center" bgcolor="mediumseagreen"> 316/316 </td> |
4423 | + </tr> |
4424 | + <tr> |
4425 | + <td valign="top"> fn-current-date </td> |
4426 | + <td align="center" bgcolor="mediumseagreen"> 26/26 </td> |
4427 | + </tr> |
4428 | + <tr> |
4429 | + <td valign="top"> fn-current-dateTime </td> |
4430 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4431 | + </tr> |
4432 | + <tr> |
4433 | + <td valign="top"> fn-current-time </td> |
4434 | + <td align="center" bgcolor="mediumseagreen"> 24/24 </td> |
4435 | + </tr> |
4436 | + <tr> |
4437 | + <td valign="top"> fn-data </td> |
4438 | + <td align="center" bgcolor="mediumseagreen"> 53/53 </td> |
4439 | + </tr> |
4440 | + <tr> |
4441 | + <td valign="top"> fn-dateTime </td> |
4442 | + <td align="center" bgcolor="mediumseagreen"> 52/52 </td> |
4443 | + </tr> |
4444 | + <tr> |
4445 | + <td valign="top"> fn-day-from-date </td> |
4446 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4447 | + </tr> |
4448 | + <tr> |
4449 | + <td valign="top"> fn-day-from-dateTime </td> |
4450 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4451 | + </tr> |
4452 | + <tr> |
4453 | + <td valign="top"> fn-days-from-duration </td> |
4454 | + <td align="center" bgcolor="mediumseagreen"> 31/31 </td> |
4455 | + </tr> |
4456 | + <tr> |
4457 | + <td valign="top"> fn-deep-equal </td> |
4458 | + <td align="center" bgcolor="coral"> 204/210 </td> |
4459 | + </tr> |
4460 | + <tr> |
4461 | + <td valign="top"> fn-default-collation </td> |
4462 | + <td align="center" bgcolor="mediumseagreen"> 7/7 </td> |
4463 | + </tr> |
4464 | + <tr> |
4465 | + <td valign="top"> fn-distinct-values </td> |
4466 | + <td align="center" bgcolor="mediumseagreen"> 104/104 </td> |
4467 | + </tr> |
4468 | + <tr> |
4469 | + <td valign="top"> fn-doc </td> |
4470 | + <td align="center" bgcolor="mediumseagreen"> 43/43 </td> |
4471 | + </tr> |
4472 | + <tr> |
4473 | + <td valign="top"> fn-doc-available </td> |
4474 | + <td align="center" bgcolor="mediumseagreen"> 13/13 </td> |
4475 | + </tr> |
4476 | + <tr> |
4477 | + <td valign="top"> fn-document-uri </td> |
4478 | + <td align="center" bgcolor="mediumseagreen"> 35/35 </td> |
4479 | + </tr> |
4480 | + <tr> |
4481 | + <td valign="top"> fn-element-with-id </td> |
4482 | + <td align="center" bgcolor="mediumseagreen"> 5/5 </td> |
4483 | + </tr> |
4484 | + <tr> |
4485 | + <td valign="top"> fn-empty </td> |
4486 | + <td align="center" bgcolor="mediumseagreen"> 54/54 </td> |
4487 | + </tr> |
4488 | + <tr> |
4489 | + <td valign="top"> fn-encode-for-uri </td> |
4490 | + <td align="center" bgcolor="mediumseagreen"> 29/29 </td> |
4491 | + </tr> |
4492 | + <tr> |
4493 | + <td valign="top"> fn-ends-with </td> |
4494 | + <td align="center" bgcolor="mediumseagreen"> 38/38 </td> |
4495 | + </tr> |
4496 | + <tr> |
4497 | + <td valign="top"> fn-environment-variable </td> |
4498 | + <td align="center" bgcolor="mediumseagreen"> 3/3 </td> |
4499 | + </tr> |
4500 | + <tr> |
4501 | + <td valign="top"> fn-error </td> |
4502 | + <td align="center" bgcolor="mediumseagreen"> 97/97 </td> |
4503 | + </tr> |
4504 | + <tr> |
4505 | + <td valign="top"> fn-escape-html-uri </td> |
4506 | + <td align="center" bgcolor="mediumseagreen"> 34/34 </td> |
4507 | + </tr> |
4508 | + <tr> |
4509 | + <td valign="top"> fn-exactly-one </td> |
4510 | + <td align="center" bgcolor="mediumseagreen"> 54/54 </td> |
4511 | + </tr> |
4512 | + <tr> |
4513 | + <td valign="top"> fn-exists </td> |
4514 | + <td align="center" bgcolor="mediumseagreen"> 58/58 </td> |
4515 | + </tr> |
4516 | + <tr> |
4517 | + <td valign="top"> fn-false </td> |
4518 | + <td align="center" bgcolor="mediumseagreen"> 24/24 </td> |
4519 | + </tr> |
4520 | + <tr> |
4521 | + <td valign="top"> fn-filter </td> |
4522 | + <td align="center" bgcolor="white"> 0/0 </td> |
4523 | + </tr> |
4524 | + <tr> |
4525 | + <td valign="top"> fn-floor </td> |
4526 | + <td align="center" bgcolor="mediumseagreen"> 88/88 </td> |
4527 | + </tr> |
4528 | + <tr> |
4529 | + <td valign="top"> fn-fold-left </td> |
4530 | + <td align="center" bgcolor="white"> 0/0 </td> |
4531 | + </tr> |
4532 | + <tr> |
4533 | + <td valign="top"> fn-fold-right </td> |
4534 | + <td align="center" bgcolor="white"> 0/0 </td> |
4535 | + </tr> |
4536 | + <tr> |
4537 | + <td valign="top"> fn-format-date </td> |
4538 | + <td align="center" bgcolor="white"> 0/0 </td> |
4539 | + </tr> |
4540 | + <tr> |
4541 | + <td valign="top"> fn-format-dateTime </td> |
4542 | + <td align="center" bgcolor="white"> 0/0 </td> |
4543 | + </tr> |
4544 | + <tr> |
4545 | + <td valign="top"> fn-format-integer </td> |
4546 | + <td align="center" bgcolor="white"> 0/0 </td> |
4547 | + </tr> |
4548 | + <tr> |
4549 | + <td valign="top"> fn-format-number </td> |
4550 | + <td align="center" bgcolor="white"> 0/0 </td> |
4551 | + </tr> |
4552 | + <tr> |
4553 | + <td valign="top"> fn-format-time </td> |
4554 | + <td align="center" bgcolor="white"> 0/0 </td> |
4555 | + </tr> |
4556 | + <tr> |
4557 | + <td valign="top"> fn-function-lookup </td> |
4558 | + <td align="center" bgcolor="white"> 0/0 </td> |
4559 | + </tr> |
4560 | + <tr> |
4561 | + <td valign="top"> fn-function-arity </td> |
4562 | + <td align="center" bgcolor="white"> 0/0 </td> |
4563 | + </tr> |
4564 | + <tr> |
4565 | + <td valign="top"> fn-function-name </td> |
4566 | + <td align="center" bgcolor="white"> 0/0 </td> |
4567 | + </tr> |
4568 | + <tr> |
4569 | + <td valign="top"> fn-generate-id </td> |
4570 | + <td align="center" bgcolor="white"> 0/0 </td> |
4571 | + </tr> |
4572 | + <tr> |
4573 | + <td valign="top"> fn-has-children </td> |
4574 | + <td align="center" bgcolor="white"> 0/0 </td> |
4575 | + </tr> |
4576 | + <tr> |
4577 | + <td valign="top"> fn-head </td> |
4578 | + <td align="center" bgcolor="white"> 0/0 </td> |
4579 | + </tr> |
4580 | + <tr> |
4581 | + <td valign="top"> fn-hours-from-dateTime </td> |
4582 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4583 | + </tr> |
4584 | + <tr> |
4585 | + <td valign="top"> fn-hours-from-duration </td> |
4586 | + <td align="center" bgcolor="mediumseagreen"> 31/31 </td> |
4587 | + </tr> |
4588 | + <tr> |
4589 | + <td valign="top"> fn-hours-from-time </td> |
4590 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4591 | + </tr> |
4592 | + <tr> |
4593 | + <td valign="top"> fn-id </td> |
4594 | + <td align="center" bgcolor="coral"> 39/41 </td> |
4595 | + </tr> |
4596 | + <tr> |
4597 | + <td valign="top"> fn-idref </td> |
4598 | + <td align="center" bgcolor="mediumseagreen"> 30/30 </td> |
4599 | + </tr> |
4600 | + <tr> |
4601 | + <td valign="top"> fn-implicit-timezone </td> |
4602 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4603 | + </tr> |
4604 | + <tr> |
4605 | + <td valign="top"> fn-innermost </td> |
4606 | + <td align="center" bgcolor="white"> 0/0 </td> |
4607 | + </tr> |
4608 | + <tr> |
4609 | + <td valign="top"> fn-index-of </td> |
4610 | + <td align="center" bgcolor="mediumseagreen"> 53/53 </td> |
4611 | + </tr> |
4612 | + <tr> |
4613 | + <td valign="top"> fn-insert-before </td> |
4614 | + <td align="center" bgcolor="mediumseagreen"> 43/43 </td> |
4615 | + </tr> |
4616 | + <tr> |
4617 | + <td valign="top"> fn-in-scope-prefixes </td> |
4618 | + <td align="center" bgcolor="mediumseagreen"> 58/58 </td> |
4619 | + </tr> |
4620 | + <tr> |
4621 | + <td valign="top"> fn-iri-to-uri </td> |
4622 | + <td align="center" bgcolor="mediumseagreen"> 46/46 </td> |
4623 | + </tr> |
4624 | + <tr> |
4625 | + <td valign="top"> fn-lang </td> |
4626 | + <td align="center" bgcolor="mediumseagreen"> 36/36 </td> |
4627 | + </tr> |
4628 | + <tr> |
4629 | + <td valign="top"> fn-last </td> |
4630 | + <td align="center" bgcolor="mediumseagreen"> 65/65 </td> |
4631 | + </tr> |
4632 | + <tr> |
4633 | + <td valign="top"> fn-local-name </td> |
4634 | + <td align="center" bgcolor="mediumseagreen"> 59/59 </td> |
4635 | + </tr> |
4636 | + <tr> |
4637 | + <td valign="top"> fn-local-name-from-QName </td> |
4638 | + <td align="center" bgcolor="mediumseagreen"> 24/24 </td> |
4639 | + </tr> |
4640 | + <tr> |
4641 | + <td valign="top"> fn-lower-case </td> |
4642 | + <td align="center" bgcolor="mediumseagreen"> 24/24 </td> |
4643 | + </tr> |
4644 | + <tr> |
4645 | + <td valign="top"> fn-map </td> |
4646 | + <td align="center" bgcolor="white"> 0/0 </td> |
4647 | + </tr> |
4648 | + <tr> |
4649 | + <td valign="top"> fn-max </td> |
4650 | + <td align="center" bgcolor="mediumseagreen"> 201/201 </td> |
4651 | + </tr> |
4652 | + <tr> |
4653 | + <td valign="top"> fn-map-pairs </td> |
4654 | + <td align="center" bgcolor="white"> 0/0 </td> |
4655 | + </tr> |
4656 | + <tr> |
4657 | + <td valign="top"> fn-matches </td> |
4658 | + <td align="center" bgcolor="palegreen"> 145/146 </td> |
4659 | + </tr> |
4660 | + <tr> |
4661 | + <td valign="top"> fn-matches.re </td> |
4662 | + <td align="center" bgcolor="mediumseagreen"> 1/1 </td> |
4663 | + </tr> |
4664 | + <tr> |
4665 | + <td valign="top"> fn-min </td> |
4666 | + <td align="center" bgcolor="mediumseagreen"> 200/200 </td> |
4667 | + </tr> |
4668 | + <tr> |
4669 | + <td valign="top"> fn-minutes-from-dateTime </td> |
4670 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4671 | + </tr> |
4672 | + <tr> |
4673 | + <td valign="top"> fn-minutes-from-duration </td> |
4674 | + <td align="center" bgcolor="mediumseagreen"> 32/32 </td> |
4675 | + </tr> |
4676 | + <tr> |
4677 | + <td valign="top"> fn-minutes-from-time </td> |
4678 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4679 | + </tr> |
4680 | + <tr> |
4681 | + <td valign="top"> fn-month-from-date </td> |
4682 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4683 | + </tr> |
4684 | + <tr> |
4685 | + <td valign="top"> fn-months-from-duration </td> |
4686 | + <td align="center" bgcolor="mediumseagreen"> 31/31 </td> |
4687 | + </tr> |
4688 | + <tr> |
4689 | + <td valign="top"> fn-month-from-dateTime </td> |
4690 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4691 | + </tr> |
4692 | + <tr> |
4693 | + <td valign="top"> fn-name </td> |
4694 | + <td align="center" bgcolor="mediumseagreen"> 33/33 </td> |
4695 | + </tr> |
4696 | + <tr> |
4697 | + <td valign="top"> fn-namespace-uri </td> |
4698 | + <td align="center" bgcolor="mediumseagreen"> 33/33 </td> |
4699 | + </tr> |
4700 | + <tr> |
4701 | + <td valign="top"> fn-namespace-uri-for-prefix </td> |
4702 | + <td align="center" bgcolor="mediumseagreen"> 29/29 </td> |
4703 | + </tr> |
4704 | + <tr> |
4705 | + <td valign="top"> fn-namespace-uri-from-QName </td> |
4706 | + <td align="center" bgcolor="mediumseagreen"> 29/29 </td> |
4707 | + </tr> |
4708 | + <tr> |
4709 | + <td valign="top"> fn-nilled </td> |
4710 | + <td align="center" bgcolor="mediumseagreen"> 54/54 </td> |
4711 | + </tr> |
4712 | + <tr> |
4713 | + <td valign="top"> fn-node-name </td> |
4714 | + <td align="center" bgcolor="mediumseagreen"> 35/35 </td> |
4715 | + </tr> |
4716 | + <tr> |
4717 | + <td valign="top"> fn-normalize-space </td> |
4718 | + <td align="center" bgcolor="coral"> 37/39 </td> |
4719 | + </tr> |
4720 | + <tr> |
4721 | + <td valign="top"> fn-normalize-unicode </td> |
4722 | + <td align="center" bgcolor="coral"> 41/44 </td> |
4723 | + </tr> |
4724 | + <tr> |
4725 | + <td valign="top"> fn-not </td> |
4726 | + <td align="center" bgcolor="mediumseagreen"> 83/83 </td> |
4727 | + </tr> |
4728 | + <tr> |
4729 | + <td valign="top"> fn-number </td> |
4730 | + <td align="center" bgcolor="mediumseagreen"> 66/66 </td> |
4731 | + </tr> |
4732 | + <tr> |
4733 | + <td valign="top"> fn-one-or-more </td> |
4734 | + <td align="center" bgcolor="mediumseagreen"> 56/56 </td> |
4735 | + </tr> |
4736 | + <tr> |
4737 | + <td valign="top"> fn-outermost </td> |
4738 | + <td align="center" bgcolor="white"> 0/0 </td> |
4739 | + </tr> |
4740 | + <tr> |
4741 | + <td valign="top"> fn-parse-json </td> |
4742 | + <td align="center" bgcolor="white"> 0/0 </td> |
4743 | + </tr> |
4744 | + <tr> |
4745 | + <td valign="top"> fn-parse-xml </td> |
4746 | + <td align="center" bgcolor="white"> 0/0 </td> |
4747 | + </tr> |
4748 | + <tr> |
4749 | + <td valign="top"> fn-parse-xml-fragment </td> |
4750 | + <td align="center" bgcolor="white"> 0/0 </td> |
4751 | + </tr> |
4752 | + <tr> |
4753 | + <td valign="top"> fn-path </td> |
4754 | + <td align="center" bgcolor="white"> 0/0 </td> |
4755 | + </tr> |
4756 | + <tr> |
4757 | + <td valign="top"> fn-position </td> |
4758 | + <td align="center" bgcolor="mediumseagreen"> 66/66 </td> |
4759 | + </tr> |
4760 | + <tr> |
4761 | + <td valign="top"> fn-prefix-from-QName </td> |
4762 | + <td align="center" bgcolor="mediumseagreen"> 24/24 </td> |
4763 | + </tr> |
4764 | + <tr> |
4765 | + <td valign="top"> fn-QName </td> |
4766 | + <td align="center" bgcolor="mediumseagreen"> 34/34 </td> |
4767 | + </tr> |
4768 | + <tr> |
4769 | + <td valign="top"> fn-remove </td> |
4770 | + <td align="center" bgcolor="mediumseagreen"> 48/48 </td> |
4771 | + </tr> |
4772 | + <tr> |
4773 | + <td valign="top"> fn-replace </td> |
4774 | + <td align="center" bgcolor="palegreen"> 72/73 </td> |
4775 | + </tr> |
4776 | + <tr> |
4777 | + <td valign="top"> fn-resolve-QName </td> |
4778 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4779 | + </tr> |
4780 | + <tr> |
4781 | + <td valign="top"> fn-resolve-uri </td> |
4782 | + <td align="center" bgcolor="coral"> 36/38 </td> |
4783 | + </tr> |
4784 | + <tr> |
4785 | + <td valign="top"> fn-reverse </td> |
4786 | + <td align="center" bgcolor="mediumseagreen"> 70/70 </td> |
4787 | + </tr> |
4788 | + <tr> |
4789 | + <td valign="top"> fn-root </td> |
4790 | + <td align="center" bgcolor="mediumseagreen"> 36/36 </td> |
4791 | + </tr> |
4792 | + <tr> |
4793 | + <td valign="top"> fn-round </td> |
4794 | + <td align="center" bgcolor="mediumseagreen"> 245/245 </td> |
4795 | + </tr> |
4796 | + <tr> |
4797 | + <td valign="top"> fn-round-half-to-even </td> |
4798 | + <td align="center" bgcolor="mediumseagreen"> 128/128 </td> |
4799 | + </tr> |
4800 | + <tr> |
4801 | + <td valign="top"> fn-seconds-from-dateTime </td> |
4802 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4803 | + </tr> |
4804 | + <tr> |
4805 | + <td valign="top"> fn-seconds-from-duration </td> |
4806 | + <td align="center" bgcolor="mediumseagreen"> 32/32 </td> |
4807 | + </tr> |
4808 | + <tr> |
4809 | + <td valign="top"> fn-seconds-from-time </td> |
4810 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4811 | + </tr> |
4812 | + <tr> |
4813 | + <td valign="top"> fn-serialize </td> |
4814 | + <td align="center" bgcolor="white"> 0/0 </td> |
4815 | + </tr> |
4816 | + <tr> |
4817 | + <td valign="top"> fn-serialize-json </td> |
4818 | + <td align="center" bgcolor="white"> 0/0 </td> |
4819 | + </tr> |
4820 | + <tr> |
4821 | + <td valign="top"> fn-starts-with </td> |
4822 | + <td align="center" bgcolor="mediumseagreen"> 39/39 </td> |
4823 | + </tr> |
4824 | + <tr> |
4825 | + <td valign="top"> fn-static-base-uri </td> |
4826 | + <td align="center" bgcolor="mediumseagreen"> 18/18 </td> |
4827 | + </tr> |
4828 | + <tr> |
4829 | + <td valign="top"> fn-string </td> |
4830 | + <td align="center" bgcolor="mediumseagreen"> 62/62 </td> |
4831 | + </tr> |
4832 | + <tr> |
4833 | + <td valign="top"> fn-string-join </td> |
4834 | + <td align="center" bgcolor="mediumseagreen"> 34/34 </td> |
4835 | + </tr> |
4836 | + <tr> |
4837 | + <td valign="top"> fn-string-length </td> |
4838 | + <td align="center" bgcolor="coral"> 33/35 </td> |
4839 | + </tr> |
4840 | + <tr> |
4841 | + <td valign="top"> fn-string-to-codepoints </td> |
4842 | + <td align="center" bgcolor="mediumseagreen"> 44/44 </td> |
4843 | + </tr> |
4844 | + <tr> |
4845 | + <td valign="top"> fn-subsequence </td> |
4846 | + <td align="center" bgcolor="mediumseagreen"> 103/103 </td> |
4847 | + </tr> |
4848 | + <tr> |
4849 | + <td valign="top"> fn-substring </td> |
4850 | + <td align="center" bgcolor="mediumseagreen"> 48/48 </td> |
4851 | + </tr> |
4852 | + <tr> |
4853 | + <td valign="top"> fn-substring-after </td> |
4854 | + <td align="center" bgcolor="coral"> 36/37 </td> |
4855 | + </tr> |
4856 | + <tr> |
4857 | + <td valign="top"> fn-substring-before </td> |
4858 | + <td align="center" bgcolor="coral"> 35/36 </td> |
4859 | + </tr> |
4860 | + <tr> |
4861 | + <td valign="top"> fn-sum </td> |
4862 | + <td align="center" bgcolor="mediumseagreen"> 218/218 </td> |
4863 | + </tr> |
4864 | + <tr> |
4865 | + <td valign="top"> fn-tail </td> |
4866 | + <td align="center" bgcolor="white"> 0/0 </td> |
4867 | + </tr> |
4868 | + <tr> |
4869 | + <td valign="top"> fn-timezone-from-date </td> |
4870 | + <td align="center" bgcolor="mediumseagreen"> 34/34 </td> |
4871 | + </tr> |
4872 | + <tr> |
4873 | + <td valign="top"> fn-timezone-from-dateTime </td> |
4874 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4875 | + </tr> |
4876 | + <tr> |
4877 | + <td valign="top"> fn-timezone-from-time </td> |
4878 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4879 | + </tr> |
4880 | + <tr> |
4881 | + <td valign="top"> fn-tokenize </td> |
4882 | + <td align="center" bgcolor="mediumseagreen"> 50/50 </td> |
4883 | + </tr> |
4884 | + <tr> |
4885 | + <td valign="top"> fn-trace </td> |
4886 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4887 | + </tr> |
4888 | + <tr> |
4889 | + <td valign="top"> fn-translate </td> |
4890 | + <td align="center" bgcolor="mediumseagreen"> 42/42 </td> |
4891 | + </tr> |
4892 | + <tr> |
4893 | + <td valign="top"> fn-true </td> |
4894 | + <td align="center" bgcolor="mediumseagreen"> 24/24 </td> |
4895 | + </tr> |
4896 | + <tr> |
4897 | + <td valign="top"> fn-unordered </td> |
4898 | + <td align="center" bgcolor="mediumseagreen"> 34/34 </td> |
4899 | + </tr> |
4900 | + <tr> |
4901 | + <td valign="top"> fn-unparsed-text </td> |
4902 | + <td align="center" bgcolor="white"> 0/0 </td> |
4903 | + </tr> |
4904 | + <tr> |
4905 | + <td valign="top"> fn-unparsed-text-available </td> |
4906 | + <td align="center" bgcolor="white"> 0/0 </td> |
4907 | + </tr> |
4908 | + <tr> |
4909 | + <td valign="top"> fn-unparsed-text-lines </td> |
4910 | + <td align="center" bgcolor="white"> 0/0 </td> |
4911 | + </tr> |
4912 | + <tr> |
4913 | + <td valign="top"> fn-upper-case </td> |
4914 | + <td align="center" bgcolor="mediumseagreen"> 24/24 </td> |
4915 | + </tr> |
4916 | + <tr> |
4917 | + <td valign="top"> fn-uri-collection </td> |
4918 | + <td align="center" bgcolor="white"> 0/0 </td> |
4919 | + </tr> |
4920 | + <tr> |
4921 | + <td valign="top"> fn-year-from-date </td> |
4922 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4923 | + </tr> |
4924 | + <tr> |
4925 | + <td valign="top"> fn-years-from-duration </td> |
4926 | + <td align="center" bgcolor="mediumseagreen"> 31/31 </td> |
4927 | + </tr> |
4928 | + <tr> |
4929 | + <td valign="top"> fn-year-from-dateTime </td> |
4930 | + <td align="center" bgcolor="mediumseagreen"> 27/27 </td> |
4931 | + </tr> |
4932 | + <tr> |
4933 | + <td valign="top"> fn-zero-or-one </td> |
4934 | + <td align="center" bgcolor="mediumseagreen"> 51/51 </td> |
4935 | + </tr> |
4936 | + <tr> |
4937 | + <td valign="top"> math-acos </td> |
4938 | + <td align="center" bgcolor="white"> 0/0 </td> |
4939 | + </tr> |
4940 | + <tr> |
4941 | + <td valign="top"> math-asin </td> |
4942 | + <td align="center" bgcolor="white"> 0/0 </td> |
4943 | + </tr> |
4944 | + <tr> |
4945 | + <td valign="top"> math-atan </td> |
4946 | + <td align="center" bgcolor="white"> 0/0 </td> |
4947 | + </tr> |
4948 | + <tr> |
4949 | + <td valign="top"> math-atan2 </td> |
4950 | + <td align="center" bgcolor="white"> 0/0 </td> |
4951 | + </tr> |
4952 | + <tr> |
4953 | + <td valign="top"> math-cos </td> |
4954 | + <td align="center" bgcolor="white"> 0/0 </td> |
4955 | + </tr> |
4956 | + <tr> |
4957 | + <td valign="top"> math-exp </td> |
4958 | + <td align="center" bgcolor="white"> 0/0 </td> |
4959 | + </tr> |
4960 | + <tr> |
4961 | + <td valign="top"> math-exp10 </td> |
4962 | + <td align="center" bgcolor="white"> 0/0 </td> |
4963 | + </tr> |
4964 | + <tr> |
4965 | + <td valign="top"> math-log </td> |
4966 | + <td align="center" bgcolor="white"> 0/0 </td> |
4967 | + </tr> |
4968 | + <tr> |
4969 | + <td valign="top"> math-log10 </td> |
4970 | + <td align="center" bgcolor="white"> 0/0 </td> |
4971 | + </tr> |
4972 | + <tr> |
4973 | + <td valign="top"> math-pi </td> |
4974 | + <td align="center" bgcolor="white"> 0/0 </td> |
4975 | + </tr> |
4976 | + <tr> |
4977 | + <td valign="top"> math-pow </td> |
4978 | + <td align="center" bgcolor="white"> 0/0 </td> |
4979 | + </tr> |
4980 | + <tr> |
4981 | + <td valign="top"> math-sin </td> |
4982 | + <td align="center" bgcolor="white"> 0/0 </td> |
4983 | + </tr> |
4984 | + <tr> |
4985 | + <td valign="top"> math-sqrt </td> |
4986 | + <td align="center" bgcolor="white"> 0/0 </td> |
4987 | + </tr> |
4988 | + <tr> |
4989 | + <td valign="top"> math-tan </td> |
4990 | + <td align="center" bgcolor="white"> 0/0 </td> |
4991 | + </tr> |
4992 | + <tr> |
4993 | + <td valign="top"> map-new </td> |
4994 | + <td align="center" bgcolor="white"> 0/0 </td> |
4995 | + </tr> |
4996 | + <tr> |
4997 | + <td valign="top"> map-contains </td> |
4998 | + <td align="center" bgcolor="white"> 0/0 </td> |
4999 | + </tr> |
5000 | + <tr> |
Validation queue starting for the following merge proposals: /code.launchpad .net/~zorba- coders/ zorba/zorba- documentation- merge-proposal/ +merge/ 186036
https:/
Progress dashboard at http:// jenkins. lambda. nu/view/ ValidationQueue