【问题标题】:Matching double quotes in SPARQL query in Virtuoso在 Virtuoso 的 SPARQL 查询中匹配双引号
【发布时间】:2016-12-26 13:48:29
【问题描述】:

我需要获得一个匹配 Virtuoso 图中双引号的 SPARQL 查询。我使用这样的查询:

SELECT distinct ?o
FROM <http://graph>
WHERE
{
    ?s ?p ?o.
}

它会返回一个包含此类值的列:

http://some.prefix/Symbol
"abcd"

我只需要匹配第二个值 ("abcd")。我试图将这样的过滤器添加到WHERE 子句:

FILTER regex(str(?o), "\"")

但它没有返回任何结果。我还尝试了'"' 作为正则表达式的第二个参数,以及其他一些东西。有可能吗?

【问题讨论】:

    标签: regex sparql quotes virtuoso


    【解决方案1】:

    "abcd" 是四个字符的文字。它不包括"";这些是字符串分隔符,不构成字符串的一部分。

    FILTER isLiteral(?o)
    

    应该可以。

    【讨论】:

    • 谢谢,这正是我需要的!
    【解决方案2】:

    由于您的过滤器不起作用,"abcd" 中没有双引号。这是一个字符串文字。不确定它是什么类型;所以你可以使用--

    select ?type where { "abcd" a ?type }
    

    -- 获取它的类型。然后,您可以将该类型用作查询中的过滤器:

    SELECT distinct ?o
    FROM <http://graph>
    WHERE
    {
        ?s ?p ?o .
        ?o a <whatever type you received in the previous query> .
    }
    

    【讨论】:

    • rdf:type(或关键字a)记录的rdfs:Class和文字的数据类型是有区别的。 "?o a ..." 不返回数据类型。尝试 DATATYPE(?o) 但这不是必需的,因为 isLiteral 测试任何数据类型的文字。
    • 同意。 isLiteral() 是一种更好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多