是否可以轻松提出CONSTRUCT
请求,以便我能够检查不同图表中的数据并按“图表偏好”对它们进行排序?
假设我销售产品。对于每种产品,我可能有不同的供应商,因此我的设置如下所示:
<http://data.experiment.com/product/1> <http://purl.org/goodrelations/v1#hasCurrencyValue> "10" <http://data.experiment.com/graph/supplier/1> .
<http://data.experiment.com/product/1> <http://purl.org/goodrelations/v1#hasCurrencyValue> "8" <http://data.experiment.com/graph/supplier/2> .
<http://data.experiment.com/product/2> <http://purl.org/goodrelations/v1#hasCurrencyValue> "5" <http://data.experiment.com/graph/supplier/2> .
对于每个产品规格,我希望它来自,如果在 中找不到<http://data.experiment.com/graph/supplier/1>
,则来自。<http://data.experiment.com/graph/supplier/2>
<http://data.experiment.com/graph/supplier/1>
这就是我想出的:
CONSTRUCT
{
<http://data.experiment.com/product/1> ?p ?o .
}
WHERE
{
GRAPH <http://data.experiment.com/graph/supplier/1>
{
OPTIONAL
{
<http://data.experiment.com/product/1> ?p1 ?o1 .
}
}
GRAPH <http://data.experiment.com/graph/supplier/2>
{
OPTIONAL
{
<http://data.experiment.com/product/1> ?p2 ?o2 .
}
}
BIND (IF (BOUND(?p1), ?p1, IF (BOUND(?p2), ?p2, UNDEF)) AS ?p)
BIND (IF (BOUND(?o1), ?o1, IF (BOUND(?o2), ?o2, UNDEF)) AS ?o)
}
如果我知道我在寻找什么,它确实工作得很好。现在,如果我考虑:
CONSTRUCT
{
<http://data.experiment.com/product/1> ?p ?o . ?o ?cp ?co
}
WHERE
{
GRAPH <http://data.experiment.com/graph/supplier/1>
{
OPTIONAL
{
<http://data.experiment.com/product/1> ?p1 ?o1 .
OPTIONAL { ?o1 ?cp1 ?co1 . }
}
}
GRAPH <http://data.experiment.com/graph/supplier/2>
{
OPTIONAL
{
<http://data.experiment.com/product/1> ?p2 ?o2 .
OPTIONAL { ?o2 ?cp2 ?co2 . }
}
}
BIND (IF (BOUND(?p1), ?p1,IF (BOUND(?p2), ?p2, UNDEF)) AS ?p)
BIND (IF (BOUND(?o1), ?o1,IF (BOUND(?o2), ?o2, UNDEF)) AS ?o)
BIND (IF (BOUND(?cp1), ?cp1,IF (BOUND(?cp2), ?cp2, UNDEF)) AS ?cp)
BIND (IF (BOUND(?co1), ?co1,IF (BOUND(?co2), ?co2, UNDEF)) AS ?co)
}
有时它不起作用,因为我明确地BIND
?o
,并且?o
可能不是 Object —</p>
Virtuoso RDF01 错误 CONSTRUCT 中的变量值错误:“1532610063”(标签 189 框标志 0)不是有效的主题,只有三元组的对象可以是文字
我似乎没有找到任何人试图通过“图表”对数据进行排序,我正在努力寻找一种“简单”的方式来做到这一点。我已经尝试使用SELECT
and FROM NAMED
,但您仍然需要从您想要的图表中手动选择数据。
如果有人可以提供帮助,那就太受欢迎了。
谢谢你。