ili2ogc
A pure-Python INTERLIS 2 toolkit: parses .ili models into a graph of typed
Python objects (the IlisMeta16 metamodel), validates .xtf data transfers
against them, and converts both to JSON Schema, SQL DDL (PostgreSQL/
GeoPackage), OGC JSON-FG, CQL2-JSON filters, and back to .xtf. TRANSLATION OF models are supported throughout via --lang (renames identifiers/keys
in the output, the transfer wire format itself is unaffected).
Installation
uv sync # or: pip install .
The generated ANTLR lexer/parser are committed under src/interlis/antlr/,
so no grammar build step is needed.
Usage
interlis fetch-models model.ili transfer.xtf -o models/ # download the models they import
interlis build model.ili --repo models/ # parse + print the built model
interlis validate transfer.xtf --repo models/ # check .xtf against its .ili schema
interlis convert model.ili -o model.schema.json # .ili -> JSON Schema
interlis convert-sql model.ili --dialect postgresql -o model.sql # .ili -> SQL DDL
interlis import transfer.xtf --model model.ili --repo models/ -o data.sql # .xtf -> INSERTs into that schema
interlis convert-jsonfg transfer.xtf --repo models/ -o out.jsonfg.json # .xtf -> OGC JSON-FG
interlis validate-jsonfg out.jsonfg.json --model m.ili --repo models/ # check a JSON-FG file against the model
interlis convert-cql2 model.ili -o model.cql2.json # CONSTRAINT -> CQL2-JSON filters
interlis convert-sld symbology.ili --sign-xtf signs.xtf -o styles/ # GRAPHIC -> OGC SLD/SE
interlis write-xtf view-model.ili source.xtf -o view.xtf # VIEW TOPIC data -> .xtf
--repo DIR (repeatable) resolves IMPORTS/schema references against a
directory of .ili files; fetch-models is the only command that goes
online, to fill such a directory. Run interlis <command> --help for every option.
Python API
from pathlib import Path
from interlis.runtime.parse import parse_file
from interlis.builder.model_builder import InterlisModelBuilder
from interlis.xtf.parse import parse_xtf
from interlis.xtf.validate import validate_transfer
tree, syntax_errors = parse_file(Path("model.ili"))
builder = InterlisModelBuilder(Path("mappings"), Path("spec/grammar/mapping"))
model = builder.build(tree) # graph of Pydantic objects, e.g. model.Element[0].Name
transfer = parse_xtf(Path("transfer.xtf"))
issues = validate_transfer(transfer, symbol_table=builder.symbol_table)
interlis.convert.jsonschema/.sql/.jsonfg/.cql2/.xtf_writer expose
the same conversions as the CLI's convert/convert-sql/convert-jsonfg/
convert-cql2/write-xtf. Pass a ModelRepository
(interlis.builder.repository) to the builder to resolve IMPORTS against
other local .ili models.
Development
uv run pytest # test suite
uv run ruff check src/ tests/ # lint (also enforced in CI)
uv run black src/ tests/ # format
CI (.github/workflows/ci.yml) runs ruff, black --check and the test
suite on Python 3.10/3.12/3.14.
spec/grammar/mapping/*.yml and mappings/ilismeta16-*.yml (the
IlisMeta16 metamodel) are the executable source of truth: InterlisModelBuilder
is a generic engine driven by this data, not hand-written parsing code per
grammar rule. Regenerating the vendored grammar under
vendor/interlis-antlr4 is a maintainer-only step, needed only when that
submodule changes.
Metadata
Release files for ili2ogc 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ili2ogc-0.6.0.tar.gz | 448.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ili2ogc-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 944.5 kB
Release files / ili2ogc-0.6.0.tar.gz
| Download URL | ili2ogc-0.6.0.tar.gz |
|---|---|
| Size | 448.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f265817594a15f27a741cb343e3a3092b700ae561e0b3889fde8204efb55e141
|
|
BLAKE2b-256 checksum How to use checksums |
369bdea2cff50d9456241cb80102c907d882d997d6a625f6b608cebc1c641d47
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / ili2ogc-0.6.0-py3-none-any.whl
| Download URL | ili2ogc-0.6.0-py3-none-any.whl |
|---|---|
| Size | 496.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
13eea01cf840163519c434dcf6c83362804ced9e064fba21623b338aa1cfb718
|
|
BLAKE2b-256 checksum How to use checksums |
2a4b4cf1eb35878c05714842729e1fae50d08802f572fb573d77ac83a412d681
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency log