PhoenixmlDb.XQuery 1.6.8

dotnet add package PhoenixmlDb.XQuery --version 1.6.8
                    
NuGet\Install-Package PhoenixmlDb.XQuery -Version 1.6.8
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PhoenixmlDb.XQuery" Version="1.6.8" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PhoenixmlDb.XQuery" Version="1.6.8" />
                    
Directory.Packages.props
<PackageReference Include="PhoenixmlDb.XQuery" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PhoenixmlDb.XQuery --version 1.6.8
                    
#r "nuget: PhoenixmlDb.XQuery, 1.6.8"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PhoenixmlDb.XQuery@1.6.8
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PhoenixmlDb.XQuery&version=1.6.8
                    
Install as a Cake Addin
#tool nuget:?package=PhoenixmlDb.XQuery&version=1.6.8
                    
Install as a Cake Tool

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 supportjson-doc(), parse-json(), maps, arrays — query JSON natively
  • Full-text searchft: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);
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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
Loading failed

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)