簡體   English   中英

SPARQL - 提取 URI 的最后一部分

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM