【问题标题】:Use STRSTARTS in fluent filter在流利过滤器中使用 STRSTARTS
【发布时间】:2021-04-09 17:04:36
【问题描述】:

我很难弄清楚如何使用流利的查询在 dotnetrdf 中表示以下查询。 SPARQL 查询:

PREFIX a: <http://www.example.com/ex1#>
PREFIX rdf: < http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?object
WHERE {
a:Branch1 rdf:type ?object
FILTER(!STRSTARTS(STR(?object), "http://www.w3.org/2002/07/owl#"))
}

这是我目前所取得的成果,我想不出过滤谓词。

var prefixes = new NamespaceMapper(true);
prefixes.AddNamespace("rdf", new Uri("http://www.w3.org/1999/02/22-rdf-syntax-ns#"));
prefixes.AddNamespace("a", new Uri("http://www.example.com/ex1#"));

var objVar = "object";
var queryBuilder =
    QueryBuilder
    .Select(new string[] { objVar })
    .Where(
        (triplePatternBuilder) =>
        {
            triplePatternBuilder
                .Subject(element)
                .PredicateUri("rdf:type")
                .Object(objVar);
        })
    .Filter(f => 
                // What should be added here?
            );

queryBuilder.Prefixes = prefixes;

谢谢,

【问题讨论】:

    标签: sparql semantic-web dotnetrdf


    【解决方案1】:

    不幸的是,STRSTARTS 函数尚未映射到流利的界面,但有一种方法可以解决这个问题。您可以在过滤器操作中构建一个常规的ISparqlExpression 并将其包装在一个新的BooleanExpression 中:

    var queryBuilder =
        QueryBuilder
        .Select(new string[] { objVar })
        .Where(
            (triplePatternBuilder) =>
            {
               triplePatternBuilder
                  .Subject(element)
                  .PredicateUri("rdf:type")
                  .Object(objVar);
            })
            .Filter(f =>
               new BooleanExpression(
                  new StrStartsFunction(
                     new StrFunction(new VariableTerm(objVar)),
                        f.Constant("http://www.w3.org/2002/07/owl#").Expression
               ))
            );
    

    注意:您可能需要将 VDS.RDF.Query.Builder.ExpressionsVDS.RDF.Nodes 添加到您的导入中才能编译上述内容。

    【讨论】:

    • 作为魅力。我只需要否定该功能。所以,我做了!new BooleanExpression
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多