Skip to content

Instantly share code, notes, and snippets.

@signedav
Last active February 4, 2021 08:34
Show Gist options
  • Save signedav/46cc9da79cfb0e3c427c15cd036cad44 to your computer and use it in GitHub Desktop.
Save signedav/46cc9da79cfb0e3c427c15cd036cad44 to your computer and use it in GitHub Desktop.
UsabILIty Hub Technisches Dokument

Zusammenfassung

Ein ilidata.xml basiert auf dem Model DatasetIdx16. Es enthält Elemente "DatasetMetadata" wo relative Pfade zu Files definiert sind. Die Files liegen auf demselben Server/Repo wie das ilidata.xml. Es gibt verschiedene Server/Repos. Die "DatasetMetadata" werden anhand einer Systemübergreifenden Id identifiziert. Es ist dem Benutzer überlassen, wie diese Id lautet (in den Beispielen werden UUIDs genommen).

Ein Meta-Konfigurationsfile ist eine INI-Datei, die Konfigurationen für ein oder mehrere Tools enthält. Dort kann auf andere Files referenziert werden - anhand der Systemübergreifenden DatasetMetadata-Id.

Die Tools können dies unterschiedlich handhaben. ZBs. wird ili2db das Meta-Konfigurationsfile übergeben. Dort ist dann auch das Modell spezifiziert. Im ModelBaker hingegen startet man (meistens) mit dem Modell. Wenn ein Modell importiert wird, soll auf allen relevanten Servern/Repos nach relevanten Meta-Konfigurationsfiles gesucht werden (und Katalogen - mehr dazu später). Die benötigten "DatasetMetadata" Elemente werden anhand ihres Child-Elements "categories" mit dem Modell-Namen identifiziert. Ausserdem kann in "categories" auch das Tool oder der File-Typ enthalten sein, was das Filtern vereinfachen kann. Wenn mehrere Meta-Konfigurationsfiles gefunden werden, kann man entscheiden, welches man verwenden möchte. In diesem Meta-Konfigurationsfile können dann die Toppinginformationen definert werden.

Das DatasetMetadata Element:

<DatasetIdx16.DataIndex.DatasetMetadata TID="be6623c1-aa64-4a07-931e-fc4f0745f025">
	<id>ch.opengis.ili.config.KbS_LV95_V1_4_config_V1_0</id>
	<version>2021-01-06</version>
	<owner>mailto:david@opengis.ch</owner>
	<categories>
		<DatasetIdx16.Code_>
			<!--  dieser Eintrag betrifft das Modell KbS_LV95_V1_4  -->
			<value>http://codes.interlis.ch/model/KbS_LV95_V1_4</value>
			<!--  Konvention: http://codes.interlis.ch/model/{MODELNAME}  -->
		</DatasetIdx16.Code_>
		<DatasetIdx16.Code_>
			<!--  dieser Eintrag betrifft eine Meta-Config  -->
			<value>http://codes.interlis.ch/type/metaconfig</value>
			<!--  fix Wert fuer Meta-Configs  -->
		</DatasetIdx16.Code_>
		<DatasetIdx16.Code_>
			<!--  Meta-Config wurde speziell auch fuer den ModelBaker gemacht  -->
			<value>http://codes.opengis.ch/modelbaker</value>
			<!--  oder sonst irgend eine URL die den ModelBaker Devs passt  -->
		</DatasetIdx16.Code_>
	</categories>
	<files>
		<DatasetIdx16.DataFile>
			<fileFormat>text/plain;version=2.3</fileFormat>
			<file>
				<DatasetIdx16.File>
					<path>opengisch_KbS_LV95_V1_4.ini</path>
					<!--  realtiver Pfad (zu ilidata.xml) der Meta-Config Datei  -->
				</DatasetIdx16.File>
			</file>
		</DatasetIdx16.DataFile>
	</files>
</DatasetIdx16.DataIndex.DatasetMetadata>

Aus dem Meta-Konfigurationsfile können nun die Topping informationen gelesen werden. Auch Konfigurationen für den ModelBaker (oder andere Tools), können dort definiert sein. Oder es kann auch auf Kataloge referenziert werden, die im Zusammenhang mit diesem Modell benötigt werden.

[CONFIGURATION]
baseConfig=ilidata:remoteBaseConfigBasketId;ilidata:otherRemoteBaseConfigBasketId;path/otherBaseConfigLocalFile
org.interlis2.validator.config=ilidata:ilivalidatorConfigBasketId
ch.ehi.ili2db.referenceData=ilidata:catalogBasketId;path/localFile.xml
qgis.modelbaker.layertree=data:ch.opengis.configs.layertree.KbS_LV95_V1_4

[qgis.modelbaker.qml]
polygonStructure=data:ch.opengis.configs.KbS_LV95_V1_4_001
MultiPolygon=data:ch.opengis.configs.KbS_LV95_V1_4_002
ZustaendigkeitKataster=data:ch.opengis.configs.KbS_LV95_V1_4_003
Belasteter_Standort=data:ch.opengis.configs.KbS_LV95_V1_4_004

Die Id ch.opengis.configs.layertree.KbS_LV95_V1_4 referenziert auf ein DatasetMetadata, das eine (zBs. yaml) Datei enthält, wo die Layer-Struktur definiert ist. Die Ids ch.opengis.configs.KbS_LV95_V1_4_001 - 4 zeigen auf DatasetMetadata Elemente, die QML Files für die Styles enthalten.

Vorerst soll die Topping-Konfiguration nicht in einem separaten Topping-File gemacht werden. Falls dies aber mal benötigt wird, ist es ja kein Problem es so zu erweitern, dass qgis.modelbaker.topping auf ein weiteres Konfigurationsfile linkt. Dies Section "qgis.modelbaker.qml" ist daz u da, um die QML Files einem Layer bzw. Tabellennamen zuzuordnen.

Referenzen auf andere Metakonfigurationen

Auch wenn es im ersten Schritt vom Modelbaker nicht genutzt wird, soll es auch möglich sein, dass man vom einen Metakonfigurationsfile auf andere Metakonfigurationsfiles linken kann. Somit würde eine Art "Vererbung" der Konfiguration möglich sein. Claude stellt sich vor, dass ein Meta-Konfigurationsfile optional über den Eintrag "baseConfig" auf ein oder mehrer andere Meta-Konfigurationsfiles linken kann. (Der Eintrag "baseConfig" wäre also Tool und Kontext unabhängig)

ilisites.xml

Anhand der ilisites könnte auf weiter Plattformen verwiesen werden - dies müsste noch mit Claude und Matthias besprochen werden.

Kataloge

Für eine erste Integration in Model Baker ist für uns ideal, wenn wir die Kataloge eines Models genauso wie die Metakonfigurationsdatei direkt im ilidata.xml finden können also unabhängig von der Metakonfigurationsdatei. Es soll aber auch möglich sein, die Kataloge im Metakonfigurationsfile zu definieren. Zweiteres benutzt zBs. ili2db.

Hier also zwei Beispiele, wie man vom Model auf den Catalog kommen könnte.

Entweder direkt über die categories:

      <DatasetIdx16.DataIndex.DatasetMetadata TID="be6623c1-aa64-4a07-931e-fc4f0745f025">
        <id>ch.opengis.ili.catalogue.PlanerischerGewaesserschutz_Codetexte_V1_1</id>
        <version>2021-01-06</version>
        <owner>mailto:david@opengis.ch</owner>
        <categories>
          <DatasetIdx16.Code_>
          <value>http://codes.interlis.ch/model/PlanerischerGewaesserschutz_LV95_V1_1</value>
          </DatasetIdx16.Code_>
          <DatasetIdx16.Code_>
          <value>http://codes.interlis.ch/tool/catalogue</value>
          </DatasetIdx16.Code_>
          <DatasetIdx16.Code_>
          <value>http://codes.opengis.ch/modelbaker</value>
          </DatasetIdx16.Code_>
        </categories>
        <files>
          <DatasetIdx16.DataFile>
            <fileFormat>text/plain;version=2.3</fileFormat>
            <file>
              <DatasetIdx16.File>
                <path>catalogue/opengisch_PlanerischerGewaesserschutz_Codetexte_V1_1.xml</path>
              </DatasetIdx16.File>
            </file>
          </DatasetIdx16.DataFile>
        </files>
        <model>
            <DatasetIdx16.ModelLink>
                <name>LegendeEintrag_PlanGewaesserschutz_V1_1</name>
            </DatasetIdx16.ModelLink>
        </model>
      </DatasetIdx16.DataIndex.DatasetMetadata>

Und hier würde dieser Katalog im Modelbaker als möglicher Katalog aufgelistet - der Benutzer kann ihn auswählen oder auch nicht. Somit ist es keine Bedingung sondern nur ein Hint im Stil von "dieser Katalog könnte für dieses Model verwendet werden."

Zweiter Fall ist das Definieren von Katalogen über ein Metakonfigurationsfile:
      <DatasetIdx16.DataIndex.DatasetMetadata TID="be6623c1-aa64-4a07-931e-fc4f0745f025">
        <id>ch.opengis.ili.config.PlanerischerGewaesserschutz_config</id>
        <version>2021-01-06</version>
        <owner>mailto:david@opengis.ch</owner>
        <categories>
          <DatasetIdx16.Code_>
          <value>http://codes.interlis.ch/model/PlanerischerGewaesserschutz_LV95_V1_1</value>
          </DatasetIdx16.Code_>
          <DatasetIdx16.Code_>
          <value>http://codes.interlis.ch/tool/metaconfig</value>
          </DatasetIdx16.Code_>
          <DatasetIdx16.Code_>
          <value>http://codes.opengis.ch/modelbaker</value>
          </DatasetIdx16.Code_>
        </categories>
        <files>
          <DatasetIdx16.DataFile>
            <fileFormat>text/plain;version=2.3</fileFormat>
            <file>
              <DatasetIdx16.File>
                <path>metaconfig/opengisch_PlanerischerGewaesserschutz.ini</path>
              </DatasetIdx16.File>
            </file>
          </DatasetIdx16.DataFile>
        </files>
      </DatasetIdx16.DataIndex.DatasetMetadata>
     
      <DatasetIdx16.DataIndex.DatasetMetadata TID="be6623c1-aa64-4a07-931e-fc4f0745f025">
        <id>ch.opengis.ili.catalogue.PlanerischerGewaesserschutz_Codetexte_V1_1</id>
        <version>2021-01-06</version>
        <owner>mailto:david@opengis.ch</owner>
        <files>
          <DatasetIdx16.DataFile>
            <fileFormat>text/plain;version=2.3</fileFormat>
            <file>
              <DatasetIdx16.File>
                <path>catalogue/opengisch_PlanerischerGewaesserschutz_Codetexte_V1_1.xml</path>
              </DatasetIdx16.File>
            </file>
          </DatasetIdx16.DataFile>
        </files>
        <model>
            <DatasetIdx16.ModelLink>
                <name>LegendeEintrag_PlanGewaesserschutz_V1_1</name>
            </DatasetIdx16.ModelLink>
        </model>
      </DatasetIdx16.DataIndex.DatasetMetadata>

Und dann in der Metakonfigurationsdatei opengisch_PlanerischerGewaesserschutz.ini: ch.ehi.ili2db.referenceData=data:ch.opengis.ili.catalogue.PlanerischerGewaesserschutz_Codetexte_V1_1

Im zweiten Fall wird der Katalog automatisch geladen, da er fix konfiguriert wurde im Metakonfigurationsfile.

Idee: es könnte im GUI auch alle zur Verfügung stehenden Kataloge anzeigen, die es direkt übers ilidata.xml findet und dann diese anwählen, die es in der angeqählten Metakonfigurationsdatei findet.

Metakonfiguration erstellen (future)

Der Benutzer wählt ein Modell und Kataloge (und hier wäre es nett, wenn er nur die infrage kommenden Katalog sieht (=dein Beispiel)) aus; Schemaimport und Katalog-Import erfolgt; Benutzer macht Config; Benutzer speichert alles als Meta-Konfig ab (oder lädt es auf UsabilityHub hoch).

Links

Siehe auch http://models.interlis.ch/core/DatasetIdx16.ili fürs Model des ilidata.xml wie auch für ein ilidata.xml Beispiel https://github.com/claeis/iox-ili/blob/master/src/test/data/validator/RemoteObject23/repos1/ilidata.xml

Daten auf dem Demoserver sind online hier https://usabilityhub.opengis.ch/

Notitzen zum Metakonfigurationsfile: claeis/iox-ili#91

Weitere Konzeptnotizen hier https://app.clickup.com/2192114/docs/22wqj-2528/22wqj-554

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment