[英]SPARQL - Extract Last part of a URI
我有一列來自不同域的 URI。 例子,
http://comicmeta.org/cbo/category
http://purl.org/dc/terms/hasVersion
http://schema.org/contributor
等等。 我想提取最后一部分,即每個這樣的 URI 上最后一個斜杠“/”之后的字符串。
上述 URI 列表的預期結果:
category
hasVersion
contributor
如何編寫通用SPARQL 查詢以從任何給定的 URI 中提取最后一部分?
這是我到目前為止所嘗試的:
SELECT distinct ?s ?x WHERE {
?s ?p ?o .
BIND (STRBEFORE(STRAFTER(STR(?s),"/"), " ") as ?x) .
#To extract the part after the slash '/' and before the end of string indicated by a space ' '.
}
但是,這只返回空字符串“”。
我怎樣才能使這項工作? 有人可以幫我弄這個嗎?
使用REPLACE
是這樣的:
BIND (REPLACE(STR(?s), "^.*/([^/]*)$", "$1") as ?x)
這會將整個字符串替換為僅在最后一個/
字符之后找到的部分。 但是請注意,由於您的示例,並非所有詞匯都使用/
作為分隔符; 有些人還使用#
。 像http://www.w3.org/1999/02/22-rdf-syntax-ns#type
這樣的東西會變成22-rdf-syntax-ns#type
如果你不想這樣,你可以使用一些更復雜的東西:
BIND (REPLACE(STR(?s), "^.*?([_\\p{L}][-_\\p{L}\\p{N}]*)$", "$1") as ?x)
這會根據通常是有效的 XML 名稱從末尾選擇最長的部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.