[英]Query to GraphDB's repository with custom functions SPARQL using Jena
[英]optimizing a SPARQL query when using a custom function in Jena
我使用 Jena 在 Owl Ontology 上有以下 SPARQL 查詢:
SELECT ?label ?distance
WHERE {
?wpt rdf:type inav:Waypoint .
?wpt inav:Label ?label .
?ac rdf:type inav:Aircraft .
?ac inav:Label "myAircraft" .
?wpt inav:hasExactGeometry ?geom .
?geom inav:asWKT ?wkt .
?ac inav:hasExactGeometry ?geom2 .
?geom2 inav:asWKT ?wkt2 .
BIND (geof:distance(?wkt, ?wkt2, <http://www.opengis.net/def/uom/OGC/1.0/nauticalMile>) as ?distance)
}
ORDER BY ASC(?distance )
LIMIT 1
這個想法是:
Aircraft
Waypoint
Waypoint
的 label ,它與“myAircraft” Aircraft
的距離這個查詢沒有任何問題。
現在我正在使用 Jena FunctionFactory
添加自定義詞匯表。 在我的情況下,我想在航路點的 position 處以米為單位實時檢索氣象的能見度(舉個例子)。 為了做到這一點,我創建了一個包含一個visibility
單詞的自定義詞匯表。 它只有一個參數,在我的例子中是Waypoint
的Label
。
然后我將查詢更改如下:
SELECT ?label ?distance ?visibility
WHERE {
?wpt rdf:type inav:Waypoint .
?wpt inav:Label ?label .
?ac rdf:type inav:Aircraft .
?ac inav:Label "myAircraft" .
?wpt inav:hasExactGeometry ?geom .
?geom inav:asWKT ?wkt .
?ac inav:hasExactGeometry ?geom2 .
?geom2 inav:asWKT ?wkt2 .
BIND (geof:distance(?wkt, ?wkt2, <http://www.opengis.net/def/uom/OGC/1.0/nauticalMile>) as ?distance)
BIND (my:visibility(?wpt) as ?visibility)
}
ORDER BY ASC(?distance )
LIMIT 1
它也可以毫無問題地工作,但我在我的調試器中指出,Java visibility
function 會為本體中的每個Waypoint
調用,而不僅僅是最近的一個。 如果我有很多航點,我將不得不為航點調用我的 Java Waypoint
,理想情況下我只想為其中一個,最接近的一個。
有沒有辦法加速這個查詢? (想法是,在現實生活中,我會為我的 Waypoint 調用一個氣象服務,但我不想為每個Waypoint
都這樣做,而只是我在查詢中找到的那個)。
根據 UninformedUser 的非常翔實的回答:
SELECT ?label ?distance ?visibility
{
{SELECT ?label ?distance
WHERE {
?wpt rdf:type inav:Waypoint .
?wpt inav:Label ?label .
?ac rdf:type inav:Aircraft .
?ac inav:Label "myAircraft" .
?wpt inav:hasExactGeometry ?geom .
?geom inav:asWKT ?wkt .
?ac inav:hasExactGeometry ?geom2 .
?geom2 inav:asWKT ?wkt2 .
BIND (geof:distance(?wkt, ?wkt2, <http://www.opengis.net/def/uom/OGC/1.0/nauticalMile>) as ?distance)
} ORDER BY ASC(?distance ) LIMIT 1
} BIND (my:visibility(?wpt) as ?visibility)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.