我有一个 .trig 文件上传到 Apache Jena Fuseki 本地服务器。.trig 文件中的 3 个命名图表以不同的航班为中心 - 每个图表都有交通状况的快照和时间戳的航班数据。
数据
数据格式如下(我复制了相关部分):
s1:ID_002
平原:飞行;
平原:flightIdent s1:ID_004 。
s1:ID_004
一个普通的:FlightIdent ;
plain:aircraftIdent [ rdf:value "EXAMPLE" ] ;
平原:轨迹 s1:ID_008 。
s1:ID_008
一个普通的:EfplTrajectoryRoutePair ;
平原:轨迹 s1:ID_021 。
s1:ID_021
平原:轨迹;
平原:轨迹点 s1:P1、s1:P2、s1:P3、s1:P4、s1:P5、s1:P6、s1:P7、s1:P8、s1:P9、s1:P10。
s1:P1
平原:EfplTrajectoryPoint ;
普通:trajectoryPointType [ rdf:value 0 ] ;
平原:点 s1:P11 。
s1:P11
平原:EfplPoint4D ;
普通:pos [ rdf:value 46.123456789, 7.123456789] ;
平原:时间 [rdf:value "2021-01-01T00:00:01.000Z"^^xsd:dateTime] 。
问题
我正在尝试查询图表以获取飞机位置。由于我需要的信息在一个空白节点中,我一直使用“rdf:value”作为谓词
SELECT ?aircraft ?position1
FROM < graph >
WHERE {
?aircraft plain:pos ?position
{?position rdf:value ?position1;
}
这将返回此格式的数据 |aircraft |position1 | |---------|------------| |s1:P11 |46.123456789| |s1:P11 |7.123456789 | |s1:P21 |46.123456789| |s1:P21 |7.123456789 | |s1:P31 |46.123456789| |s1:P31 |7.123456789 |
所以每架飞机都有它的纬度,经度值在一个单独的行中。我尝试为纬度和经度创建一个单独的变量,但是我每架飞机有 4 个条目,并带有排列
纬度, 纬度
纬度, 经度
经度, 纬度
经度, 经度
我想要(纬度,经度)组合,因为这是正确的顺序,但我无法隔离那个特定的输出行。
部分工作的查询:
SELECT ?aircraft ?position_lat ?position_lon
FROM < graph >
WHERE { ?aircraft plain:pos ?position;
{?position rdf:value ?position_lat;
rdf:value ?position_lon}
FILTER (?position_lat != ?position_lon)
}
给我变量不同的行:
纬度,经度
,经度,纬度
我不能在 FILTER 部分使用“>”,因为这可能并非在所有用例中都是正确的。我可以做些什么来隔离(经度,纬度)行或在单个变量中获取数据(最好用逗号分隔)?这些值稍后将在 Java 代码中使用,因此我需要将它们分成 2 个变量或将它们连接到单个变量(用于字符串解析)。