Welcome to the experimental Linked Data wrapper for the Marktstammdatenregister (MaStR). MaStR is the Bundesnetzagentur's register of electricity and gas generation units in Germany — photovoltaic, wind, hydro, biomass, geothermal, storage and more. The data is open (dl-de/by-2.0).
This is a very large dataset: roughly 9.7 million generation units; the full official export (Gesamtdatenexport) is on the order of ~3 GB compressed. There is therefore no “download everything” endpoint: you reach the data by unit, by district, by spatial bounding box, or by name, or page through a collection — each scoped so you only retrieve what you ask for.
This public instance serves the whole register: every unit, Anlage, Lokation, operator and grid in the Gesamtdatenexport (about 41 million records), rebuilt from each new export. The examples below are all Bavarian (in and around Nürnberg).
Nearby: code on GitHub.
Collections and services: every collection (units, operators, locations, codelists, …) page by page, and a form for each search, filter and lookup. The same page as RDF, with the forms as Hydra templates, is what machine clients start from.
Each MaStR unit carries its coordinates, technology, commissioning date and capacity, and links out to the registrations that hold what the unit itself does not: its operator (Anlagenbetreiber), Lokation, EEG / KWK registration, permit and grid connection. Two worked examples, each held together by its operator — follow your nose from one record to the next.
Robert Bosch GmbH operates, in and around
Nürnberg, both a photovoltaic plant and a battery storage system. From each
unit, mastr:AnlagenbetreiberMastrNummer leads back to the same operator; and each unit
links out to the Anlage that carries its headline figure — the EEG-Anlage
for the PV, the storage Anlage (usable kWh) for the battery.
vocab:Operator with
foaf:name “Robert Bosch GmbH” and a
vcard:hasAddress block. Both units below link here via
mastr:AnlagenbetreiberMastrNummer; the operator links back the
other way — vocab:operatesUnit to each unit and
vocab:hasSite to their shared Lokation ↓ — so you
can follow your nose in either direction.vocab:Location that groups both
units below (sharing one grid-connection setup). The operator reaches it via
vocab:hasSite; each unit via
mastr:LokationMaStRNummer; and the Lokation links back the
other way — vocab:hasUnit to each unit and
vocab:hasOperator to the operator — so the
operator ↔ site ↔ unit graph is navigable in
every direction.mastr:NutzbareSpeicherkapazitaet, the
usable kWh (which lives on the Anlage, not the unit).KFZ-Innung Mittelfranken operates a combustion cogeneration unit (BHKW) that produces both electricity and heat. The unit's KWK registration carries the cogeneration output.
foaf:name
“KFZ-Innung Mittelfranken KdöR”. It links forward to the unit
below via vocab:operatesUnit and to its Lokation ↓ via
vocab:hasSite.vocab:Location; reached from the operator via
vocab:hasSite and from the unit via
mastr:LokationMaStRNummer, and linking back via
vocab:hasUnit / vocab:hasOperator.mastr:ThermischeNutzleistung
(thermal) + mastr:ElektrischeKwkLeistung (electrical).
A record's IRI is its MaStR-Nr split in two: the 3-letter prefix, lowercased,
names the collection (see for Stromerzeugungseinheiten,
abr for operators, sel for Lokationen, …)
and the 12 characters after it name the record. The fragment distinguishes
the thing (#it) from the document describing
it (httpRange-14).
Every collection, its URI templates and its formats are listed under
Collections and services.
minLon,minLat,maxLon,maxLat).minLon,minLat,maxLon,maxLat),
answered from a pre-built in-memory spatial index — fast and
paginated; returns 503 when no index is loaded.lat,lon) instead of a bbox string.FeatureCollection of
Points at [lon, lat] (one feature per hit
with coordinates), for direct consumption by web maps. A non-RDF view,
also served via Accept: application/geo+json; the same
.geojson view is available on ./filter.09564 (here the Kreis of Nürnberg). ags is
an AGS prefix, so one parameter selects at any grain —
09 (Land), 09564 (Kreis),
09564000 (Gemeinde) — matching the SKOS/LAU code
hierarchy. Exact municipal containment, no bounding-box slop.Energieträger code
(carrier is repeatable / comma-separated).
ags is required.
The two query endpoints ./within and ./filter
are modelled as
Linked Data Services (LIDS):
each RDF response names the call itself as an entity under a
#id fragment and links it to the matched records. A
./within call is a mastr:BoundingBox (its four
mastr:minLon/minLat/maxLon/maxLat
bounds) related to each hit via mastr:contains; a
./filter call is a
mastr:Query (its active facets — mastr:ags,
mastr:carrier) related to each hit via
mastr:result. In Turtle the call entity relativizes host-free
as <?…#id>. The .geojson view is a
non-RDF representation and carries no call entity.
The spatial browser is a Leaflet map widget over
the German basemap.de tiles. Pan / zoom
to a German city (zoom ≥ 11), and units within the visible window are
loaded from the JSON-LD within endpoint and
rendered as markers colour-coded by energy source. Clicking a marker
fetches its full record (./{prefix}/{tail}.jsonld) and shows
the properties in the right-hand panel.
For project updates and changes, see the CHANGELOG.
Source: Marktstammdatenregister, Bundesnetzagentur. Licence: dl-de/by-2.0.