2017-02-03 11 views
0

Model을 JSON-LD로 직렬화하고 RDF4J를 사용하여 문자열 변수에 저장하려고합니다.RDF4J/Sesame의 들여 쓰기, 공백 또는 줄 바꿈없이 JSON-LD 직렬화 문자열

내 코드는 다음과 같습니다

public void storeAsString(Model model) { 
    StringWriter stringWriter = new StringWriter(); 
    RDFWriter rdfWriter = Rio.createWriter(RDFFormat.JSONLD, stringWriter); 

    rdfWriter.getWriterConfig().set(JSONLDSettings.JSONLD_MODE, JSONLDMode.COMPACT); 
    rdfWriter.getWriterConfig().set(JSONLDSettings.OPTIMIZE, true); 

    Rio.write(model, rdfWriter); 
    String output = stringWriter.toString(); 
} 

그것은 나에게 JSON-LD 문자열을 제공하지만, 들여 쓰기, 공백이나 System.out.println(output)은 사람이 읽을되지 않도록 줄 바꿈없이. 그것은 다음과 같습니다 아파치 예나에서

{"@context":"http://schema.org/","type":"Person","jobTitle":"Professor","name":"Jane Doe","telephone":"(425) 123-4567","url":"http://www.janedoe.com"} 

이 나에게 원하는 출력 형식을 줄 것이다 JSONLD_PRETTY를라는 RDFFormat있다. 다음과 유사합니다 :

{ 
    "@context": "http://schema.org/", 
    "@graph": [ 
    { 
     "id": "_:b0", 
     "type": "Person", 
     "jobTitle": "Professor", 
     "name": "Jane Doe", 
     "telephone": "(425) 123-4567", 
     "url": "http://www.janedoe.com" 
    } 
    ] 
} 

Eclipse RDF4J에서도 가능합니까?

미리 감사드립니다.

편집 : 내가이 오류가 발생합니다 MongoDB를 사용하여 JSON-LD 문자열을 저장하기 위해 노력하고 있어요 : Invalid BSON field name을. 이것이 직렬화 또는 내장 모델에 문제가 있습니까?

편집 번호 2 : 위의 코드는 Turtle 형식과 완벽하게 작동합니다. 이 문제는 JSON-LD RDFJSON에서만 발생합니다.

답변

1

trueBasicWriterSettings.PRETTY_PRINT 옵션을 설정하여, 수 있습니다 : 그것은 별도의 질문을해야처럼

rdfWriter.getWriterConfig().set(BasicWriterSettings.PRETTY_PRINT, true); 

MongoDB의 문제에 대해 어떠한 아이디어는 소리가 난다.

+0

먼저 감사합니다. 그것이 제가 찾고 있던 설정입니다. 그러나 새로운 문제가 있습니다 :'JSONLDMode.FLATTEN'과'JSONLDMode.EXPAND'는 잘 형성된 JSON을 전달하지 않습니다. 문자열의 첫번째 문자는'{'이 아니라'{'. 그것이 아마도 MongoDB에 저장 될 수없는 이유 일 것입니다. 게다가 선언 한 네임 스페이스를 사용하지 않기 때문에'@ context' 객체가 없습니다. 하지만'JSONLDMode.COMPACT'를 사용하면 모든 것이 잘 동작합니다. 이 문제가 발생할 수있는 원인을 알고 있습니까? – phly

+0

하나의 요소가있는 배열로 변환하는 것처럼 보입니다. 사실 JSON이 잘 형성되었지만 조금 이상하게 보입니다. 왜 이런 일이 발생하는지 즉시 확신하지 못합니다 - RDF4J 프로젝트로 [지원 요청] (https://github.com/eclipse/rdf4j/issues)을 기록하는 것이 좋습니다. –