114 lines
7.0 KiB
Markdown
114 lines
7.0 KiB
Markdown
# ALKIS 6 → ALKIS 7: Vergleich und Anpassungsbedarf in den Plugins
|
||||
|
|
|
|||
|
|
Stand 04.09.2026. Vorschlag/Prüfliste, noch kein Beschluss. Betroffen ist ausschließlich
|
|||
|
|
**`sn_verfahrensgebiet`** (`functions/*_alkis*.py`); `sn_plan41` spricht kein ALKIS an.
|
|||
|
|
|
|||
|
|
„ALKIS 6/7" meint die GeoInfoDok-Version des AAA-Modells: ALKIS 6 = **GID 6.0**,
|
|||
|
|
ALKIS 7 = **GID 7.1**. Das Referenzmaterial unter `referenz/alkis/` (lokal, nicht versioniert)
|
|||
|
|
ist bereits GID 7.1.2. Verwandte Doku: [`../wissen/wfs_dienste.md`](../wissen/wfs_dienste.md),
|
|||
|
|
[`../wissen/alkis_objektarten.md`](../wissen/alkis_objektarten.md).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Teil 1 – Was sich für uns als WFS-/NAS-Konsument ändert
|
|||
|
|
|
|||
|
|
| Thema | ALKIS 6 (GID 6.0) | ALKIS 7 (GID 7.1) | Wirkung auf uns |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| **NAS-/GML-Namespace** | `http://www.adv-online.de/namespaces/adv/gid/6.0` | `…/adv/gid/7.1` | **Hart.** Jeder fest verdrahtete Namespace findet keine Elemente mehr. |
|
|||
|
|
| **Codelisten** | viele Attribute sind `Enumeration` mit Ganzzahlwert (`2110`) | dieselben Attribute sind **extern verwaltete `CodeList`** (adv-Registry, versioniert); Wert kommt als Code **oder** als Registry-URI, neue Werte ohne Schemaänderung | `artDerFestlegung` kann als URI statt `2110` ankommen; neue FlurbG-nahe Werte (z. B. 2180 Freiwilliger Nutzungstausch) |
|
|||
|
|
| **ISO-Angleichung** | ältere ISO-19100-Stände | Raumbezug/Zeit/Metadaten/Datenqualität an 19107/19108/19115/**19157** angeglichen | `qualitaetsangaben` (`AX_DQ*`) umstrukturiert |
|
|||
|
|
| **Modellpflege** | — | neue Supertypen (`AX_Flurstueck_Kerndaten`), normalisierte Relationsrollen, Anschrift/Lagebezeichnung angepasst | abgeflachte WFS-Feldnamen können sich verschieben |
|
|||
|
|
| **Objektarten** | — | neue/geänderte Objektarten v. a. in Tatsächlicher Nutzung und Bau-/Raum-/Bodenordnung | BROR-Filterung prüfen |
|
|||
|
|
| **Dienst-Infrastruktur** | vorhandener `public_alkis`-WFS | GeoSN stellt i. d. R. neue Capabilities-Version, ggf. neuen Pfad, Parallelbetrieb für Übergangszeit; `outputFormat`-Profilstring ändert sich | Endpunkt/Capabilities neu verifizieren |
|
|||
|
|
|
|||
|
|
**Unverändert:** WFS 2.0.0, GML 3.2, EPSG:25833. Die WAF-Grenzen (POST/GML-Filter blockiert,
|
|||
|
|
URL-Länge, `COUNT`-Limit) sind sächsische Infrastruktur, nicht Schema – trotzdem gegen die
|
|||
|
|
neue Instanz neu sondieren (`referenz/wfs/`).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Teil 2 – Konkrete Anpassungen
|
|||
|
|
|
|||
|
|
### A. Fest verdrahteter NAS-Namespace — der harte Bruch
|
|||
|
|
- **`functions/grenzpunkt_alkis.py:274`** — `_ADV = "…/gid/6.0"` in `_erstelle_layer_aus_gml`.
|
|||
|
|
Diese Funktion parst PunktortTA- und Grenzpunkt-GML von Hand; gegen einen 7.1-Dienst liefert
|
|||
|
|
`root.findall(".//{…/6.0}…")` nichts → `None` → „keine Grenzpunkte".
|
|||
|
|
**Fix:** Namespace aus dem GML-Wurzelelement ableiten (bzw. Liste bekannter Namespaces
|
|||
|
|
akzeptieren), nicht als Konstante.
|
|||
|
|
- Betrifft auch die verschachtelte Suche `.//{_ADV}genauigkeitsstufe` (Zeile ~340) und
|
|||
|
|
`referenz/wfs/_test_wfs_post.py:8,55` (nur Referenz).
|
|||
|
|
|
|||
|
|
### B. Fest verdrahtete, abgeflachte Attributnamen in `sql=`-Filtern
|
|||
|
|
Der QGIS-WFS-Provider flacht verschachtelte Datentypen zu `eltern_kind_…`-Feldnamen ab.
|
|||
|
|
Ändert GID 7.1 den Schemapfad, ändert sich der Feldname — und jedes `WHERE <name> = …`
|
|||
|
|
liefert **stillschweigend 0 Features**:
|
|||
|
|
|
|||
|
|
| Datei | Feld / Filter |
|
|||
|
|
|---|---|
|
|||
|
|
| `functions/flurstueck_alkis.py:101` | `gemarkung_ax_gemarkung_schluessel_gemarkungsnummer` |
|
|||
|
|
| `functions/verfahrensgebiet_alkis.py` (~112) | `bezeichnung LIKE '<vkz5>%'` auf BROR |
|
|||
|
|
| `functions/verfahrensgebiet_alkis.py:20–28` | Liste `BROR_ATTRIBUTE_FELDER` |
|
|||
|
|
| `functions/verfahrensgebiet_edit_service.py:26–27` | `FELD_KENNZEICHEN`, `FELD_GEMARKUNG` (Pflichtfelder) |
|
|||
|
|
| `functions/beteiligung_pruefung.py` | `flurstueckskennzeichen`, `zaehler`, `nenner`, `land`, `gemarkungsnummer` |
|
|||
|
|
| `functions/gemarkung_alkis.py` | `schluessel`, `ave_name` (vereinf. Dienst — separat prüfen, Sachsen-eigenes Schema) |
|
|||
|
|
|
|||
|
|
**Aktion:** sobald ein ALKIS-7-Testdienst verfügbar ist, je Objektart `DescribeFeatureType`
|
|||
|
|
ziehen, Feldnamen diffen, alle Namen als benannte Konstanten an **einer** Stelle sammeln;
|
|||
|
|
wo möglich tolerante Feldsuche wie bereits `_erkenne_gehoert_zu_feld`.
|
|||
|
|
|
|||
|
|
### C. `artDerFestlegung` als Codeliste
|
|||
|
|
`functions/verfahrensgebiet_alkis.py` / `verfahrensgebiet_dialoge.py` (`ask_bror_kombinationen`):
|
|||
|
|
falls auf `artderfestlegung` verglichen/gruppiert wird, vor dem Vergleich normalisieren
|
|||
|
|
(letztes URI-Segment nehmen). Werteliste in [`../wissen/alkis_objektarten.md`](../wissen/alkis_objektarten.md)
|
|||
|
|
um neue GID-7.1-Werte ergänzen. Der `bezeichnung LIKE`-Filter bleibt unberührt (String-Attribut).
|
|||
|
|
|
|||
|
|
### D. PunktortTA → Grenzpunkt-Referenz
|
|||
|
|
`grenzpunkt_alkis.py:64` `_GEHOERT_ZU_KANDIDATEN = ["istTeilVon","gehoertZu","gehoertZuAX_Grenzpunkt"]`
|
|||
|
|
ist bereits tolerant — den in GID 7.1 tatsächlich abgeflachten Namen prüfen und ggf. aufnehmen.
|
|||
|
|
`xlink:href="urn:adv:oid:DE…"` sollte bleiben.
|
|||
|
|
|
|||
|
|
### E. Qualitätsangaben
|
|||
|
|
`qualitaetsangaben_ax_dqpunktort_genauigkeitsstufe` (`grenzpunkt_alkis.py:292`) und die
|
|||
|
|
Container-Erkennung gegen die 7.1-DQ-Struktur (ISO 19157) prüfen; Containername kann sich ändern.
|
|||
|
|
|
|||
|
|
### F. Endpunkte konsolidieren und neu sondieren
|
|||
|
|
Die URLs stehen als Literale in vier Dateien (`gemarkung_alkis.py`, `flurstueck_alkis.py`,
|
|||
|
|
`grenzpunkt_alkis.py`, `verfahrensgebiet_alkis.py`). In **ein** Modul ziehen, dann klären,
|
|||
|
|
ob GeoSN den Pfad behält. WAF-Verhalten (POST, KVP-BBOX, ResourceId, `COUNT`-Limit) gegen die
|
|||
|
|
neue Instanz mit den Skripten in `referenz/wfs/` neu testen.
|
|||
|
|
|
|||
|
|
### G. Tests (Projektregel: zuerst der Test, der den Bruch zeigt)
|
|||
|
|
- Für den manuellen GML-Parser gibt es aktuell offenbar **keinen** direkten Test (die
|
|||
|
|
Testdateien enthalten kein GML). Fixtures mit je einem 6.0- und einem 7.1-Namespace-GML
|
|||
|
|
anlegen und parametrisieren.
|
|||
|
|
- `python scripts/run_tests.py sn_verfahrensgebiet --baseline` + `python scripts/testkatalog.py`.
|
|||
|
|
- QGIS-Test gegen den echten ALKIS-7-Dienst im PR dokumentieren.
|
|||
|
|
|
|||
|
|
### H. Doku nachziehen
|
|||
|
|
[`../wissen/wfs_dienste.md`](../wissen/wfs_dienste.md),
|
|||
|
|
[`../wissen/alkis_objektarten.md`](../wissen/alkis_objektarten.md),
|
|||
|
|
[`../wissen/externe_dienste.md`](../wissen/externe_dienste.md),
|
|||
|
|
[`../wissen/fallstricke.md`](../wissen/fallstricke.md); ADR unter `../entscheidungen/` für die
|
|||
|
|
Umstellungsstrategie.
|
|||
|
|
|
|||
|
|
### Strategie
|
|||
|
|
GeoSN fährt ALKIS 6 und 7 vermutlich eine Zeit lang parallel — daher **tolerant** umsetzen
|
|||
|
|
(Namespace aus der Antwort, tolerante Feldsuche), nicht hart umschalten.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Offen / nur am echten ALKIS-7-Dienst klärbar
|
|||
|
|
|
|||
|
|
- exakte abgeflachte Feldnamen in GID 7.1 (`DescribeFeatureType` je Objektart)
|
|||
|
|
- genauer Namespace-Suffix (`7.1` vs. Unterversion)
|
|||
|
|
- ob GeoSN den WFS-Endpunkt / -Pfad wechselt (`GetCapabilities`)
|
|||
|
|
- ob der vereinfachte Dienst (`ave:KatasterBezirk`) mitgezogen wird
|
|||
|
|
- aktualisiertes WAF-Verhalten der neuen Deployment-Instanz
|
|||
|
|
|
|||
|
|
## Nächste Schritte
|
|||
|
|
|
|||
|
|
1. Gitea-Issue in `Plugin_SN_Verfahrensgebiet` anlegen (Entwurf vorbereiten).
|
|||
|
|
2. Sobald ALKIS-7-Testdienst erreichbar: `GetCapabilities` + `DescribeFeatureType` sichern,
|
|||
|
|
Abschnitt B mit echten Feldnamen füllen.
|
|||
|
|
3. Umsetzung als eigener `feature/`-Branch, Namespace-Toleranz zuerst (Abschnitt A).
|