Sparql 在fluent filter中使用STRSTARTS
我很难理解如何使用fluent query在dotnetrdf中表示以下查询。 SPARQL查询:Sparql 在fluent filter中使用STRSTARTS,sparql,semantic-web,dotnetrdf,Sparql,Semantic Web,Dotnetrdf,我很难理解如何使用fluent query在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), "h
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#"))
}
谢谢,不幸的是,
STRSTARTS
函数还没有映射到fluent界面,但是有一种方法可以解决这个问题。您可以在Filter操作中构建一个常规的ISparqlExpression
,并将其包装到一个新的布尔表达式中:
var queryBuilder=
查询生成器
.Select(新字符串[]{objVar})
.在哪里(
(triplePatternBuilder)=>
{
三元组生成器
.主题(要素)
.PredicateUri(“rdf:类型”)
.对象(objVar);
})
.Filter(f=>
新布尔表达式(
新StrStartsFunction(
新StrFunction(新变量项(objVar)),
f、 常数(“http://www.w3.org/2002/07/owl#1.表达方式
))
);
注意:您可能需要将VDS.RDF.Query.Builder.Expressions
和VDS.RDF.Nodes
添加到您的导入中,以便对上述内容进行编译。起作用。我只需要对函数求反。所以,我做了!新布尔表达式
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;