在OpenRefine中使用GREL从RDF/XML提取skos:closeMatch
解决OpenRefine中从RDF/XML提取skos:closeMatch URI的问题
你之前用value.parseHtml().select('skos|closematch')失败的原因有两个:
- XML是大小写敏感的,你写的
closematch和实际标签closeMatch大小写不匹配 - RDF/XML属于XML格式,用
parseHtml()解析会忽略XML命名空间,应该用专门的XML解析方法
正确的GREL表达式
在OpenRefine中添加新列时,使用以下代码:
value.parseXml().selectNodes("//skos:closeMatch").map(node, node.attr("rdf:resource")).join("; ")
代码解释
value.parseXml():正确解析列中的RDF/XML内容,保留所有命名空间信息selectNodes("//skos:closeMatch"):通过XPath选择所有带skos命名空间的closeMatch节点map(node, node.attr("rdf:resource")):遍历每个节点,提取rdf:resource属性中的URI值join("; "):把所有URI用分号分隔合并成字符串(如果需要保留列表格式,可去掉这部分)
去重版本(可选)
如果你的RDF/XML中有重复的URI,想要只保留唯一值,使用:
value.parseXml().selectNodes("//skos:closeMatch").map(node, node.attr("rdf:resource")).unique().join("; ")
内容的提问来源于stack exchange,提问作者Zayn Sab
相关产品推荐
相关产品推荐

