QuerySparql: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 18: Zeile 18:


=== Beispiele ===
=== Beispiele ===
  querySparql('https://query.wikidata.org/sparql', 'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX wd: <http://www.wikidata.org/entity/> PREFIX bd: <http://www.bigdata.com/rdf#> SELECT DISTINCT ?cityLabel ?provLabel ?prov ?city WHERE {{?city wdt:P31 wd:Q515.} UNION {?city wdt:P31 wd:Q839954.} ?city wdt:P131 ?prov. ?prov wdt:P31 wd:Q182547. ?prov rdfs:label ?provL. ?city rdfs:label ?cityL. FILTER (langMatches( lang(?provL), "de" ) ) FILTER (langMatches( lang(?cityL), "de" ) ) SERVICE wikibase:label { bd:serviceParam wikibase:language "de". }}')
==== Eine einfache Anfrage an Wikidata ====
  querySparql(
  '<nowiki>https://query.wikidata.org/sparql</nowiki>',
  'PREFIX rdfs: &lt;<nowiki>http://www.w3.org/2000/01/rdf-schema#</nowiki>&gt;
  PREFIX wdt: &lt;<nowiki>http://www.wikidata.org/prop/direct/</nowiki>&gt;
  PREFIX wikibase: &lt;<nowiki>http://wikiba.se/ontology#</nowiki>&gt;
  PREFIX wd: &lt;<nowiki>http://www.wikidata.org/entity/</nowiki>&gt;
  PREFIX bd: &lt;<nowiki>http://www.bigdata.com/rdf#</nowiki>&gt;
  SELECT DISTINCT ?cityLabel ?provLabel ?prov ?city
  WHERE {{?city wdt:P31 wd:Q515.} UNION {?city wdt:P31 wd:Q839954.} ?city wdt:P131 ?prov. ?prov wdt:P31 wd:Q182547. ?prov rdfs:label ?provL. ?city rdfs:label ?cityL.
  FILTER (langMatches( lang(?provL), &quot;de&quot; ) )
  FILTER (langMatches( lang(?cityL), &quot;de&quot; ) )
  SERVICE wikibase:label { bd:serviceParam wikibase:language &quot;de&quot;. }}'
)


====JUnit Tests====
==== Eine Abfrage an Sophox (OSM-SPARQL-Endpoint), die zwei vorher bestimmte Variablen berücksichtigt ====
querySparql(
  '<nowiki>https://sophox.org/sparql?output=xml</nowiki>',
  concat(
  'PREFIX osmm: &lt;<nowiki>https://www.openstreetmap.org/meta/</nowiki>&gt;
    PREFIX osmt: &lt;<nowiki>https://wiki.openstreetmap.org/wiki/Key:</nowiki>&gt;
    PREFIX wikibase: &lt;<nowiki>http://wikiba.se/ontology#</nowiki>&gt;
    PREFIX geo: &lt;<nowiki>http://www.opengis.net/ont/geosparql#</nowiki>&gt;
    PREFIX bd: &lt;<nowiki>http://www.bigdata.com/rdf#</nowiki>&gt;
    SELECT DISTINCT ?name ?street ?number ?city
    WHERE {
    VALUES ?amenity { &quot;kindergarten&quot; &quot;school&quot; &quot;social_facility&quot; &quot;place_of_worship&quot; &quot;hospital&quot; &quot;fire_station&quot; }
    ?osmid osmt:amenity ?amenity .
    ?osmid osmt:name ?name .
    ?osmid osmt:addr:street ?street .
    ?osmid osmt:addr:housenumber ?number .
    ?osmid osmt:addr:city ?city .
    SERVICE wikibase:around {
      ?osmid osmm:loc ?loc .
      bd:serviceParam wikibase:center &quot;Point(', [var=lat], ' ', [var=lon], ')&quot;^^geo:wktLiteral .
      bd:serviceParam wikibase:radius &quot;0.8&quot; .
    }
    }'
  )
)
 
===JUnit Tests===
<span class="mw-customtoggle-myDivision">[Anzeigen]</span>
<span class="mw-customtoggle-myDivision">[Anzeigen]</span>
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed" id="mw-customcollapsible-myDivision">
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed" id="mw-customcollapsible-myDivision">

Version vom 15. November 2019, 16:14 Uhr

Zugehörige Evaluatoren

  • MathEvaluator

Beschreibung

Die Funktion querySparql führt eine SPARQL-Anfrage gegen einen gegebenen Service Endpoint durch. Die Funktion erwartet zwei Strings und gibt je nach Ergebnis der Anfrage einen String oder eine Liste zurück.

Syntax

querySparql(Zeichenkette endpoint, Zeichenkette query)

Parameter

  • endpoint - Zeichenkette für den zu verwendenden Service Endpoint. Dieser muss mit "http://" oder "https://" angesprochen werden. Beispiel: "https://query.wikidata.org/sparql"
  • query - Zeichenkette für die Query. Diese muss in gültiger SPARQL-Syntax vorliegen. XML-Entities müssen escaped werden!

Return Value

  • Enthält die SELECT-Klausel der Abfrage genau einen Key und die Abfrage ergibt nur einen Treffer, gibt die Methode eine Zeichenkette zurück.
  • Enthält die SELECT-Klausel der Abfrage mehrere Keys und die Abfrage ergibt nur einen Treffer, gibt die Methode eine Liste von Zeichenketten zurück, in der jeder Eintrag für einen des Keys steht.
  • Enthält die SELECT-Klausel der Abfrage genau einen Key und die Abfrage ergibt mehrere Treffer, gibt die Methode eine Liste von Zeichenketten zurück, in der jeder Eintrag für einen der Treffer steht.
  • Enthält die SELECT-Klausel der Abfrage mehrere Keys und die Abfrage ergibt mehrere Treffer, gibt die Methode eine Liste von Listen von Zeichenketten zurück. Jeder Eintrag der äußeren Liste steht dann für einen Treffer und jeder Eintrag der inneren Liste für einen der Keys.

Beispiele

Eine einfache Anfrage an Wikidata

querySparql(
 'https://query.wikidata.org/sparql',
 'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  PREFIX wdt: <http://www.wikidata.org/prop/direct/>
  PREFIX wikibase: <http://wikiba.se/ontology#>
  PREFIX wd: <http://www.wikidata.org/entity/>
  PREFIX bd: <http://www.bigdata.com/rdf#>
  SELECT DISTINCT ?cityLabel ?provLabel ?prov ?city
  WHERE {{?city wdt:P31 wd:Q515.} UNION {?city wdt:P31 wd:Q839954.} ?city wdt:P131 ?prov. ?prov wdt:P31 wd:Q182547. ?prov rdfs:label ?provL. ?city rdfs:label ?cityL.
  FILTER (langMatches( lang(?provL), "de" ) )
  FILTER (langMatches( lang(?cityL), "de" ) )
  SERVICE wikibase:label { bd:serviceParam wikibase:language "de". }}'
)

Eine Abfrage an Sophox (OSM-SPARQL-Endpoint), die zwei vorher bestimmte Variablen berücksichtigt

querySparql(
 'https://sophox.org/sparql?output=xml',
 concat(
  'PREFIX osmm: <https://www.openstreetmap.org/meta/>
   PREFIX osmt: <https://wiki.openstreetmap.org/wiki/Key:>
   PREFIX wikibase: <http://wikiba.se/ontology#>
   PREFIX geo: <http://www.opengis.net/ont/geosparql#>
   PREFIX bd: <http://www.bigdata.com/rdf#>
   SELECT DISTINCT ?name ?street ?number ?city
   WHERE {
    VALUES ?amenity { "kindergarten" "school" "social_facility" "place_of_worship" "hospital" "fire_station" }
    ?osmid osmt:amenity ?amenity .
    ?osmid osmt:name ?name .
    ?osmid osmt:addr:street ?street .
    ?osmid osmt:addr:housenumber ?number .
    ?osmid osmt:addr:city ?city .
    SERVICE wikibase:around { 
     ?osmid osmm:loc ?loc . 
     bd:serviceParam wikibase:center "Point(', [var=lat], ' ', [var=lon], ')"^^geo:wktLiteral . 
     bd:serviceParam wikibase:radius "0.8" . 
    } 
   }'
 )
)

JUnit Tests

[Anzeigen]

	@Test
	public void testQuerySparqlTupleList() throws OpenMathException, EvaluatorException {
		OMOBJ omobj = ExpressionParser.parse("querySparql('https://query.wikidata.org/sparql', 'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX wd: <http://www.wikidata.org/entity/> PREFIX bd: <http://www.bigdata.com/rdf#> SELECT DISTINCT ?cityLabel ?prov ?city WHERE {{?city wdt:P31 wd:Q515.} UNION {?city wdt:P31 wd:Q839954.} ?city wdt:P131 ?prov. ?prov wdt:P31 wd:Q182547. ?prov rdfs:label ?provL. ?city rdfs:label ?cityL. FILTER (langMatches( lang(?provL), \"de\" ) ) FILTER (langMatches( lang(?cityL), \"de\" ) ) SERVICE wikibase:label { bd:serviceParam wikibase:language \"de\". }}')", null, null);
		Object result = OMToResultVisitor.getInstance().visit(omobj);
		assertEquals(true, OMTypeChecker.isOMAWithSymbol(result,OMSymbol.LIST1_LIST));
		OMA resultList = (OMA)result;
		for (Object o : new ArrayList<>(resultList.getOmel().subList(1, resultList.getOmel().size()))) {
			assertEquals(true, OMTypeChecker.isOMAWithSymbol(o, OMSymbol.LIST1_LIST));
		}
	}
	
	@Test
	public void testQuerySparqlSingleTuple() throws OpenMathException, EvaluatorException {
		OMOBJ omobj = ExpressionParser.parse("querySparql('https://query.wikidata.org/sparql', 'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX wd: <http://www.wikidata.org/entity/> PREFIX bd: <http://www.bigdata.com/rdf#> SELECT DISTINCT ?cityLabel ?prov ?city WHERE {{?city wdt:P31 wd:Q515.} UNION {?city wdt:P31 wd:Q839954.} ?city wdt:P131 ?prov. ?prov wdt:P31 wd:Q182547. ?prov rdfs:label ?provL. ?city rdfs:label ?cityL. FILTER (langMatches( lang(?provL), \"de\" ) ) FILTER (langMatches( lang(?cityL), \"de\" ) ) SERVICE wikibase:label { bd:serviceParam wikibase:language \"de\". }} LIMIT 1')", null, null);
		Object result = OMToResultVisitor.getInstance().visit(omobj);
		assertEquals(true, OMTypeChecker.isOMAWithSymbol(result, OMSymbol.LIST1_LIST));
	}
	
	@Test
	public void testQuerySparqlStringList() throws OpenMathException, EvaluatorException {
		OMOBJ omobj = ExpressionParser.parse("querySparql('https://query.wikidata.org/sparql', 'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX wd: <http://www.wikidata.org/entity/> PREFIX bd: <http://www.bigdata.com/rdf#> SELECT ?cityLabel WHERE {{?city wdt:P31 wd:Q515.} UNION {?city wdt:P31 wd:Q839954.} ?city wdt:P131 ?prov. ?prov wdt:P31 wd:Q182547. ?prov rdfs:label ?provL. ?city rdfs:label ?cityL. FILTER (langMatches( lang(?provL), \"de\" ) ) FILTER (langMatches( lang(?cityL), \"de\" ) ) SERVICE wikibase:label { bd:serviceParam wikibase:language \"de\". }}')", null, null);
		Object result = OMToResultVisitor.getInstance().visit(omobj);
		assertEquals(true, OMTypeChecker.isOMAWithSymbol(result, OMSymbol.LIST1_LIST));
		OMA resultList = (OMA)result;
		for (Object o : new ArrayList<>(resultList.getOmel().subList(1, resultList.getOmel().size()))) {
			assertEquals(true, OMTypeChecker.isOMSTR(o));
		}
	}
	
	@Test
	public void testQuerySparqlSingleString() throws OpenMathException, EvaluatorException {
		OMOBJ omobj = ExpressionParser.parse("querySparql('https://query.wikidata.org/sparql', 'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX wd: <http://www.wikidata.org/entity/> PREFIX bd: <http://www.bigdata.com/rdf#> SELECT ?cityLabel WHERE {{?city wdt:P31 wd:Q515.} UNION {?city wdt:P31 wd:Q839954.} ?city wdt:P131 ?prov. ?prov wdt:P31 wd:Q182547. ?prov rdfs:label ?provL. ?city rdfs:label ?cityL. FILTER (langMatches( lang(?provL), \"de\" ) ) FILTER (langMatches( lang(?cityL), \"de\" ) ) SERVICE wikibase:label { bd:serviceParam wikibase:language \"de\". }} LIMIT 1')", null, null);
		Object result = OMToResultVisitor.getInstance().visit(omobj);
		assertEquals(true, OMTypeChecker.isOMSTR(result));
	}
	
	@Test(expected = FunctionInvalidNumberOfArgumentsException.class)
	public void testDeterminantWithZeroParam() throws OpenMathException, EvaluatorException {
		OMOBJ omobj = ExpressionParser.parse("querySparql()", null, null);
		OMToResultVisitor.getInstance().visit(omobj);
		fail();
	}

	@Test(expected = FunctionInvalidArgumentTypeException.class)
	public void testDeterminantWithWrongArguments() throws OpenMathException, EvaluatorException {
		OMOBJ omobj = ExpressionParser.parse("querySparql(1,2)", null, null);
		OMToResultVisitor.getInstance().visit(omobj);
		fail();
	}

Hinweise