如何编写Wikidata SPARQL查询获取同时含两类英语维基页面的条目
解决方案
原有查询存在语法和逻辑两处问题,以下是可直接运行的修正版本:
SELECT ?item ?itemLabel ?articleSimple ?articleEn WHERE { # 匹配关联简单英语维基百科页面的条目 ?articleSimple schema:about ?item ; schema:isPartOf <https://simple.wikipedia.org/> . # 匹配同一条目关联的标准英语维基百科页面,作为必选筛选条件 ?articleEn schema:about ?item ; schema:isPartOf <https://en.wikipedia.org/> . # 多语言标签服务单独放置,不要跟在三元组分号链后 SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],zh,en" } } LIMIT 10
错误原因说明
- 语法不合法:
SERVICE wikibase:label是独立的SPARQL服务调用子句,不能跟在链式三元组的分号后面,原有写法将其误写为?articleSimple的属性约束,会触发查询解析异常 - 匹配逻辑缺失:原有查询仅定义了简单英语维基页面的匹配规则,没有声明标准英语维基页面对应变量的约束条件,自然无法返回对应链接
- 注意:因为需求是筛选同时拥有两类页面的条目,不要给标准英语维基的匹配逻辑加
OPTIONAL关键字,加了之后会返回仅存在简单维基页面、无标准维基页面的条目,不符合筛选要求
内容的提问来源于stack exchange,提问作者Philippe
相关产品推荐
相关产品推荐

