我试图通过SPARQL界面(Interface here,schema here)从欧盟全体辩论的数据库中获取大量查询。当我这样做时,我想找回发言人的姓名,他们的祖国和他们的部分名称。 每个议程项目需要5分钟才能完成,这似乎很慢。我在查询中发现任何明显的错误,这会让它变慢吗?
SELECT ?text (SAMPLE(?speaker) AS ?speaker) (SAMPLE(?given) AS ?given) (SAMPLE(?surname) AS ?surname) (SAMPLE(?acronym) AS ?country) (SAMPLE(?partyLabel) AS ?partyLabel) (SAMPLE(?type) AS ?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"))
} GROUP BY ?text
注意,将?speech lpv:translatedText ?text.
更改为?speech lpv:textt ?text.
会将查询时间缩短为30秒。
答案 0 :(得分:2)
您的SPARQL查询看起来没有什么特别的错误,并且没有明显的错误(除了我后面讨论的一些语法有效性问题)
问题似乎是您正在使用的SPARQL服务使用的三重存储不能很好地处理具有大量连接的查询。在尝试查询时,移动三元模式会在SPARQL服务中产生堆栈溢出!
我建议您自己从http://linkedpolitics.ops.few.vu.nl/home下载数据 - 关于数据部分的第3点下有链接,您可以从中自行下载数据。然后,您可以将其加载到您选择的三重存储中,然后针对该存储运行查询。
例如,我下载了数据并将其放入Apache Jena Fuseki(免责声明 - 我在Apache Jena项目上工作),并且能够在我修复查询后几乎立即运行查询要正确有效的SPARQL。
给定的查询不是严格有效的SPARQL,因此您需要更正它以便在其他位置运行它。
首先,查询未定义使用的各种前缀,因为您使用的服务会自动插入它们,以便针对另一个三重存储运行此查询,您需要将以下内容添加到查询的开头:
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX lpv: <http://purl.org/linkedpolitics/vocabulary/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
如果给定的变量名已在范围内,则执行变量赋值也是不合法的,例如(SAMPLE(?speaker) AS ?speaker)
所以需要改变:
(SAMPLE(?speaker) AS ?speaker1)
这导致以下有效且可移植的SPARQL查询:
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX lpv: <http://purl.org/linkedpolitics/vocabulary/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?text (SAMPLE(?speaker) AS ?speaker1) (SAMPLE(?given) AS ?given1) (SAMPLE(?surname) AS ?surname1) (SAMPLE(?acronym) AS ?country1) (SAMPLE(?partyLabel) AS ?partyLabel1) (SAMPLE(?type) AS ?type1)
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"))
} GROUP BY ?text