Доступ к данным в 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-парсер, который анализирует String
к dataset
с помощью Jena Api:
try (InputStream in = new ByteArrayInputStream(message.getBytes(StandardCharsets.UTF_8))) {
RDFParser.create()
.source(in)
.lang(Lang.JSONLD)
.parse(dataset.asDatasetGraph());
}
Во-первых, я не знаю, как продолжать в этот момент, а во-вторых, я даже не знаю, правильный ли это зачаток. Так что если кто-нибудь может помочь, я очень благодарен.
1 ответ
Из описания вы, вероятно, захотите получить данные RDF в модели, а затем использовать API модели для доступа к данным в модели.
Первое, что нужно попробовать, это распечатать как Черепаха, чтобы вы могли увидеть структуру 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);