了解构造模板
Understanding CONSTRUCT templates
我现在正在学习 SPARQL,但我无法理解 CONSTRUCT 模板的局限性。通常一切正常,就像我期望的那样。然而,当我开始制作语义上没有意义的模板时,我的理解就崩溃了。这是一个例子:
我存储了以下数据:
me: a foaf:Person .
foaf:mbox rdfs:label "Email" .
使用 ?s ?p ?o
的默认模板,我显然得到了准确的数据。如果我想要一些有点荒谬的东西,像这样:
CONSTRUCT {
?type ?labeled ?label
}
WHERE {
me: a ?type .
?labeled rdfs:label ?label .
}
我回来了这个三重奏:
foaf:Person foaf:mbox "Email" .
这对我来说有点意义,因为有三个变量,每个变量在数据集中只能绑定一个值。但是,一旦我将模板中变量的顺序切换为如下所示:?type ?label ?labeled
,我几乎什么也得不到。这是为什么?模板 ?type ?labeled ?label
已经破坏了数据的原始结构,我仍然得到了一些东西,那么为什么 ?type ?label ?labeled
会有所不同?
,字面量不能是谓词。 "Email"
是一个文字,因此它不能构造成谓词位置。
我现在正在学习 SPARQL,但我无法理解 CONSTRUCT 模板的局限性。通常一切正常,就像我期望的那样。然而,当我开始制作语义上没有意义的模板时,我的理解就崩溃了。这是一个例子:
我存储了以下数据:
me: a foaf:Person .
foaf:mbox rdfs:label "Email" .
使用 ?s ?p ?o
的默认模板,我显然得到了准确的数据。如果我想要一些有点荒谬的东西,像这样:
CONSTRUCT {
?type ?labeled ?label
}
WHERE {
me: a ?type .
?labeled rdfs:label ?label .
}
我回来了这个三重奏:
foaf:Person foaf:mbox "Email" .
这对我来说有点意义,因为有三个变量,每个变量在数据集中只能绑定一个值。但是,一旦我将模板中变量的顺序切换为如下所示:?type ?label ?labeled
,我几乎什么也得不到。这是为什么?模板 ?type ?labeled ?label
已经破坏了数据的原始结构,我仍然得到了一些东西,那么为什么 ?type ?label ?labeled
会有所不同?
"Email"
是一个文字,因此它不能构造成谓词位置。