PhoenixmlDb.Core
2.5.0
dotnet add package PhoenixmlDb.Core --version 2.5.0
NuGet\Install-Package PhoenixmlDb.Core -Version 2.5.0
<PackageReference Include="PhoenixmlDb.Core" Version="2.5.0" />
<PackageVersion Include="PhoenixmlDb.Core" Version="2.5.0" />
<PackageReference Include="PhoenixmlDb.Core" />
paket add PhoenixmlDb.Core --version 2.5.0
#r "nuget: PhoenixmlDb.Core, 2.5.0"
#:package PhoenixmlDb.Core@2.5.0
#addin nuget:?package=PhoenixmlDb.Core&version=2.5.0
#tool nuget:?package=PhoenixmlDb.Core&version=2.5.0
PhoenixmlDb.Core
Core types, interfaces, and XDM (XQuery Data Model) implementation for PhoenixmlDb — a modern embedded XML/JSON document database for .NET.
What's in this package
- Database interfaces —
IDocumentDatabase,IContainer,IDocumentfor storing and retrieving XML/JSON documents - XDM node types —
XdmElement,XdmAttribute,XdmDocument, etc. — the W3C XQuery Data Model - Transaction model —
IReadTransaction,IWriteTransactionwith MVCC snapshot isolation - Index configuration — path, value, full-text, and metadata indexes for fast queries
- XML parser and serializer — parse XML into XDM trees and serialize back
- Atomic value types — dates, times, durations, and other XSD types with correct semantics
When to use this package
Directly: If you're building a storage provider, query engine integration, or tooling that works with XDM types.
Indirectly: This package is a dependency of PhoenixmlDb.XQuery, PhoenixmlDb.Xslt, and the CLI tools. You typically don't reference it alone unless you need the core types without query/transform capabilities.
Quick example
using PhoenixmlDb.Core;
using PhoenixmlDb.Xdm.Parsing;
// Parse XML into an XDM tree
var parser = new XmlDocumentParser();
var result = parser.Parse("<order><item>Widget</item></order>");
var doc = result.Document;
// Navigate the tree
var root = doc.Children[0]; // <order> element
Console.WriteLine(root.StringValue); // "Widget"
Related packages
| Package | Description |
|---|---|
| PhoenixmlDb.XQuery | XQuery 4.0 query engine |
| PhoenixmlDb.Xslt | XSLT 4.0 transformation engine |
| PhoenixmlDb.XQuery.Cli | xquery command-line tool |
| PhoenixmlDb.Xslt.Cli | xslt 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
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on PhoenixmlDb.Core:
| Package | Downloads |
|---|---|
|
PhoenixmlDb.XQuery
XQuery 4.0 query engine for PhoenixmlDb |
|
|
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 |
|---|---|---|
| 2.5.0 | 153 | 10/13/2026 |
| 2.4.0 | 216 | 10/9/2026 |
| 2.3.0 | 95 | 10/8/2026 |
| 2.2.0 | 174 | 10/6/2026 |
| 2.1.0 | 171 | 10/5/2026 |
| 2.0.0 | 1,665 | 9/15/2026 |
| 1.7.0 | 949 | 9/11/2026 |
| 1.6.7 | 973 | 8/24/2026 |
| 1.6.6 | 199 | 8/23/2026 |
| 1.6.5 | 199 | 8/21/2026 |
| 1.6.0 | 173 | 8/7/2026 |
| 1.5.0 | 129 | 8/6/2026 |
| 1.4.0 | 119 | 8/4/2026 |
| 1.3.0 | 374 | 7/27/2026 |
| 1.2.2 | 309 | 7/9/2026 |
| 1.2.1 | 173 | 7/8/2026 |
| 1.2.0 | 342 | 6/28/2026 |
| 1.1.9 | 341 | 6/17/2026 |
| 1.1.8 | 222 | 6/14/2026 |
| 1.1.7 | 151 | 6/9/2026 |
Minor because it adds API. Nothing changes for existing callers that do not set an implicit
timezone. Serialized output does not change; a schema validation result can change for a value that
contains characters outside the Basic Multilingual Plane, because those are now counted as one
character each (the messages keep their wording).
### API
- **`ImplicitTimezone`**: the timezone a date, time or dateTime with none of its own is compared
in. `XsDateTime`, `XsDate` and `XsTime` read `ImplicitTimezone.Current` where they read the
machine's offset. It is the machine's timezone unless a host sets one with
`ImplicitTimezone.Use(offset)`, for the code that runs until the result is disposed, so
nothing changes for a host that does not use it.
### Schemas
- **A pattern facet counts characters as XML Schema does, by code point.** System.Xml hands a
pattern to a .NET expression, which counts UTF-16 units, so a character outside the Basic
Multilingual Plane (an emoji, a mathematical letter) was two characters to `.`, to a negated
class (`[^a]`) and to a negated category (`\P{L}`, `\S`, `\D`, `\W`), and was not matched by
the category it belongs to (`\p{L}`, `\d`, `\w`) or by a class or range that names it.
`SchemaPatternGuard.MatchWholeCharacters`, which the compiler calls, now rewrites each of
these. A value with no such character is matched by the pattern as written.
- **The length facets of a string type count characters, by code point.** `length`, `minLength`
and `maxLength` on a type derived from `xs:string` or `xs:anyURI` counted UTF-16 units, so
`maxLength="1"` refused one character outside the Basic Multilingual Plane and `minLength="2"`
accepted it. That count is inside System.Xml, so after a schema compiles as written each such
facet is replaced by a pattern for the same number of characters and the schema is compiled
once more (`SchemaPatternGuard.CompileWithCharacterLengths`). The facets of a list type (a
number of items) and of a binary type (a number of octets) are not touched. A diagnostic
keeps the message and the rule of the facet (`cvc-maxLength-valid`), not those of the pattern.
A schema with such facets takes about twice as long to compile; a compiled schema is cached.