GOV/Qualitätskontrolle: Unterschied zwischen den Versionen

aus GenWiki, dem genealogischen Lexikon zum Mitmachen.
< GOV
Zur Navigation springen Zur Suche springen
K (neue GeSHi Extension)
Zeile 5: Zeile 5:
=== Objekte ohne Namen ===
=== 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.
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  
<source lang="sql">SELECT o.textualId FROM GovItem o  
   LEFT JOIN Property n ON n.gov_object=o.id AND n.type=1
   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>
   WHERE o.deleted=0 AND o.itemClass='o' AND n.id IS NULL;</source>
2009-01-30 keine Einträge
2009-01-30 keine Einträge


=== Objekte ohne Typ ===
=== Objekte ohne Typ ===
<sql>SELECT o.textualId FROM GovItem o  
<source lang="sql">SELECT o.textualId FROM GovItem o  
   LEFT JOIN Property t ON t.gov_object=o.id AND t.type=2
   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>
   WHERE o.deleted=0 AND o.itemClass='o' AND t.id IS NULL;</source>
2009-01-30 keine Einträge - abgesichert durch Programmlogik
2009-01-30 keine Einträge - abgesichert durch Programmlogik


=== Kirchen ohne Standort ===
=== Kirchen ohne Standort ===
<sql>SELECT o.textualId FROM GovItem o, Property t
<source lang="sql">SELECT o.textualId FROM GovItem o, Property t
  LEFT JOIN Relation r ON r.child=t.gov_object AND r.type=2
  LEFT JOIN Relation r ON r.child=t.gov_object AND r.type=2
  WHERE t.type=2 AND t.typeObject=26  
  WHERE t.type=2 AND t.typeObject=26  
   AND o.id=t.gov_object AND r.parent IS NULL;</sql>
   AND o.id=t.gov_object AND r.parent IS NULL;</source>
2009-01-30  15.402 Einträge
2009-01-30  15.402 Einträge


Eingeschränkt auf eine Landeskirche oder einen Kirchenkreis (hier 172369=Oppeln):
Eingeschränkt auf eine Landeskirche oder einen Kirchenkreis (hier 172369=Oppeln):
<sql>SELECT church.textualId  
<source lang="sql">SELECT church.textualId  
  FROM relation_index, GovItem church, Property t  
  FROM relation_index, GovItem church, Property t  
  LEFT JOIN Relation r ON r.child=t.gov_object AND r.type=2  
  LEFT JOIN Relation r ON r.child=t.gov_object AND r.type=2  
Zeile 31: Zeile 31:
   AND t.gov_object=relation_index.child  
   AND t.gov_object=relation_index.child  
   AND t.type=2 AND typeObject=26  
   AND t.type=2 AND typeObject=26  
   AND r.parent IS NULL;</sql>
   AND r.parent IS NULL;</source>


=== Kirchspiele ohne Kirche ===
=== Kirchspiele ohne Kirche ===
Zeile 40: Zeile 40:
* 92 (Kirchengemeinde)
* 92 (Kirchengemeinde)


SELECT o.textualId from Property t, GovItem o
<source lang="sql">SELECT o.textualId from Property t, GovItem o
   LEFT JOIN Relation r ON r.parent=t.gov_object AND r.type=3
   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)  
   WHERE t.type=2 and t.typeObject IN (29,92,42,81)  
     AND o.id=t.gov_object and r.child IS NULL;
     AND o.id=t.gov_object and r.child IS NULL;</source>


=== Religiöse Objekte ohne Konfession ===
=== Religiöse Objekte ohne Konfession ===
Zeile 53: Zeile 53:
* 92 (Kirchengemeinde)
* 92 (Kirchengemeinde)


<sql>SELECT o.textualId FROM GovItem o, Property t
<source lang="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;</sql>
       AND o.id=t.gov_object AND k.id IS NULL;</source>
2009-01-30  388 Einträge
2009-01-30  388 Einträge


Zeile 67: Zeile 67:
=== Orte und Koordinaten im übergeordneten Objekt ===
=== Orte und Koordinaten im übergeordneten Objekt ===
* Orte in einem Bundesland/Regierungsbezirk, die keine Koordinaten haben
* Orte in einem Bundesland/Regierungsbezirk, die keine Koordinaten haben
<sql>SELECT c.textualId, p.textualId  
<source lang="sql">SELECT c.textualId, p.textualId  
   FROM Property, Type, GovItem p, GovItem c, relation_index  
   FROM Property, Type, GovItem p, GovItem c, relation_index  
   WHERE parent = p.id AND child=c.id  
   WHERE parent = p.id AND child=c.id  
Zeile 77: Zeile 77:
   AND c.deleted=0                # nicht gelöscht
   AND c.deleted=0                # nicht gelöscht
   AND typeObject<>18            # keine Gemeinde
   AND typeObject<>18            # keine Gemeinde
   AND (c.latitude is null OR c.latitude=0);  # keine Position angegeben</sql>
   AND (c.latitude is null OR c.latitude=0);  # keine Position angegeben</source>
* Orte die identische Koordinaten in einem Bundesland/Regierungsbezirk haben
* Orte die identische Koordinaten in einem Bundesland/Regierungsbezirk haben


=== Orte ohne Koordinate ===
=== Orte ohne Koordinate ===
Gelöschte Objekte und solche mit einem Typ, der keine Position zuläßt, dürfen nicht mitgezählt werden.
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  
<source lang="sql">SELECT count(distinct textualId) FROM GovItem i  
     JOIN Property p ON  i.id=p.gov_object AND p.type=2  
     JOIN Property p ON  i.id=p.gov_object AND p.type=2  
     JOIN Type t ON t.id=typeObject  
     JOIN Type t ON t.id=typeObject  
     WHERE itemClass='o' deleted=0 and latitude is null or latitude=0 and position=1;
     WHERE itemClass='o' deleted=0 and latitude is null or latitude=0 and position=1;</source>


=== Gelöschte Objekte mit Kindern ===
=== Gelöschte Objekte mit Kindern ===
Ein gelöschtes Objekt darf nie als Elternobjekt eingetragen sein.
Ein gelöschtes Objekt darf nie als Elternobjekt eingetragen sein.
<sql>SELECT DISTINCT textualId
<source lang="sql">SELECT DISTINCT textualId
   FROM GovItem p, Relation r  
   FROM GovItem p, Relation r  
   WHERE p.deleted =1 AND parent =p.id;</sql>
   WHERE p.deleted =1 AND parent =p.id;</source>
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]] 62 Einträge   
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]] 62 Einträge   


auch nicht im Relationenindex:
auch nicht im Relationenindex:
<sql>SELECT DISTINCT textualId
<source lang="sql">SELECT DISTINCT textualId
   FROM GovItem, relation_index
   FROM GovItem, relation_index
   WHERE deleted = 1 AND parent=GovItem.id;</sql>
   WHERE deleted = 1 AND parent=GovItem.id;</source>


=== Orte an den Rändern von Einheiten ===
=== Orte an den Rändern von Einheiten ===
im Norden:
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
<source lang="sql"> 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  
   WHERE c.latitude IS NOT NULL  
     AND i.textualId='OBJEKTKENNUNG' ORDER BY c.latitude DESC LIMIT 1;
     AND i.textualId='OBJEKTKENNUNG' ORDER BY c.latitude DESC LIMIT 1;</source>
im Süden:
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
<source lang="sql"> 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  
   WHERE c.latitude IS NOT NULL  
     AND i.textualId='OBJEKTKENNUNG' ORDER BY c.latitude ASC LIMIT 1;
     AND i.textualId='OBJEKTKENNUNG' ORDER BY c.latitude ASC LIMIT 1;</source>
im Westen:
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
<source lang="sql"> 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  
   WHERE c.latitude IS NOT NULL  
     AND i.textualId='OBJEKTKENNUNG' ORDER BY c.longitude ASC LIMIT 1;
     AND i.textualId='OBJEKTKENNUNG' ORDER BY c.longitude ASC LIMIT 1;</source>
im Osten:
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
<source lang="sql"> 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  
   WHERE c.latitude IS NOT NULL  
     AND i.textualId='OBJEKTKENNUNG' ORDER BY c.longitude DESC LIMIT 1;
     AND i.textualId='OBJEKTKENNUNG' ORDER BY c.longitude DESC LIMIT 1;</source>


=== Gemeinden ohne OpenGeoDB-Zuordnung ===
=== Gemeinden ohne OpenGeoDB-Zuordnung ===
Da OpenGeoDB alle deutschen Gemeinden enthält, müßte auch jede aktuelle Gemeinde im GOV eine externe Kennung opengeodb:... haben.
Da OpenGeoDB alle deutschen Gemeinden enthält, müßte auch jede aktuelle Gemeinde im GOV eine externe Kennung opengeodb:... haben.
<sql>SELECT textualId FROM Property t, relation_index, GovItem  
<source lang="sql">SELECT textualId FROM Property t, relation_index, GovItem  
   LEFT JOIN Property o ON o.gov_object = GovItem.id AND o.type=6 AND o.content like 'opengeodb:%'
   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  
   WHERE t.type=2 and t.typeObject=18 AND o.id is null AND t.gov_object = GovItem.id  
     AND (t.time_end IS NULL OR t.time_end > 30000000)                        # aktuelle Gemeinde
     AND (t.time_end IS NULL OR t.time_end > 30000000)                        # aktuelle Gemeinde
     AND relation_index.parent=149273 AND relation_index.child=GovItem.id;    # in Deutschland</sql>
     AND relation_index.parent=149273 AND relation_index.child=GovItem.id;    # in Deutschland</source>
2009-01-30  [[Datei:Nuvola_apps_important.svg|32px]] 989 Einträge
2009-01-30  [[Datei:Nuvola_apps_important.svg|32px]] 989 Einträge


=== Gemeinden ohne übergeordnetes Objekt ===
=== Gemeinden ohne übergeordnetes Objekt ===
Für Gemeinden lassen sich einfach Zugehörigkeiten feststellen. Diese Gemeinden haben überhaupt keine Zugehörigkeit:
Für Gemeinden lassen sich einfach Zugehörigkeiten feststellen. Diese Gemeinden haben überhaupt keine Zugehörigkeit:
<sql>SELECT textualId FROM Property, GovItem  
<source lang="sql">SELECT textualId FROM Property, GovItem  
   LEFT JOIN relation_index p ON p.child=GovItem.id  
   LEFT JOIN relation_index p ON p.child=GovItem.id  
   WHERE GovItem.deleted =0 and GovItem.id=Property.gov_object
   WHERE GovItem.deleted =0 and GovItem.id=Property.gov_object
   AND Property.type=2 and Property.typeObject =18 AND p.id is null;</sql>
   AND Property.type=2 and Property.typeObject =18 AND p.id is null;</source>
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]] 33 Einträge
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]] 33 Einträge


=== vermischte Gemeinden und Dörfer ===
=== 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.
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
<source lang="sql">SELECT textualId FROM Property p1, Property p2, GovItem
  WHERE  GovItem.id=p1.gov_object AND p1.type=2 AND p2.type=2
  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 <> p2.typeObject AND p1.gov_object = p2.gov_object
   AND p1.typeObject=18;</sql>
   AND p1.typeObject=18;</source>
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]]  7987 Einträge
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]]  7987 Einträge


Eingeschränkt auf Kreis/Land etc:
Eingeschränkt auf Kreis/Land etc:
<sql>SELECT DISTINCT c.textualId  
<source lang="sql">SELECT DISTINCT c.textualId  
   FROM Property p1, Property p2, GovItem c, GovItem p, relation_index   
   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
   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 <> 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 p1.typeObject=18  AND p1.gov_object=relation_index.child AND relation_index.parent=p.id  
   AND p.textualId='adm_369097';</sql>
   AND p.textualId='adm_369097';</source>


=== kirchliche Abhängigkeiten ===
=== kirchliche Abhängigkeiten ===
Zeile 156: Zeile 156:
So findet man Objekte bei denen eine der Abhängigkeiten fehlt:
So findet man Objekte bei denen eine der Abhängigkeiten fehlt:
==== Verbindung B-C ====
==== Verbindung B-C ====
<sql>SELECT a.textualId, b.textualId, c.textualId  
<source lang="sql">SELECT a.textualId, b.textualId, c.textualId  
FROM GovItem a, Relation ac, Relation ab, Property at, (GovItem c, GovItem b)
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
LEFT JOIN Relation bc ON bc.type=1 AND bc.child=b.id AND bc.parent=c.id
Zeile 163: Zeile 163:
AND ab.child=a.id AND ab.parent=b.id  
AND ab.child=a.id AND ab.parent=b.id  
AND ac.child=a.id AND ac.parent=c.id
AND ac.child=a.id AND ac.parent=c.id
AND bc.parent IS NULL;</sql>
AND bc.parent IS NULL;</source>
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]]  3015 Einträge
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]]  3015 Einträge


==== Verbindung A-B ====
==== Verbindung A-B ====
<sql>SELECT a.textualId, b.textualId, c.textualId  
<source lang="sql">SELECT a.textualId, b.textualId, c.textualId  
FROM GovItem c, Relation ac, Property at, Relation bc, (GovItem b, GovItem a)
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
LEFT JOIN Relation ab ON ab.type=2 AND ab.child=a.id AND ab.parent=b.id
Zeile 174: Zeile 174:
AND bc.child=b.id AND bc.parent=c.id  
AND bc.child=b.id AND bc.parent=c.id  
AND ac.child=a.id AND ac.parent=c.id
AND ac.child=a.id AND ac.parent=c.id
AND ab.parent IS NULL;</sql>
AND ab.parent IS NULL;</source>
Hier sind viele "falsche" Treffer enthalten, wenn das Pfarrdorf noch nicht der Kirchengemeinde zugeordnet ist. Reparieren kann man aber in jedem Fall etwas.
Hier sind viele "falsche" Treffer enthalten, wenn das Pfarrdorf noch nicht der Kirchengemeinde zugeordnet ist. Reparieren kann man aber in jedem Fall etwas.
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]]  3769 Einträge
2009-01-30  [[Bild:Nuvola_apps_important.svg|32px]]  3769 Einträge


==== Verbindung A-C ====
==== Verbindung A-C ====
<sql>SELECT a.textualId, b.textualId, c.textualId  
<source lang="sql">SELECT a.textualId, b.textualId, c.textualId  
FROM GovItem b, Relation ab, Property at, Relation bc, (GovItem c, GovItem a)
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
LEFT JOIN Relation ac ON ac.type=2 AND ac.child=a.id AND ac.parent=c.id
Zeile 186: Zeile 186:
AND bc.child=b.id AND bc.parent=c.id  
AND bc.child=b.id AND bc.parent=c.id  
AND ab.child=a.id AND ab.parent=c.id
AND ab.child=a.id AND ab.parent=c.id
AND ac.parent IS NULL;</sql>
AND ac.parent IS NULL;</source>


Hier sind viele "falsche" Treffer enthalten, wenn das Pfarrdorf noch nicht der Kirchengemeinde zugeordnet ist. Reparieren kann man aber in jedem Fall etwas.
Hier sind viele "falsche" Treffer enthalten, wenn das Pfarrdorf noch nicht der Kirchengemeinde zugeordnet ist. Reparieren kann man aber in jedem Fall etwas.
Zeile 193: Zeile 193:
=== Ersatzkennungen für existierende Objekte ===
=== Ersatzkennungen für existierende Objekte ===
Sie entstehen, wenn man das Verschmelzen von zwei Objekten zurückgängig macht.
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>
<source lang="sql">SELECT * FROM updated_ids, GovItem WHERE updated_ids.old_id=textualId AND deleted=0 ;</source>
2009-01-30 {{OK}} keine Einträge
2009-01-30 {{OK}} keine Einträge


Zeile 200: Zeile 200:


=== Anzahl Orte mit Position  ===
=== Anzahl Orte mit Position  ===
  SELECT count(*) FROM GovItem WHERE itemClass ='o' AND latitude >0;
<source lang="sql">  SELECT count(*) FROM GovItem WHERE itemClass ='o' AND latitude >0;</source>


=== Anzahl Orte ohne Position  ===
=== Anzahl Orte ohne Position  ===
  SELECT count( distinct textualId)  
<source lang="sql">  SELECT count( distinct textualId)  
   FROM GovItem i , Property p, Type t   
   FROM GovItem i , Property p, Type t   
   WHERE (latitude =0 or latitude is null)  
   WHERE (latitude =0 or latitude is null)  
     and itemClass='o' AND gov_object=i.id  
     and itemClass='o' AND gov_object=i.id  
     AND propertyClass='t' and typeObject=t.id  
     AND propertyClass='t' and typeObject=t.id  
     and t.locatedIn=1 ;
     and t.locatedIn=1 ;</source>


* Anzahl Orte ohne Elternobjekt
* Anzahl Orte ohne Elternobjekt

Version vom 27. März 2009, 09:45 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.

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;

2009-01-30 keine Einträge

Objekte ohne Typ

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;

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

Kirchen ohne Standort

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;

2009-01-30 15.402 Einträge

Eingeschränkt auf eine Landeskirche oder einen Kirchenkreis (hier 172369=Oppeln):

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;

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)
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;

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
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
  • 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.

SELECT DISTINCT textualId
  FROM GovItem p, Relation r 
  WHERE p.deleted =1 AND parent =p.id;

2009-01-30 Nuvola apps important.svg 62 Einträge

auch nicht im Relationenindex:

SELECT DISTINCT textualId
  FROM GovItem, relation_index
  WHERE deleted = 1 AND parent=GovItem.id;

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 aktuelle Gemeinde im GOV eine externe Kennung opengeodb:... haben.

SELECT textualId FROM Property t, relation_index, GovItem 
  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 
    AND (t.time_end IS NULL OR t.time_end > 30000000)                        # aktuelle Gemeinde
    AND relation_index.parent=149273 AND relation_index.child=GovItem.id;    # in Deutschland

2009-01-30 Nuvola apps important.svg 989 Einträge

Gemeinden ohne übergeordnetes Objekt

Für Gemeinden lassen sich einfach Zugehörigkeiten feststellen. Diese Gemeinden haben überhaupt keine Zugehörigkeit:

SELECT textualId FROM Property, GovItem 
  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;

2009-01-30 Nuvola apps important.svg 33 Einträge

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.

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;

2009-01-30 Nuvola apps important.svg 7987 Einträge

Eingeschränkt auf Kreis/Land etc:

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';

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

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;

2009-01-30 Nuvola apps important.svg 3015 Einträge

Verbindung A-B

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;

Hier sind viele "falsche" Treffer enthalten, wenn das Pfarrdorf noch nicht der Kirchengemeinde zugeordnet ist. Reparieren kann man aber in jedem Fall etwas. 2009-01-30 Nuvola apps important.svg 3769 Einträge

Verbindung A-C

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;

Hier sind viele "falsche" Treffer enthalten, wenn das Pfarrdorf noch nicht der Kirchengemeinde zugeordnet ist. Reparieren kann man aber in jedem Fall etwas. 2009-01-30 Nuvola apps important.svg 4520 Einträge

Ersatzkennungen für existierende Objekte

Sie entstehen, wenn man das Verschmelzen von zwei Objekten zurückgängig macht.

SELECT * FROM updated_ids, GovItem WHERE updated_ids.old_id=textualId AND deleted=0 ;

2009-01-30 Symbol OK.svg 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