通过 SPARQL 处理 R XML 的编码问题

2024-02-23

我遇到了 R 的 SPARQL 包的编码问题。我正在运行以下代码:

library(SPARQL)

rights_query <- '
PREFIX dc:  <http://purl.org/dc/elements/1.1/>
PREFIX edm: <http://www.europeana.eu/schemas/edm/>
PREFIX ore: <http://www.openarchives.org/ore/terms/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT DISTINCT ?edmrights ?provider (COUNT(*) as ?count)
WHERE {
?agg rdf:type ore:Aggregation .
?agg edm:rights ?edmrights .
#?agg dc:rights ?dcrights .
?agg edm:dataProvider ?provider .

?proxy ore:proxyIn ?agg .
?proxy edm:type "IMAGE" .
}
GROUP BY ?edmrights ?provider
ORDER BY ?provider DESC(?count)'

eur <- "http://europeana.ontotext.com/sparql"

eur_data <- SPARQL(eur, rights_query)$results
write.csv(eur_data, "results.csv")

代码运行时没有任何错误或警告,但是在 RStudio 中查看的结果数据帧以及 CSV 显然存在编码问题。

例如,最后一个应该部分是西里尔字母:Чувашский государственный художественный музей / Chouvashia State Art Museum

然而它看起来像这样:ЧÑваÑÑкий гоÑÑдаÑÑÑвеннÑй ÑÑдожеÑÑвеннÑй мÑзей / Chouvashia State Art Museum

我检查了 SPARQL 查询返回的 XML。它通过了 XML 验证,并包含正确的“UTF-8”编码声明。 R XML 包(R SPARQL 包用于将 XML 输出解析为数据帧)应该能够识别这一点,对吗?

您可以检查整个XML输出 https://gist.github.com/mdlincoln/218b0ce5b75ddc80de8a#file-sparql_results-xml,以及CSV file https://gist.github.com/mdlincoln/dbed980ee517b0a12ba0。我正在 OS X Mavericks 上通过 RStudio 运行 R 3.1.0。我已将 RStudio 的默认字符编码设置为 UTF-8。


在这种情况下,我会考虑如下而不是 SPARQL.R: ...

Sys.setenv(LANG="ru")
library(RCurl)
library(XML)
url=<SPARQL endpoint query URL>
xquery=<your query which may contain windows-1251 chars on Windows 7+>
#xquery=iconv(xquery,"CP1251","UTF-8") #it may be required on Windows 7+
param="query"
extrastr=""
resp <- getURL(url = paste(url, '?', param, '=', gsub('\\+','%2B',URLencode(xquery,reserved=TRUE)), extrastr, sep=""), httpheader = c(Accept="application/sparql-results+xml"),.encoding="UTF-8")
xmlResp=xmlParse(resp)
xmlRespRoot=xmlRoot(xmlResp)
nRows=xmlSize(xmlRespRoot[2]$results)
if (nRows>0){
    xRespList=NULL
    for(i in 1:nRows){
    xrow=NULL
    tmprow=(xmlRespRoot[2]$results)[i]$result
    nCols=xmlSize(tmprow)
    for(j in 1:nCols){
        xrow=cbind(xrow,xmlValue(tmprow[j]$binding,encoding="UTF-8"))
    }
    xRespList=rbind(xRespList,xrow)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 SPARQL 处理 R XML 的编码问题 的相关文章

随机推荐