Every query needs at least one FROM (or FROM NAMED);
the endpoint fetches those documents and queries over them. FROM/
FROM NAMED is restricted to the Linked AdV wrapper's two data
routes — /oid, /wfs —, this mediator's routed
/feature, and the wrapper's vocabulary documents
(gid/7.1, ok/7.1/…, vocab/…); any
other target is rejected with 400. The mediator and the wrapper share one
public prefix, so relative IRIs resolve against that common root and the
same query works on any deployment. FROM clauses are never rewritten — you
name the exact source:
FROM <wfs?s={service}&typenames=adv:AX_Wald&bbox=W,S,E,N>
— the pinned form: exactly one source, chosen by you
(s=dlm50:{region} for one dump region), no routing. As
FROM NAMED with GRAPH ?g you get to see which
source answered which object (see the „Gepinnt“ examples).
The same shape without bbox= is the attribute query
within that one service
(FROM <wfs?s={service}&typenames=adv:AX_Wasserlauf&eq=gewaesserkennzahl:276…>,
also like=). Nothing rewrites a query for you.FROM <feature?typenames=adv:AX_Wald&bbox=W,S,E,N>
— the same shape on the mediator's /feature is the
routed form:
the mediator asks every source whose coverage meets the bbox (default:
the Länder's Basis-DLM WFS plus the mounted DLM50 dumps;
tier=dlm250 pins a model level) and composes one graph.
Which sources answered is in the graph as dct:hasPart of
the document, each part exactly a pinned /wfs?s=… URI;
what is NOT in it is the source per object — for that use the
pinned FROM NAMED form with GRAPH ?g. Every
example below comes in both variants („gepinnt“ /
„geroutet“); see routing.md in the mediator's repository.FROM <oid/DEBYBDLMNP0006hi> — one object's
document; FROM <gid/7.1> or
FROM <ok/7.1/ax-vegetationsmerkmal-wald> add the
schema or a code list to the query's graphSeveral FROM clauses merge into one graph (see the
sfCrosses example). A # inside a FROM IRI must be
written %23.
GET sparql?query=…, a form
POST with query=, or POST with
Content-Type: application/sparql-query and the query as the body
(SPARQL 1.1 Protocol §2.1). Any other POST body is 415.
default-graph-uri/named-graph-uri may name the dataset
instead of FROM (§2.1.4), under the same route rules.SELECT/ASK as SPARQL results
JSON (default; .json), XML, TSV (.tsv) or CSV
(.csv); CONSTRUCT/DESCRIBE as Turtle
(default; .ttl), RDF/XML (.rdf) or N-Triples
(.nt) — by suffix or Accept. An Accept
naming only a form the query type lacks (a SELECT as Turtle) is
406, never a guess.504 when exceeded); the graphs named in FROM are fetched
from the wrapper and kept in memory for an hour (mediator
shows the cache). Server-Timing on every answer splits load, parse and
execution.GET sparql with an RDF
Accept is the
service description.The endpoint registers the GeoSPARQL 1.1 function suite
(OGC 22-047r1).
Functions operate on geo:wktLiteral/geo:gmlLiteral
values. Every RDF document served here lifts its GML geometry into the
canonical form — bind it with
?s geo:hasGeometry/geo:asWKT ?g
(PREFIX geo: <http://www.opengis.net/ont/geosparql#>);
the raw GML stays untouched on locn:geometry as an
rdf:XMLLiteral, which the functions do NOT accept. Common
functions relevant to this dataset:
geof:metricArea(?g) — geodesic area in m²geof:metricLength(?g) — geodesic length in mgeof:metricDistance(?a, ?b) — geodesic distance in mgeof:centroid(?g) — returns a geo:wktLiteral POINTTopological relations (DE-9IM / Simple Features) return a boolean for a pair of geometries:
geof:sfEquals(?a, ?b) — topologically equalgeof:sfTouches(?a, ?b) — boundaries meet, interiors do notgeof:sfCrosses(?a, ?b) — interiors cross (e.g. a bridge line over a watercourse)geof:sfIntersects(?a, ?b) — not disjointgeof:sfContains(?a, ?b) — ?a contains ?bUse PREFIX geof: <http://www.opengis.net/def/function/geosparql/>.
A non-standard helper returns a geometry's topological dimension as an integer
(0 point, 1 curve, 2 surface):
fn:dimension(?g) — mirrors JTS getDimension();
test for curve/area with fn:dimension(?g) = 1 / = 2Use PREFIX fn: <https://wunderfacts.com/adv/vocab/fn#>.
These reproduce the ATKIS SK50 styling-rule predicates
(mdl:geo_crosses → geof:sfCrosses,
mdl:geo_isArea → fn:dimension(?g) = 2, etc.).
See the example dropdown above for working queries.