PhoenixmlDb.XQuery
1.6.8
dotnet add package PhoenixmlDb.XQuery --version 1.6.8
NuGet\Install-Package PhoenixmlDb.XQuery -Version 1.6.8
<PackageReference Include="PhoenixmlDb.XQuery" Version="1.6.8" />
<PackageVersion Include="PhoenixmlDb.XQuery" Version="1.6.8" />
<PackageReference Include="PhoenixmlDb.XQuery" />
paket add PhoenixmlDb.XQuery --version 1.6.8
#r "nuget: PhoenixmlDb.XQuery, 1.6.8"
#:package PhoenixmlDb.XQuery@1.6.8
#addin nuget:?package=PhoenixmlDb.XQuery&version=1.6.8
#tool nuget:?package=PhoenixmlDb.XQuery&version=1.6.8
PhoenixmlDb.XQuery
XQuery 4.0 query engine for PhoenixmlDb — query XML and JSON documents with the full power of XQuery.
Features
- Full XQuery 4.0 — FLWOR expressions, constructors, modules, user-defined functions
- XPath 4.0 — complete XPath implementation with 240+ built-in functions
- JSON support —
json-doc(),parse-json(), maps, arrays — query JSON natively - Full-text search —
ft:contains()with stemming, wildcards, proximity, scoring - Update Facility — insert, delete, replace, rename, transform expressions
- Type system — records, enums, union types (XQuery 4.0)
Quick example
using PhoenixmlDb.XQuery.Execution;
var engine = new QueryEngine();
// Simple query
var results = engine.ExecuteToListAsync(
"for $x in 1 to 10 where $x mod 2 = 0 return $x * $x");
// Query XML documents
var books = engine.ExecuteAsync(
"//book[price > 30]/title",
containerId);
Related packages
| Package | Description |
|---|---|
| PhoenixmlDb.Core | Core types and XDM data model (dependency) |
| PhoenixmlDb.Xslt | XSLT 4.0 transformation engine |
| PhoenixmlDb.XQuery.Cli | xquery command-line tool |
Documentation
Full documentation at phoenixml.dev
License
Apache 2.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Antlr4.Runtime.Standard (>= 4.13.1)
- Lucene.Net (>= 4.8.0-beta00016)
- Lucene.Net.Analysis.Common (>= 4.8.0-beta00016)
- PhoenixmlDb.Core (>= 1.6.7)
-
net8.0
- Antlr4.Runtime.Standard (>= 4.13.1)
- Lucene.Net (>= 4.8.0-beta00016)
- Lucene.Net.Analysis.Common (>= 4.8.0-beta00016)
- PhoenixmlDb.Core (>= 1.6.7)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on PhoenixmlDb.XQuery:
| Package | Downloads |
|---|---|
|
PhoenixmlDb.Xslt
XSLT 4.0 transformation engine for PhoenixmlDb |
|
|
Phoenixml.Platform.Editor.Xml
XML/XSD vocabulary binding for Phoenixml.Platform — concrete IDocument and ITreeNodeProvider implementations against PhoenixmlDb.Core's XDM, XSD schema validation pipeline. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.6.8 | 36 | 8/26/2026 |
| 1.6.7 | 126 | 8/24/2026 |
| 1.6.6 | 121 | 8/23/2026 |
| 1.6.5 | 112 | 8/21/2026 |
| 1.6.2 | 170 | 8/16/2026 |
| 1.6.1 | 184 | 7/31/2026 |
| 1.6.0 | 157 | 7/27/2026 |
| 1.5.5 | 187 | 7/12/2026 |
| 1.5.4 | 185 | 7/9/2026 |
| 1.5.3 | 133 | 7/8/2026 |
| 1.5.2 | 137 | 7/7/2026 |
| 1.5.1 | 152 | 6/30/2026 |
| 1.5.0 | 114 | 6/28/2026 |
| 1.4.7 | 147 | 6/25/2026 |
| 1.4.6 | 222 | 6/17/2026 |
| 1.4.5 | 144 | 6/17/2026 |
| 1.4.4 | 184 | 6/14/2026 |
| 1.4.3 | 137 | 6/10/2026 |
| 1.4.2 | 119 | 6/6/2026 |
| 1.4.1 | 237 | 5/29/2026 |
Eight XPath 4.0 gaps, found by running a real 4.0 library rather than a conformance suite,
plus two diagnostics that were describing the runtime's internals to people writing XQuery.
### Eight XPath 4.0 gaps, from Dimitre Novatchev's Generator Function Library
The library (Balisage 2026) is real XPath 4.0 code, verified by its author against BaseX and
Saxon. It found ten gaps in about two hours — none of which 31,470 QT3 cases had reached.
Eight are fixed here and the library now runs, including lazy infinite generators:
`take(10000000) => value()` returns `2` without materialising ten million items.
- **`declare record NAME(...)`** — named record types and the constructor function they
imply. Emitted as an ordinary function declaration whose body is a map constructor, so it
inherits parameter binding, arity checking and keyword arguments, which is how the library
calls it: `f:generator(initialized := true(), ...)`.
- **Imported record types** — approximated: the parser cannot see an imported module, so a
type named with an imported prefix is assumed to be one it declares.
- **`fn` as a TYPE keyword** — §4.6.6 makes `fn` and `function` synonyms generally. 1.6.7
fixed inline expressions, which is the half Martin Honnen's report showed; types were left.
- **Named parameters in function types** — `fn($this as T) as U`, how record fields declare
callbacks.
- **`=?>`, the mapping arrow** — record method dispatch: `E =?> name(args)` is
`E?name(E, args)`, with `E` evaluated once.
- **`array:empty($a)`** — the arity-1 predicate. A zero-arity `array:empty()` constructor
already existed under the same name, so "Unknown function: empty#1" was exactly right.
- **`fn:while-do`** — bounded at 10^6 iterations: it drives generators, so a predicate that
never goes false should raise rather than hang.
- **Digit separators** — `1_000_000`, and in the fraction and exponent too.
### Diagnostics no longer name CLR types
`fn:type(xs:byte(1))` returned the string **`"XsTypedInteger"`** with kind `"item"` — a
shipped XPath 4.0 function handing a C# class name to someone who wrote XQuery. Tagged
subtypes matched no arm of its switch and fell through to `GetType().Name`.
The same cause reached type errors. Declaring `$n as xs:nonNegativeInteger` and passing `2`
reported *"does not match parameterized type Integer"* — wrong three times over: not
parameterized, not `xs:integer`, and "Integer" erases exactly the derived/base distinction
that caused the mismatch. Companion sites printed "but got Int64".
`fn:type` and the engine's diagnostics now share one renderer, so they cannot drift.
### `XQST0059` said "cannot locate" for a schema it had located
`XsdSchemaProvider` caught the per-hint `XmlSchemaException`, discarded it, and reported
"Cannot locate schema for namespace X" — sending the reader after a missing file when the
file was found and failed to COMPILE. It now reports each hint tried and why.
XQuery.Tests 1497 passed, 0 failed (1466 at 1.6.7)