我正在尝试从数据集中删除重复的资源,但是由于资源是空白节点,并且并非真正相同,因此遇到了问题。
有关数据:
<http://faculty.washington.edu/tgis/ld/brumfield/uwDataset/places#NaroFominskiiraionMoskovskaia>
a vra:AdministrativeArea ;
rdfs:label "Naro-Fominskii raion" ;
uwext:typeOfAdminArea "Raion" ;
schema:containedInPlace <http://faculty.washington.edu/tgis/ld/brumfield/uwDataset/places#MoskovskaiaoblastMoskovskaia> , <http://faculty.washington.edu/tgis/ld/brumfield/uwDataset/places#RussiaFederation> ;
ns1:sameAs <http://dbpedia.org/resource/Naro-Fominsky_District> ;
schema:geo
[ a schema:GeoCoord ;
schema:latitude "53.3793416" ;
schema:longitude "58.9708374"
],
[ a schema:GeoCoord ;
schema:latitude "53.3793416" ;
schema:longitude "58.9708374"
] .
我尝试过的:
delete {?q a schema:GeoCoord.
?q schema:latitude ?lat .
?q schema:longitude ?long . }
where
{
?s a schema:GeoCoord.
?s schema:latitude ?lat .
?s schema:longitude ?long .
?q a schema:GeoCoord.
?q schema:latitude ?lat .
?q schema:longitude ?long .
filter(?q != ?s)
}
但这会同时删除两个schema:GeoCoord资源。如何删除重复的资源?
这有一个窍门。使用
filter(str(?q) < str(?s))
而不是
filter(?q != ?s)
起作用的原因是,如果使用!=
进行比较,则会得到两个匹配项:在所有两个bnode彼此都不相等之后。但是,只有一个bnode ID小于另一个bnode ID-因此,您只会得到一个匹配项。