Я пытаюсь сериализовать модель как JSON-LD и хранить ее в строковой переменной с использованием RDF4J.Строка сериализации JSON-LD без отступов, пробелов или разрывов строк в RDF4J/Sesame
Моего код выглядит следующим образом:
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"}
В Apache Jena есть RDFFormat
называется JSONLD_PRETTY
, который дал бы мне нужный формат вывода. Он выглядит примерно так:
{
"@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?
Спасибо заранее!
Edit: Когда я пытаюсь сохранить строку JSON-LD с MongoDB он бросает эту ошибку: Invalid BSON field name
. Это проблема с сериализацией или с моей встроенной моделью?
Редакция № 2: Приведенный выше код работает безупречно с форматом черепахи, например. У меня эта проблема только с JSON-LD и RDFJSON.
Прежде всего, спасибо! Это настройка, которую я искал. Но есть новая проблема: 'JSONLDMode.FLATTEN', а также' JSONLDMode.EXPAND' не доставляет хорошо сформированный JSON. Первым символом в строке является '[', а не '{'. Возможно, это причина, по которой он не может быть сохранен в MongoDB. Кроме того, он не использует пространства имен, которые я объявил, поэтому нет объекта @ @ context. Но если я использую 'JSONLDMode.COMPACT', все работает отлично. Вы знаете, что может вызвать такое поведение? – phly
Похоже, что он превращает его в массив с одним элементом. Это на самом деле хорошо сформированный JSON, но, по общему признанию, это немного странно. Я не сразу понимаю, почему это происходит - я предлагаю вам запустить [запрос поддержки] (https://github.com/eclipse/rdf4j/issues) с проектом RDF4J. –