X-Splinter is a .NET 10 command-line tool that splits a monolithic XMI export into separate, per-package XMI files. Cross-package references become cross-file href="targetFile.xmi#id" references, so the resulting files load independently while types still resolve across them. Built on UML4NET.
Requires the .NET 10 SDK.
dotnet build X-Splinter.sln
dotnet run --project XSplinter/XSplinter.csproj -- <input.xmi> <config.json> [--output <dir>]<input.xmi>— the monolithic XMI file exported from Enterprise Architect.<config.json>— the splitter configuration (see below).--output <dir>— output directory (optional; defaults to the current directory).
{
"rootPackageName": "5. Data Structure",
"packages": [
{ "name": "Primitives", "outputFile": "CSharp_Primitives.xmi", "convertToLibrary": true },
{ "name": "Forge", "outputFile": "Forge.xmi" },
{ "name": "FunctionalData", "outputFile": "FunctionalData.xmi" }
]
}rootPackageName— optional; the root container package to scope the search to. Omit it when the packages sit directly under the model.modelName— optional; the name of theuml:Modelwrapper written around each extracted package. Defaults to the name of the model enclosing the package in the source document.packages[]— the packages to extract, each with aname, anoutputFileand an optionalconvertToLibraryflag. Whentrue, the package is written as a plainuml:Packagewithout the EA model wrapper or extension metadata; whenfalse(default), the full EA model structure is preserved.
A sample is available in example/packages.json.
Any UML XMI is supported. Enterprise Architect exports additionally get their xmi:Extension
filtered per package; the UML namespace, the uml:Model wrapper and the presence of an
extension are all taken from the source document.
| Branch | Build Status |
|---|---|
| Development |
X-Splinter is provided to the community under the Apache License 2.0. See the LICENSE file for the full text.