GOV/Qualitätskontrolle: Unterschied zwischen den Versionen

aus GenWiki, dem genealogischen Lexikon zum Mitmachen.
< GOV
Zur Navigation springen Zur Suche springen
Zeile 53: Zeile 53:
* 92 (Kirchengemeinde)
* 92 (Kirchengemeinde)


  SELECT o.textualId from Property t, GovItem o
<sql>SELECT o.textualId FROM GovItem o, Property t
     LEFT JOIN Property k ON k.gov_object=t.gov_object AND k.type=7
     LEFT JOIN Property k ON k.gov_object=t.gov_object AND k.type=7
     WHERE t.type=2 and t.typeObject IN (26,29,92,42,81)
     WHERE t.type=2 and t.typeObject IN (26,29,92,42,81)
       AND o.id=t.gov_object AND k.id IS NULL;
       AND o.id=t.gov_object AND k.id IS NULL;</sql>
2009-01-30  388 Einträge


=== Orte und Ortsteile mit falscher PLZ  ===
=== Orte und Ortsteile mit falscher PLZ  ===

Version vom 30. Januar 2009, 21:17 Uhr

GOV-Hauptseite > GOV/Projekt > GOV/Qualitätskontrolle mit Taxo2Map

Fehlersuche in Datenbank

Objekte ohne Namen

Vielfach werden in GOV Kindobjekte aufgelistet, die keinen Namen haben und die damit auch nicht als Objekt editierbar oder löschbar sind. Diese Objekte sollten über einen Suchmechanismus gefunden werden können und dann gelöscht werden. <sql>SELECT o.textualId FROM GovItem o

  LEFT JOIN Property n ON n.gov_object=o.id AND n.type=1
  WHERE o.deleted=0 AND o.itemClass='o' AND n.id IS NULL;</sql>

2009-01-30 keine Einträge

Objekte ohne Typ

<sql>SELECT o.textualId FROM GovItem o

  LEFT JOIN Property t ON t.gov_object=o.id AND t.type=2
  WHERE o.deleted=0 AND o.itemClass='o' AND t.id IS NULL;</sql>

2009-01-30 keine Einträge - abgesichert durch Programmlogik

Kirchen ohne Standort

<sql>SELECT o.textualId FROM GovItem o, Property t

LEFT JOIN Relation r ON r.child=t.gov_object AND r.type=2
WHERE t.type=2 AND t.typeObject=26 
  AND o.id=t.gov_object AND r.parent IS NULL;</sql>

2009-01-30 15.402 Einträge

Eingeschränkt auf eine Landeskirche oder einen Kirchenkreis (hier 172369=Oppeln): <sql>SELECT church.textualId

FROM relation_index, GovItem church, Property t 
LEFT JOIN Relation r ON r.child=t.gov_object AND r.type=2 
WHERE relation_index.parent =172369 
 AND church.id=relation_index.child 
 AND t.gov_object=relation_index.child 
 AND t.type=2 AND typeObject=26 
 AND r.parent IS NULL;</sql>

Kirchspiele ohne Kirche

Relevante Objekt-Typen:

  • 29 (Kirchspiel)
  • 42 (Pfarrei)
  • 81 (Kloster)
  • 92 (Kirchengemeinde)
SELECT o.textualId from Property t, GovItem o
  LEFT JOIN Relation r ON r.parent=t.gov_object AND r.type=3
  WHERE t.type=2 and t.typeObject IN (29,92,42,81) 
    AND o.id=t.gov_object and r.child IS NULL;

Religiöse Objekte ohne Konfession

Relevante Objekt-Typen:

  • 26 (Kirche)
  • 29 (Kirchspiel)
  • 42 (Pfarrei)
  • 81 (Kloster)
  • 92 (Kirchengemeinde)

<sql>SELECT o.textualId FROM GovItem o, Property t

   LEFT JOIN Property k ON k.gov_object=t.gov_object AND k.type=7
   WHERE t.type=2 and t.typeObject IN (26,29,92,42,81)
     AND o.id=t.gov_object AND k.id IS NULL;</sql>

2009-01-30 388 Einträge

Orte und Ortsteile mit falscher PLZ

  • Länge der PLZ = 1 (z.B. nur "O" oder "W")
  • kein Jahr bis bei PLZ die mit "O" oder "W" beginnt
  • in DE: Länge PLZ = 4

Orte und Koordinaten im übergeordneten Objekt

  • Orte in einem Bundesland/Regierungsbezirk, die keine Koordinaten haben

<sql>SELECT c.textualId, p.textualId

 FROM Property, Type, GovItem p, GovItem c, relation_index 
 WHERE parent = p.id AND child=c.id 
  AND p.textualId='adm_369130'    # Kennung des übergeordneten Objekts
  AND Property.gov_object=c.id 
  AND Property.type=2 
  AND Type.id=typeObject 
  AND Type.has_position=1         # Typ muß eine Position erlauben
  AND c.deleted=0                 # nicht gelöscht
  AND typeObject<>18             # keine Gemeinde
  AND (c.latitude is null OR c.latitude=0);   # keine Position angegeben</sql>
  • Orte die identische Koordinaten in einem Bundesland/Regierungsbezirk haben

Orte ohne Koordinate

Gelöschte Objekte und solche mit einem Typ, der keine Position zuläßt, dürfen nicht mitgezählt werden.

 SELECT count(distinct textualId) FROM GovItem i 
   JOIN Property p ON  i.id=p.gov_object AND p.type=2 
   JOIN Type t ON t.id=typeObject 
   WHERE itemClass='o' deleted=0 and latitude is null or latitude=0 and position=1;

Gelöschte Objekte mit Kindern

Ein gelöschtes Objekt darf nie als Elternobjekt eingetragen sein. <sql>SELECT DISTINCT textualId

 FROM GovItem p, Relation r 
 WHERE p.deleted =1 AND parent =p.id;</sql>

auch nicht im Relationenindex: <sql>SELECT DISTINCT textualId

 FROM GovItem, relation_index
 WHERE deleted = 1 AND parent=GovItem.id;</sql>

Orte an den Rändern von Einheiten

im Norden:

SELECT c.* FROM GovItem i JOIN relation_index ON relation_index.parent=i.id JOIN GovItem c ON relation_index.child=c.id
  WHERE c.latitude IS NOT NULL 
   AND i.textualId='OBJEKTKENNUNG' ORDER BY c.latitude DESC LIMIT 1;

im Süden:

SELECT c.* FROM GovItem i JOIN relation_index ON relation_index.parent=i.id JOIN GovItem c ON relation_index.child=c.id
  WHERE c.latitude IS NOT NULL 
   AND i.textualId='OBJEKTKENNUNG' ORDER BY c.latitude ASC LIMIT 1;

im Westen:

SELECT c.* FROM GovItem i JOIN relation_index ON relation_index.parent=i.id JOIN GovItem c ON relation_index.child=c.id
  WHERE c.latitude IS NOT NULL 
   AND i.textualId='OBJEKTKENNUNG' ORDER BY c.longitude ASC LIMIT 1;

im Osten:

SELECT c.* FROM GovItem i JOIN relation_index ON relation_index.parent=i.id JOIN GovItem c ON relation_index.child=c.id
  WHERE c.latitude IS NOT NULL 
   AND i.textualId='OBJEKTKENNUNG' ORDER BY c.longitude DESC LIMIT 1;

Gemeinden ohne OpenGeoDB-Zuordnung

Da OpenGeoDB alle deutschen Gemeinden enthält, müßte auch jede Gemeinde im GOV eine externe Kennung opengeodb:... haben.

  SELECT textualId, o.content from GovItem, Property t
    LEFT JOIN Property o ON o.gov_object = GovItem.id AND o.type=6 AND o.content like 'opengeodb:%'
    WHERE t.type=2 and t.typeObject=18 AND o.id is null AND t.gov_object = GovItem.id;

Gemeinden ohne übergeordnetes Objekt

Für Gemeinden lassen sich einfach Zugehörigkeiten feststellen. Diese Gemeinden haben überhaupt keine Zugehörigkeit: <sql>SELECT textualId FROM GovItem, Property

 LEFT JOIN relation_index p ON p.child=GovItem.id 
 WHERE GovItem.deleted =0 and GovItem.id=Property.gov_object
 AND Property.type=2 and Property.typeObject =18 AND p.id is null;</sql>

vermischte Gemeinden und Dörfer

Um Ein- und Umgemeindungen korrekt modellieren zu können, ist es notwendig, eigene Gemeindeobjekt zu haben. Leider gibt es bereits viele Einträge, bei denen Gemeinde und Dorf vermischt wurden. <sql>SELECT textualId FROM Property p1, Property p2, GovItem

WHERE  GovItem.id=p1.gov_object AND p1.type=2 AND p2.type=2
  AND p1.typeObject <> p2.typeObject AND p1.gov_object = p2.gov_object
  AND p1.typeObject=18;</sql>

Eingeschränkt auf Kreis/Land etc: <sql>SELECT DISTINCT c.textualId

 FROM Property p1, Property p2, GovItem c, GovItem p, relation_index  
 WHERE  c.id=p1.gov_object AND p1.type=2 AND p2.type=2
  AND p1.typeObject <> p2.typeObject AND p1.gov_object = p2.gov_object
  AND p1.typeObject=18  AND p1.gov_object=relation_index.child AND relation_index.parent=p.id 
  AND p.textualId='adm_369097';</sql>

kirchliche Abhängigkeiten

Die komplette Zugehörigkeit sieht so aus: GOV kirchliche abhaengigkeiten.svg

So findet man Objekte bei denen eine der Abhängigkeiten fehlt:

Verbindung B-C

<sql>SELECT a.textualId, b.textualId, c.textualId FROM GovItem a, Relation ac, Relation ab, Property at, (GovItem c, GovItem b) LEFT JOIN Relation bc ON bc.type=1 AND bc.child=b.id AND bc.parent=c.id WHERE at.gov_object=a.id AND at.type=2 AND at.typeObject in (124,13,26,30) AND ac.type=3 AND ab.type=2 AND ab.child=a.id AND ab.parent=b.id AND ac.child=a.id AND ac.parent=c.id AND bc.parent IS NULL;</sql>

Verbindung A-B

<sql>SELECT a.textualId, b.textualId, c.textualId FROM GovItem c, Relation ac, Property at, Relation bc, (GovItem b, GovItem a) LEFT JOIN Relation ab ON ab.type=2 AND ab.child=a.id AND ab.parent=b.id WHERE at.gov_object=a.id AND at.type=2 AND at.typeObject in (124,13,26,30) AND ac.type=3 AND bc.type=1 AND bc.child=b.id AND bc.parent=c.id AND ac.child=a.id AND ac.parent=c.id AND ab.parent IS NULL;</sql> Hier sind viele "falsche" Treffer enthalten, wenn das Pfarrdorf noch nicht der Kirchengemeinde zugeordnet ist. Reparieren kann man aber in jedem Fall etwas.

Verbindung A-C

<sql>SELECT a.textualId, b.textualId, c.textualId FROM GovItem b, Relation ab, Property at, Relation bc, (GovItem c, GovItem a) LEFT JOIN Relation ac ON ac.type=2 AND ac.child=a.id AND ac.parent=c.id WHERE at.gov_object=a.id AND at.type=2 AND at.typeObject in (124,13,26,30) AND ab.type=3 AND bc.type=1 AND bc.child=b.id AND bc.parent=c.id AND ab.child=a.id AND ab.parent=c.id AND ac.parent IS NULL;</sql>

Hier sind viele "falsche" Treffer enthalten, wenn das Pfarrdorf noch nicht der Kirchengemeinde zugeordnet ist. Reparieren kann man aber in jedem Fall etwas.

Ersatzkennungen für existierende Objekte

Sie entstehen, wenn man das Verschmelzen von zwei Objekten zurückgängig macht. <sql>SELECT * FROM updated_ids, GovItem WHERE updated_ids.old_id=textualId AND deleted=0 ;</sql> 2009-01-30 keine Einträge

Kennzahlen

Manche Kennzahlen geben Auskunft über die Entwicklung der Qualität der im GOV enthaltenen Daten.

Anzahl Orte mit Position

 SELECT count(*) FROM GovItem WHERE itemClass ='o' AND latitude >0;

Anzahl Orte ohne Position

 SELECT count( distinct textualId) 
  FROM GovItem i , Property p, Type t  
  WHERE (latitude =0 or latitude is null) 
   and itemClass='o' AND gov_object=i.id 
   AND propertyClass='t' and typeObject=t.id 
   and t.locatedIn=1 ;
  • Anzahl Orte ohne Elternobjekt
  • Anzahl Werte mit Quellenangaben
  • Verteilung Anzahl Elternobjekte
  • Verteilung Verschachtelungstiefe
  • Verteilung Anzahl Kindobjekte
  • Objekte mit vielen Kindobjekte