Model Baker macht das Arbeiten mit INTERLIS Datenmodellen in QGIS einfach. Dennoch bedürfen gewisse Szenarien noch manueller Konfigurationen. Eines davon ist das Generieren von OID Werten und Behälter.
Das Format der systemübergreifenden TID oder auch der BID (für Behälter) kann in INTERLIS Modellen OID AS
definiert werden:
ANYOID = OID ANY;
I32OID = OID 0 .. 2147483647; !! positive in 4 Bytes speicherbare Integerwerte
STANDARDOID = OID TEXT*16; !! gemäss Anhang D (nur Ziffern und Buchstaben erlaubt)
UUIDOID = OID TEXT*36; !! gemäss ISO 11578
Oder auch Benutzerdefiniert:
TypeID = OID TEXT*60;
Aktuell erstellt Model Baker Standardwerte für TIDs/BIDs mit dem OID Format UUIDOID (Universally Unique Identifier). Die anderen Formate sind nicht unterstützt.
Das Erstellen einer Expression für den Standardwert der TIDs/BIDs soll im Wizard angeboten werden. Dafür sollen die Formate der existierenden OID Definitionen erkannt werden (ch.ehi.ili2db.oidDomain
in t_ili2db_column_prop
) und die nötigen Funktionalitäten (zum Beispiel: Laufnummer ab ... implementiert als Sequence oder in T_KEY_OBJECT
) angeboten werden.
Einige Informationen müssen vom Benutzer definiert werden. ZBs. der Prefix in der STANDARDOID
.
Der Wertebereich der Objektidentifikationen aller Objekte dieser Klasse kann explizit festgelegt werden (OID AS). Fehlt die Definition, gilt diejenige des Themas, es sei denn, es werde explizit festgelegt, dass keine Objektidentifikationen gefragt sind (NO OID). Es ist nicht möglich, eine bereits gemachte OID Definition zu erweitern, ausser dass ein geerbtes ANY durch eine konkrete Definition ersetzt wird. Ein geerbtes ANY kann jedoch nicht durch NO OID ersetzt werden. (vgl. Kapitel 2.8.9 Wertebereiche von Objektidentifikationen). ([1] Chap. 2.5.3)
Generell gilt, dass OIDs XML-ID sein sollen mit bestimmten Zulässigkeiten ("à la INTERLIS"):
XML-ID= XML-ValueDelimiter [XML-NcName ':' ] ( Letter | Digit | '_' ) { Letter | Digit | '_' | '-' | '.' } XML-ValueDelimiter.
([1] Chap. 3.3.1.) Also ist XML-NcName
(das keine Digits als erstes Zeichen zulässt) optional.
([1] Anhang D)
Also soll diese ID aus 16 Zeichen bestehen, die aus Digits und Lettern bestehen. Benutzer soll Prefix definieren. Postfix soll während des Erfassens generiert werden können.
ili2db erstellt
t_ili_tid character varying(200)
OID-Werte von textlichen OID-Wertebereichen müssen die Regeln des XML-ID-Typs erfüllen: erstes Zeichen muss Buchstabe oder Unterstrich sein, dann folgen Buchstaben, Ziffern, Punkte, Minuszeichen, Unterstriche; keine Doppelpunkte (!), siehe www.w3.org/TR/REC-xml. ([1] Chap. 2.8.9)
Also sind keine Digits als erste Zeichen erlaubt. Siehe auch opengisch/QgisModelBaker#599 (comment)
Grundsätzlich 0 .. 2147483647
Wird aber irgendwie nicht von ili2db geprüft.
Wenn keine Definition mit OID AS
besteht, wird in ili2db von TEXT
ausgegangen und somit keine führenden Digits akzeptiert. Siehe opengisch/QgisModelBaker#599 (comment)
OID-Werte von textlichen OID-Wertebereichen müssen die Regeln des XML-ID-Typs erfüllen: erstes Zeichen muss Buchstabe oder Unterstrich sein, dann folgen Buchstaben, Ziffern, Punkte, Minuszeichen, Unterstriche; keine Doppelpunkte (!), siehe www.w3.org/TR/REC-xml.
Wenn ein Modell importiert und so die physische Datenbank erstellt wird, müssen für alle möglichen Daten Behälter erstellt werden. Im Moment wird für jede Schnittmenge Modell bzw. Topic mit Dataset ein Behälter erstellt. Dies führt zu einigen ungenutzten Behälter, die zu unnötigen Relationen führen und auch die Auswahl des korrekten Behälters erschweren.
Da nicht automatisch erkannt werden kann, welche Behälter nicht genutzt werden bzw. welche Behälter erst mit dem Daten-Import erstellt werden, sollen Benutzer:innen dies steuern können. In diesem Zusammenhang soll dann auch die OID definiert werden.
[1] INTERLIS 2.3 Referenzhandbuch
opengisch/QgisModelBaker#340 opengisch/QgisModelBaker#599 opengisch/QgisModelBaker#718
Mockups: https://excalidraw.com/#json=LfBdQ8uffPcCG4zYwJWoM,LY_3TF23TIzINqqKseAxyw
[1] INTERLIS 2.3 Referenzhandbuch