<?xml version="1.0" encoding="UTF-8"?>
<sem:triples xmlns:sem="http://marklogic.com/semantics">
<start-time xmlns="http://abc.com.au/meta#">2016-12-08T17:19:59.220366+11:00</start-time>
<stop-time xmlns="http://abc.com.au/meta#">2999-12-31T00:00:00+11:00</stop-time>
<sem:triple>
<sem:subject>http://abc.au/abc/abc/Model#abc</sem:subject>
<sem:predicate>http://abc.com.au/core/abc#minOccurs</sem:predicate>
<sem:object datatype="http://www.w3.org/2001/XMLSchema#string">0</sem:object>
</sem:triple>
</sem:triples>
MarkLogic提供了一个Java API来使用其URI加载语义图。 API向MarkLogic发送HTTP请求以检索图形。但是,目前请求参数仅包含图形URI,但没有其他内容。我们想通过一些范围约束来约束我们的图加载。我们在MarkLogic中使用embedded triples以及一些标识三元组版本的附加时间戳。当我们通过REST服务加载图形时,有没有办法让我们在HTTP请求中将时间戳指定为范围约束?我们只需要加载与时间戳约束匹配的图形部分。
我们想要将三元组加载为图形的原因是因为我们希望将它与Apache Jena一起使用。为了使用Jena执行SPARQL,我们首先需要将图形作为RDF模型加载到Jena的查询引擎中。
答案 0 :(得分:2)
您不想将默认图表加载到客户端,而是希望在setConstrainingQuery()
上使用SPARQLQueryDefinition
方法。
假设你在dateTime类型的元素{"http://abc.com.au/meta#}start-time
上有一个范围索引,那么你可以这样做:
SPARQLQueryManager sparqlQueryManager;
StructuredQueryBuilder qb = new StructuredQueryBuilder();
StructuredQueryDefinition structuredQuery = qb.and(
qb.range(qb.element(new QName("http://abc.com.au/meta#", "start-time")), EvalResult.Type.DATETIME, StructuredQueryBuilder.Operator.GE, value),
qb.range(qb.element(new QName("http://abc.com.au/meta#", "end-time")), EvalResult.Type.DATETIME, StructuredQueryBuilder.Operator.LE, value));
SPARQLQueryDefinition sparql = sparqlQueryManager.newQueryDefinition("select ...");
sparql.setConstrainingQueryDefinition(structuredQuery);
JsonNode results = sparqlQueryManager.executeSelect(sparql, new JacksonHandle()).get();
然而,看起来你可能正试图用时间性做一些事情--MarkLogic双时态功能会处理你在时态数据库中遇到的一些困难。