On 13/02/14 09:10, Julien Plu wrote:
I changed a bit my code to add your advice but I still have an error :
org.apache.jena.riot.RiotException: [line: 39, col: 467] Unknown char:
\(92;0x005C)
Problem with the conversion.
Print out the converted string to see what the problem is.
Here the new code :
try {
URL serviceURL = new URL("
https://www.googleapis.com/freebase/v1/rdf/m/020c55");
URLConnection connection = serviceURL.openConnection();
Model model = ModelFactory.createDefaultModel();
BufferedReader bf = new BufferedReader(new
InputStreamReader(connection.getInputStream()));
String readline;
StringBuilder sb = new StringBuilder();
while ((readline = bf.readLine()) != null) {
sb.append(readline.replaceAll("\\\\x", "\\\\u00")+"\n");
}
InputStream in = new ByteArrayInputStream(sb.toString().getBytes());
BAD
Never use getBytes() for web data.
1/ Use a StringReader
2/ If you must convert to bytes, set the charset to be "UTF-8" (or
ideally the charset for the ressponse).
model.read(in, null, "TTL");
} catch (Exception ex) {
ex.printStackTrace();
}
Best
Julien.
2014-02-12 19:58 GMT+01:00 Andy Seaborne <[email protected]>:
On 12/02/14 13:21, Julien Plu wrote:
Yes I saw my error to lately sorry for disturbing you for nothing :-(
By the way I can't pass immediately the URL to the model because the
Turtle
provided by this URI (and all the others from Freebase) have unicode
characters encoded with "\x" so it's not valid Turtle, it's why I try to
translate (or convert) these characher in "\u".
But my method doesn't works, any idea of how to do this in Java ?
Best I can see is to get as string, fixup in Java (string replace), then
use a StringReader. It's not too big.
At a wild untested guess, replace all \x with \u00.
You need to tell it the syntax is "TTL" but you'd need to do that anyway
because the HTTP response is "Content-Type: text/plain; charset=UTF-8"
HTTP/1.1 200 OK
Expires: Wed, 12 Feb 2014 18:50:21 GMT
Date: Wed, 12 Feb 2014 18:50:21 GMT
Cache-Control: private, max-age=0, must-revalidate, no-transform
ETag: "1CZZiDfFArqsKpzUgFQB2V9yilI/MW2d6bfo-oO8n5ovC7d5nFY2_AQ"
Content-Type: text/plain; charset=UTF-8
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Content-Length: 32404
Server: GSE
Alternate-Protocol: 443:quic
Andy
Best.
Julien.
2014-02-12 14:06 GMT+01:00 Rob Vesse <[email protected]>:
You are trying to read from the downloaded contents of the file directly
which is not going to work. The model.read() API takes in a name of a
file/URI to read or it takes in an InputStream.
Simply pass your input stream directly to the read() call, or even
simpler
pass your URI to the read() call and let Jena handle the HTTP request for
you.
Rob
On 12/02/2014 12:28, "Julien Plu" <[email protected]>
wrote:
Hi,
In getting the Turtle RDF from this URI :
https://www.googleapis.com/freebase/v1/rdf/m/020c55
A RiotNotFoundException is thrown :
org.apache.jena.riot.RiotNotFoundException: Not found: @prefix key: <
http://rdf.freebase.com/key/>.
@prefix ns: <http://rdf.freebase.com/ns/>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
.....
.....
at org.apache.jena.riot.RDFDataMgr.open(RDFDataMgr.java:831)
at org.apache.jena.riot.RDFDataMgr.open(RDFDataMgr.java:813)
at org.apache.jena.riot.RDFDataMgr.parse(RDFDataMgr.java:684)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:208)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:181)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:119)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:110)
at
org.apache.jena.riot.adapters.RDFReaderRIOT.read(RDFReaderRIOT.java:77)
at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.
java:259)
at freebase.Test.main(Test.java:61)
Here my code :
try {
URL serviceURL = new URL("
https://www.googleapis.com/freebase/v1/rdf/m/020c55");
Model model = ModelFactory.createDefaultModel();
BufferedReader in = new BufferedReader(new
InputStreamReader(serviceURL.openStream(), "UTF-8"));
String readline;
StringBuilder sb = new StringBuilder();
while ((readline = in.readLine()) != null) {
sb.append(readline+"\n");
}
model.read(sb.toString(), "TTL");
} catch (Exception ex) {
ex.printStackTrace();
}
Any solution to solve this ?
Thanks in advance.
Best.
Julien.