sparql update queryinto GraphDB将TTL上载到语音符号失败

sparql update queryinto GraphDB将TTL上载到语音符号失败,sparql,graphdb,turtle-rdf,iri,Sparql,Graphdb,Turtle Rdf,Iri,使用以下bash脚本上载海龟数据: #!/usr/bin/env bash RDF4J_ENDPOINT=endpoint_uri DIR="~/modelio/workspace/IPR/" IFS= FILE=tmp.rq function runUpdateQuery() { cp $1 $FILE sed -i -e "s!__VOC_IRI__!$2!g" $FILE curl --netrc-file .netrc -X POST -H "Content-t

使用以下bash脚本上载海龟数据:

#!/usr/bin/env bash
RDF4J_ENDPOINT=endpoint_uri
DIR="~/modelio/workspace/IPR/"
IFS=
FILE=tmp.rq

function runUpdateQuery() {
    cp $1 $FILE
    sed -i -e "s!__VOC_IRI__!$2!g" $FILE
    curl --netrc-file .netrc -X POST -H "Content-type: application/sparql-update" -T $FILE $RDF4J_ENDPOINT/statements
}

function transform() {
    VOC_IRI=$1
    PREFIX=$2

    URL="$RDF4J_ENDPOINT/rdf-graphs/service?graph=$VOC_IRI"
    curl --netrc-file .netrc -X POST -H "Content-type: text/turtle" -T "$DIR/$PREFIX-model.ttl" $URL
}

transform http://onto.fel.cvut.cz/ontologies/slovník/datový-psp-2016 psp-2016
词汇表IRI(…/slovník/datový-…)中的变音符号失败,出现以下错误:

<!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad Request</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 – Bad Request</h1><hr class="line" /><p><b>Type</b> Exception Report</p><p><b>Message</b> Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986</p><p><b>Description</b> The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).</p><p><b>Exception</b></p><pre>java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:748)
</pre><p><b>Note</b> The full stack trace of the root cause is available in the server logs.</p><hr class="line" /><h3>Apache Tomcat/9.0.14</h3></body></html>
HTTP状态400–错误请求H1{字体系列:Tahoma,Arial,无衬线;颜色:白色;背景色:525D76;字体大小:22px;}h2{字体系列:Tahoma,Arial,无衬线;颜色:白色;背景色:525D76;字体大小:16px;}h3{字体系列:Tahoma,Arial,无衬线;颜色:白色;背景色:525D76;字体大小:14px;}正文{字体系列:Tahoma,Arial,无衬线;颜色:黑色;背景色:白色;}b{字体系列:Tahoma,Arial,无衬线;颜色:白色;背景色:}p{字体系列:Tahoma,Arial,无衬线;背景色:白色;颜色:黑色;字体大小:12px;}a{颜色:黑色;}a.name{颜色:黑色;}线条{高度:1px;背景色:#d76;边框:无;}HTTP状态400–错误请求
类型异常报告

在请求目标中找到无效字符的消息。有效字符在RFC 7230和RFC 3986中定义。说明服务器无法或将不会处理请求,原因是被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性请求路由)。

异常

java.lang.IllegalArgumentException:在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义 org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) run(Thread.java:748) 注意,根本原因的完整堆栈跟踪可在服务器日志中找到。



当去掉发音符号时,它工作得很好。你知道怎么回事吗?

GraphDB使用Unicode,尤其是UTF-8编码用于所有通过HTTP的通信。为了在URL中传递任何非ASCII的内容,它需要编码为UTF-8。如果你这样使用它,Curl不会自动这样做。你可以使用URL编码UTF-8 repre手动表示“í”和“ý”(%C3%AD和%C3%BD),也可以使用此卷曲功能:

关键是-G选项,它告诉curl将URL编码的参数附加到URL

curl -X POST -H "Content-type: text/turtle" -T file.ttl\
     -G --data-urlencode "graph=http://onto.fel.cvut.cz/ontologies/slovník/datový-psp-2016"\
     http://hostname:7200/repositories/repo/rdf-graphs/service