我想从欧洲议会提取有关特定议程项目的演讲,可通过SPARQL界面访问:http://linkedpolitics.ops.few.vu.nl/user/query
可在此处找到数据库的架构:http://linkedpolitics.ops.few.vu.nl/home
通过以下查询
SELECT ?speaker ?given ?surname ?acronym ?text ?partyLabel ?type
WHERE {
<http://purl.org/linkedpolitics/eu/plenary/2010-12-16_AgendaItem_4> dcterms:hasPart ?speech.
?speech lpv:speaker ?speaker.
?speaker foaf:givenName ?given.
?speaker foaf:familyName ?surname.
?speaker lpv:countryOfRepresentation ?country.
?country lpv:acronym ?acronym.
?speech lpv:translatedText ?text.
?speaker lpv:politicalFunction ?func.
?func lpv:institution ?institution.
?institution rdfs:label ?partyLabel.
?institution rdf:type ?type.
FILTER(langMatches(lang(?text), "en"))
}
我获取了我想要的信息,但所有行都重复了几次。当我试图通过它看起来的政治功能来访问聚会标签时会发生这种情况。如何仅获取唯一行以及首先出现重复项的原因是什么?
答案 0 :(得分:4)
您正在使用大量变量,并且您没有选择所有这些变量。这意味着您要返回的行的差异可能在您实际没有选择的变量中。例如,如果您有数据:
:a :hasChild :b .
:a :hasChild :c .
并运行了查询:
select ?parent where {
?parent :hasChild ?child .
}
你会在结果中得到两行:
?parent
-------
:a
:a
因为有两个提供解决方案的绑定:一个在哪里?child是:a,一个是child是什么?b。
为避免这种情况,您可以使用选择不同,这会删除“重复”结果行。只是做:
SELECT DISTINCT ?speaker?given?surname?acronym?text?partyLabel?type