Строка сериализации JSON-LD без отступов, пробелов или разрывов строк в RDF4J / Sesame

Я пытаюсь сериализовать модель как JSON-LD и сохранить ее в строковой переменной с помощью RDF4J.

Мой код выглядит так:

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?

Заранее спасибо!

Изменить: Когда я пытаюсь сохранить строку JSON-LD с MongoDB, он выдает эту ошибку: Invalid BSON field name, Это проблема с сериализацией или с моей встроенной моделью?

Редактирование № 2: приведенный выше код работает, например, безупречно с форматом Turtle. У меня эта проблема только с JSON-LD и RDFJSON.

1 ответ

Решение

Это возможно, установив BasicWriterSettings.PRETTY_PRINT возможность true:

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

Понятия не имею о проблеме MongoDB, похоже, это должен быть отдельный вопрос.

Другие вопросы по тегам