Organisationen in DCAT-AP.de

Wie viele öffentliche Organisationen aus Deutschland liefern eigentlich offene Daten? Mit einer SPARQL-Abfrage bei GovData sollte das schnell beantwortet sein. Dabei kommt die atemberaubende Zahl von 158.859 Organisationen heraus. Das kann aber nicht stimmen. Ein genauerer Blick auf die Metadaten zeigt, dass wir in Deutschland ein großes Problem mit der Beschreibung von Organisationen in den Metadaten haben.

Die Anzahl der Organisationen zu bestimmen, ist vermeintlich leicht. Diese Abfrage beim SPARQL-Assistent von GovData sollte die Antwort liefern.

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT (COUNT(?org) AS ?count) WHERE {
  ?org a foaf:Organization . 
} 

Es werden alle Einträge im Katalog von GovData gezählt, die vom Typ foaf:Organzation sind. Das Ergebnis sind 158.859 Organisationen. Schauen wir uns genauer an, was das für Organisationen sind. Wenn man nur die Organisationen zählt, die eindeutig per URI identifiziert sind (SPARQL-Filter FILTER(isURI(?org))), kommt eine ganz andere Zahl heraus: 696 Organisationen. Das sind nur 0,4% aller Organisationen. Woher kommt dieser Unterschied? Das hängt damit zusammen, wie Organisationen in DCAT aufgeschrieben werden.

Schreibweise von Organisationen in DCAT

Man kann z.B. den Herausgeber eines Datensatzes als Referenz auf ein eindeutig per URI identifizierten Eintrag der Organisation schreiben:

<https://example.org/dataset/1>
  a dcat:Dataset ;
  dct:publisher <https://opendata.schleswig-holstein.de/organization/lfu> .

<https://example.org/dataset/2>
  a dcat:Dataset ;
  dct:publisher <https://opendata.schleswig-holstein.de/organization/lfu> .

<https://opendata.schleswig-holstein.de/organization/lfu>
  a foaf:Organization ;
  foaf:name "Landesamt für Umwelt Schleswig-Holstein" .

Egal wie viele Datensätze es von dieser Organisation gibt, es gibt immer nur genau einen Eintrag der Organisation selbst.

Die andere Möglichkeit ist es, eine Organisation als RDF blank node zu schreiben:

<https://example.org/dataset/1>
  a dcat:Dataset ;
  dct:publisher [
     a foaf:Organizsation ;
     foaf:name "Landesvermessungsamt" .
  ] .


<https://example.org/dataset/2>
  a dcat:Dataset ;
  dct:publisher [
     a foaf:Organizsation ;
     foaf:name "Landesvermessungsamt" .
  ] .

Dadurch sind nun allerdings zwei Einträge vom Typ foaf:Organizsation entstanden. Direkt referenzieren kann man sie mangels URI auch nicht.

Vorkommen

Wo tauchen diese Organisationen in den DCAT-Metadaten auf? Eine SPARQL-Abfrage gibt Antwort. Zunächst die “ordentlichen” Organisationen mit URI:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?p (COUNT(?org) AS ?count) WHERE { 
  ?s ?p ?org .
  ?org a foaf:Organization . 
  FILTER(isURI(?org))
} GROUP BY ?p
Eigenschaft Anzahl
dct:publisher 47.202
dcatde:maintainer 241
dcat:contactPoint 155
foaf:homepage 4

Sonderbar, es gibt Organisationen, die Homepages sind. 😵‍💫 Aber ansonsten sind es - wie ich schon vermutet hatte - vor allem Herausgeber.

Wie sieht es bei den nicht referenzierbaren Organisationen aus? Wir müssen den SPARQL-Filter einfach nur umdrehen:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?p (COUNT(?org) AS ?count) WHERE { 
  ?s ?p ?org .
  ?org a foaf:Organization . 
  FILTER(!isURI(?org))
} GROUP BY ?p

Erwartungsgemäß ist das Bild hier ein wenig bunter, aber nicht so bunt, wie ich es befürchtet hatte. Da taucht auch eine lange nicht mehr gesehene Eigenschaft aus dem DCAT-AP.de 1.0 Standard auf-

Eigenschaft Anzahl
dct:publisher 90.742
dcatde:maintainer 25.041
dct:creator 24.583
dcatde1:originator 14.276
dcatde:originator 1.165
dct:contributor 694
dcatde:contributor 20

Herkunft

Mit diesem Wissen (ohne Einschränkung auf eine Eigenschaft überlastet man nämlich schnell den SPARQL-Endpunkt) lässt sich nun genauer ermitteln, aus welchen Portalen diese Angaben kommen. Die Ausführung überlasse ich interessierten Personen:

PREFIX dct: <http://purl.org/dc/terms/>
PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX dcatde: <http://dcat-ap.de/def/dcatde/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?contributor (COUNT(?org) AS ?count) WHERE { 
  ?dataset dct:publisher ?org .
  ?dataset a dcat:Dataset .
  ?dataset dcatde:contributorID ?contributor .
  ?org a foaf:Organization . 
  FILTER(!isURI(?org))
} GROUP BY ?contributor
ORDER BY DESC(?count)

Aufräumen

Wer selbst in seinem Portal auf die Suche gehen möchte, kann das mit dieser SPARQL-Abfrage machen:

PREFIX dct: <http://purl.org/dc/terms/>
PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX dcatde: <http://dcat-ap.de/def/dcatde/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?dataset ?p WHERE { 
  VALUES ?p { dct:publisher dcatde:maintainer dct:creator dcatde:originator dct:contributor dcatde:contributor }
  ?dataset ?p ?org .
  ?dataset a dcat:Dataset .
  ?dataset dcatde:contributorID <http://dcat-ap.de/def/contributors/schleswigHolstein> .
  ?org a foaf:Organization . 
  ?org foaf:name ?name .
  FILTER(!isURI(?org))
} LIMIT 100

Wenn ich mir die ersten Einträge so ansehen, würde ich sagen, dass es in grundsätzlicher Fehler beim DCAT-Export von CKAN ist. Denn der Herausgeber ist ordentlich als Objekt im Datenmodell vorhanden, wird aber nicht ausgegeben. Noch sonderbarer ist, dass es offenbar in machen Fälle funktioniert, sonst wären nicht so viele Organisationen aus Schleswig-Holstein mit URI im Katalog vorhanden.

Dubletten

Doch leider ist noch mehr zu tun. Denn auch bei den “ordentlichen” Organisationen gibt es Arbeit. Da sind nämlich einige Dubletten drin. Nicht so viele, wie ich zunächst befürchtet hatte, aber doch einige. Hier ist die Abfrage:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT * WHERE { 
  ?org a foaf:Organization . 
  ?org foaf:name ?name .
  FILTER(isURI(?org))
} ORDER BY ?name

Spätestens auf der vierten Seite wird man fündig. Da würden ein paar owl:sameAs-Angaben schon weiterhelfen. Die gibt es im gesamten GovData-Katalog aber noch gar nicht.

Wie man sieht, geht die Arbeit im Bereich der Metadatenqualität nie aus.