我现在正在学习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
会有所不同?