簡體   English   中英

反轉SPARQL中的字符串

[英]Reversing a string in SPARQL

是否可以在SPARQL中反轉字符串,例如,“ abc”變為“ cba”。 可替代地,可以基於相反的字符串排序。

我對在Wikidata Query Service上可以使用的解決方案特別感興趣。

好吧,您問是否有可能 ,而不是是否可行 ...

SELECT ?s (group_concat(?letter; separator='') AS ?r) {
  BIND ("abcdefghijkl" AS ?s)
  VALUES ?d1 { 0 1 2 3 4 5 6 7 8 9 }
  VALUES ?d2 { 0 1 2 3 4 5 6 7 8 9 }
  VALUES ?d3 { 0 1 2 3 4 5 6 7 8 9 }
  BIND (100 * ?d3 + 10 * ?d2 + ?d1 + 1 AS ?i)
  BIND (SUBSTR(?s, ?i, 1) AS ?letter)
}
GROUP BY ?s

實時鏈接

該方法與Finn的響應中的方法類似,但適用於長度不超過1000個字符的字符串。 這將用作較大查詢中的子查詢。 諸如group_concat聚合不保證特定順序,因此此查詢依賴於Blazegraph使用的與實現相關的順序,並且可能使字符串在其他實現上混亂。

如果用例按相反的順序按字符串的最后一個字符排序,則可以對其進行調整,以確保包括字符串的最后n個字符。

SPARQL 1.1中沒有“反向字符串”功能。

沒有提供要查找的ORDER BY修飾符

許多(如果不是大多數的話)編程和腳本語言確實具有“反向字符串”和“排序”方法,因此我建議調查您(未命名)的開發環境是否具有這種方法。

這種病理實現顯然在Blazegraph / Wikidata查詢服務中有效(最多達到特定的字符串長度,此處為12):

SELECT ?s ?r {
  BIND("abcdefghijkl" AS ?s)
  BIND(CONCAT(SUBSTR(?s, 12, 1), SUBSTR(?s, 11, 1), SUBSTR(?s, 10, 1),
              SUBSTR(?s, 9, 1), SUBSTR(?s, 8, 1), SUBSTR(?s, 7, 1),
              SUBSTR(?s, 6, 1), SUBSTR(?s, 5, 1), SUBSTR(?s, 4, 1),
              SUBSTR(?s, 3, 1), SUBSTR(?s, 2, 1), SUBSTR(?s, 1, 1)) AS ?r)
}

這是一個針對Virtuoso的查詢,通過子查詢提供了所需的解決方案。

SELECT ?str (GROUP_CONCAT(?letter; separator="") AS ?reverse)
WHERE {
          {
              SELECT ?str ?charAt 
              WHERE {
                      VALUES ?str { "abcdefghijk" }
                      VALUES ?d1 { 0 1 2 3 4 5 6 7 8 9 10 }
                      BIND(STRLEN(?str) - ?d1 AS ?charAt)
                      FILTER(?charAt > 0)
                    }
           }

          BIND(SUBSTR(?str,?charAt,1) AS ?letter) 
     }

實時查詢結果頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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