User:Stefan Kühn/SPARQL

From Wikidata
Jump to navigation Jump to search

Doku[edit]

Code-Snipets[edit]

Label[edit]

  ?item rdfs:label ?name 
  FILTER(REGEX(STR(?name), "Flu"))            # Filter für Name
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en,de". }


  OPTIONAL {
      ?item rdfs:label ?label_de.                                  # Label abspeichern
      filter (lang(?label_de) = "de").                             # Label nur auf Deutsch filtern
  }

Commons-Link (Sitelink)[edit]

  # Commons-Link  (über "Andere Websites")
  OPTIONAL {?commons 	schema:about ?item ;
           schema:isPartOf <https://commons.wikimedia.org/> .
  }

Alle Sitelinks[edit]

PREFIX schema: <http://schema.org/>
SELECT ?item ?itemLabel ?sitelink WHERE {
  BIND(wd:Q1558099 AS ?item)
  ?sitelink schema:about ?item.
  #FILTER(REGEX(STR(?sitelink), ".wikipedia.org/wiki/"))
}

Alternativnamen[edit]

SELECT ?item ?itemLabel ?itemDescription
  WHERE { 
  ?item skos:altLabel 'Rheims'@de .
    SERVICE wikibase:label { bd:serviceParam wikibase:language "de,[AUTO_LANGUAGE]". }
}

Beschreibung/Description[edit]

     # filter description  
     ?item schema:description ?desc_de.                 # Beschreibung in Variable speichern
     filter (lang(?desc_de) = "de").                    # nur Sprache "de" abrufen
     FILTER(REGEX(STR(?desc_de), "Dresden"))            # Regex-Filter für deutsche Beschreibung

     # no description
     filter not exists {?item schema:description ?desc . filter(lang(?desc)="de") }    # Beschreibung auf Deutsch ist leer 
 

IS NULL[edit]

  # Item has no image
  OPTIONAL { ?item wdt:P18 ?image. }
  FILTER(!BOUND(?commons)) 

VALUE OR and AND[edit]

  # Aussage mit verschieden Werten
  VALUES ?instance_of { wd:Q79007 wd:Q174782 wd:Q537127 } # Innerortstraße oder Platz oder Brücke
  ?item wdt:P31 ?instance_of
  
  # Statement mit verschiedenen Aussagen
  OPTIONAL {?stmt pq:P580|pq:P585 ?start} .

  # hat kein OSM-Eintrag (NOT AND NOT AND NOT)
  FILTER( !BOUND(?osm_way) && !BOUND(?osm_relation) && !BOUND(?osm_node) ) 
  
  # hat mindestens einen OSM-Eintag (OR OR)
  FILTER( BOUND(?osm_way) !! BOUND(?osm_relation) !! BOUND(?osm_node) ) 

Koordinate zerlegen[edit]

  OPTIONAL {?item p:P625 ?coordinate.
  ?coordinate psv:P625 ?coordinate_node.
  ?coordinate_node wikibase:geoLatitude ?lat.
  ?coordinate_node wikibase:geoLongitude ?lon. }

Like / not like[edit]

-- like
FILTER (CONTAINS(?name, 'Mustermann')) .
-- not like
FILTER (!CONTAINS(?name, 'Mustermann')) .

Funktionen[edit]

Textfunktionen[edit]

  FILTER(REGEX(STR(?name), "Suchtext")) .          # mit regulären Ausdruck filtern
  FILTER(REGEX(STR(?hasc), "ez","i"))              # mit regulären Ausdruck filtern (case insensitve)
  FILTER(CONTAINS(?name, 'Suchtext')) .            # enthält Suchtext
  FILTER(STRSTARTS(?name, 'Suchtext')) .           # beginnt mit Suchtext
  xsd:integer(STRAFTER(str(?item), 'Q'))           # QID wird in Zahl umgewandelt 
 (URI(CONCAT("https://www.openstreetmap.org/relation/",?osm)) as ?osm_link)  # Verkettung

Datumsfuntkion[edit]

(year(?startdatum) AS ?y1)

Zahlfunktion[edit]

#ORDER BY xsd:integer(STRAFTER(str(?item), 'Q'))    # QID wird in Zahl umgewandelt 

Gruppenfunktion[edit]

# Gruppenfunktion SAMPLE
#defaultView:Table
SELECT ?item ?itemLabel ?itemDescription ?Steuernummer ?rechtsformLabel ?adresse ?street ?streetLabel ?coordinate (SAMPLE(?image) AS ?img)
WHERE {
  ?item wdt:P159 wd:Q1731.                    # hat Hauptverwaltung in Dresden
  OPTIONAL { ?item wdt:P18 ?image. }          # Bild
  ?item rdfs:label ?name 
  FILTER(REGEX(STR(?name), "Flu"))            # Filter für Name
  SERVICE wikibase:label { bd:serviceParam wikibase:language "de,en,[AUTO_LANGUAGE]". }
} GROUP BY ?item ?itemLabel ?itemDescription ?Steuernummer ?rechtsformLabel ?adresse ?street ?streetLabel ?coordinate
Try it!
(count(*) as ?ct)

Komplexeres Element Nr. 1[edit]

Overview
SELECT ?hauptverwaltung ?any ?value WHERE {
  BIND(wd:Q1420476 AS ?item) .
  ?item wdt:P159 wd:Q1731.  
  ?item p:P159 ?hauptverwaltung.
  ?hauptverwaltung ?any ?value .
}
Try it!

Komplexeres Element Nr. 2[edit]

#--------------------------------------------------------
# Koordinate in Bestandteil zerlegen
#--------------------------------------------------------
SELECT ?node ?any ?value WHERE {
  BIND(wdv:63c4fd01b2d7c4f1ec53e904cf87a8ce AS ?node) .
  ?node ?any ?value .
}
Try it!

URL verlinken in Ausgabe[edit]

# URL verlinken in Ausgabe
SELECT ?item ?itemLabel ?value ?country ?capitelLabel ?coordinate 
(URI(CONCAT("https://www.openstreetmap.org/relation/",?osm)) as ?osm_link)
WHERE
{
	?item wdt:P8119 ?value .
	?item wdt:P17 ?country . 
    
    OPTIONAL {?item wdt:P402 ?osm .}
    ?item wdt:P36 ?capitel . 
    OPTIONAL {?capitel wdt:P625 ?coordinate .}
	SERVICE wikibase:label { bd:serviceParam wikibase:language "de,en"  }    
}
Try it!

Property Qualifier[edit]

# Abfragen von Property Qualifier (Start- und Endzeit)
SELECT ?item ?itemLabel 
#?itemDescription 
?hasc ?nuts ?startime ?endtime 
#?capital 
WHERE 
{
  ?item wdt:P17 wd:Q183.
  ?item wdt:P131 wd:Q1202.
  OPTIONAL{?item wdt:P8119 ?hasc. }
  ?item wdt:P605  ?nuts.
  OPTIONAL{?item p:P605 [  pq:P580 ?starttime ]  . }    # pq Property Qualifier
  OPTIONAL{?item p:P605 [  pq:P582 ?endtime ]  . }
  #?item wdt:P36 ?capital.  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
order by ?endtime ?itemLabel
Try it!


Linie zeichnen[edit]

#
#defaultView:Map
SELECT ?line ("9B0058" as ?rgb) WHERE {

  BIND(CONCAT('LINESTRING (', 
              STR("13.3"), ' ', STR("50.4"), ',', 
              STR("13.8"), ' ', STR("51.3"), ')') AS ?str) .
  BIND(STRDT(?str, geo:wktLiteral) AS ?line) 
  }
Try it!

zufällige Datensätze mit mehr als 20 Sprachartikeln[edit]

# zufällige Datensätze mit mehr als 20 Sprachartikeln (sitelinks) 
SELECT ?item ?itemLabel ?sitelinks ?random
WHERE
{
  #Minimum sitelinks (Sprachen)
  ?item wikibase:sitelinks ?sitelinks . hint:Prior hint:rangeSafe true .
  FILTER (?sitelinks > 20 )

  #Random stuff
  BIND(SHA512(CONCAT(STR(RAND()), STR(?item))) AS ?random) .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE], en" . }
}
LIMIT 100
Try it!

Von Datensatz, die letzte Revision ermitteln[edit]

#title: Get revision ID for last revision of some items
SELECT ?item ?revid
WHERE
{
  VALUES ?item_strings { "Q2" "Q5" }
  SERVICE wikibase:mwapi
  {
    bd:serviceParam wikibase:endpoint "www.wikidata.org" .
    bd:serviceParam wikibase:api "Generator" .
    bd:serviceParam mwapi:generator "revisions" .
    bd:serviceParam mwapi:prop "revisions" . 
    bd:serviceParam mwapi:titles ?item_strings .
    ?item wikibase:apiOutputItem mwapi:title .
    ?revid wikibase:apiOutput "revisions/rev/@revid" .
  }
}
Get revision ID for last revision of some items

Suche nach Label[edit]

SELECT ?item ?itemLabel ?instance_ofLabel
WHERE
{
  ?item rdfs:label "Plauen"@de .
  ?item wdt:P31 ?instance_of .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],de,en". }
}
Try it!