Доступ к данным в java из JSON-Ld

мой сервер получает разные сообщения JSON-LD в виде строки. Теперь мне нужно получить доступ к этим сообщениям. Вот пример:

    {
  "@graph": [
    {
      "@graph": [
        {
          "@id": "InterIoTMsg:meta/b453273f-36d6-49a2-82ec-d909d8e6f10a",
          "@type": [
            "InterIoTMsg:meta",
            "InterIoTMsg:Observation"
          ],
          "InterIoTMsg:ReceiverPlatformId": {
            "@id": "http://om2m.org/myPlatform"
          },
          "InterIoTMsg:conversationID": "conv614d3621-7399-45b1-bf2f-505b24045ea6",
          "InterIoTMsg:dateTimeStamp": "2018-01-15T21:49:00.655+01:00",
          "InterIoTMsg:messageID": "msg7713aa0f-61df-471d-beec-80e8fb71528a"
        }
      ],
      "@id": "InterIoTMsg:metadata"
    },
    {
      "@graph": [
        {
          "@id": "_:b1",
          "@type": "sosa:Observation",
          "iiot:hasName": "tempOutside",
          "sosa:resultTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2018-04-06T12:36:12Z"
          },
          "sosa:hasResult": {
            "@id": "_:b2"
          },
          "sosa:madeBySensor": {
            "@id": "_:b0"
          }
        },
        {
          "@id": "_:b2",
          "@type": "sosa:Result",
          "iiot:hasResultValue": {
            "@type": "http://www.w3.org/2001/XMLSchema#long",
            "@value": "32"
          },
          "iiot:hasUnit": {
            "@id": "sweet_units:celsius"
          }
        },
        {
          "@id": "http://localhost:8080/weather/station1",
          "@type": "http://inter-iot.eu/GOIoTP#IoTDevice",
          "InterIoT:GOIoTP#hasName": "Weather Station 1"
        },
        {
          "@id": "_:b0",
          "@type": "sosa:Sensor",
          "sosa:isHostedBy": {
            "@id": "http://localhost:8080/in-name/humidity"
          }
        }
      ],
      "@id": "InterIoTMsg:payload"
    }
  ],
  "@context": {
    "InterIoTMsg": "http://inter-iot.eu/message/",
    "InterIoT": "http://inter-iot.eu/",
    "sosa": "http://www.w3.org/ns/sosa/",
    "iiot": "http://inter-iot.eu/GOIoTP#"
  }
}

Я точно не знаю, как получить доступ к определенным значениям в данных. Например ценность в iiot: hasResultValue. Сейчас у меня есть RDF-Parser, который анализирует String на dataset с помощью Jena Api:

try (InputStream in = new ByteArrayInputStream(message.getBytes(StandardCharsets.UTF_8))) {
        RDFParser.create()
                .source(in)
                .lang(Lang.JSONLD)
                .parse(dataset.asDatasetGraph());
    }

Во-первых, я не знаю, как продолжить, а во-вторых, я даже не знаю, правильный ли это рудимент. Так что, если кто-нибудь может помочь, я очень благодарен.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
265
1

Ответы 1

Судя по описанию, вы, вероятно, захотите, чтобы данные RDF были в модели, а затем использовали API модели для доступа к данным в модели.

Первое, что нужно попробовать, это напечатать как Turtle, чтобы вы могли увидеть структуру RDF.

Model model = ModelFactory.createDefaultModel();
RDFDataMgr.read(model, new StringReader(message), null, Lang.JSONLD);
RDFDataMgr.write(System.out, model, Lanmg.TURTLE);

RDFDataMgr.read также можно сделать с помощью:

RDFParser.create().fromString(message).lang(Lang.JSONLD).parse(model);

в идеале это должно быть сделано в dotNetRDF, nu ?. Вы знаете статус обновлений для этого инструмента? Последний выпуск не обрабатывал ни RDFa, ни JSON-LD. RDFa сейчас менее важен, но JSON-LD очень важен. Альтернативой является использование одного из инструментов преобразования. Но результат работы инструмента преобразования может быть неустойчивым.

Jay Gray 18.12.2018 18:10

игнорируйте вышесказанное. новый выпуск (2.0.1) поддерживает JSON-LD.

Jay Gray 18.12.2018 18:18

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