了解构造模板

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" 是一个文字,因此它不能构造成谓词位置。