Как использовать данные JSONLD или JSONLD + Hydra для создания API, управляемого гипермедиа, на Java?

Мой вопрос состоит из двух частей:
Часть 1) Если сервер предоставляет данные, которые являются JSON-LD, то как использовать этот JSON-LD? Можем ли мы использовать простой парсер Json? Но я не думаю, что он будет работать из-за "@context", в котором есть сопоставление всех ключей.
Часть 2) Теперь данные - это JSON-LD + Hydra (чтобы сделать API, управляемый Hypermedia). Предположим, что часть Гидры предоставляется через API-документацию, например словарь Маркуса Лантхалера или вместе с данными ответа JSON-LD. Как получить данные (свойства) и выполнить действие, используя эти данные.
Я думал, что Apache Jena выполняет эту работу, чтобы потреблять и выполнять действия, но все же я не уверен, Является ли Apache Йена предназначена для этой цели, если да, то как там дела?
Прежде чем отвечать, рассмотрите следующий вариант:

CLIENT <----via API---> CLIENT HELPER <----via API----> SERVER

Для связи с СЕРВЕРОМ, КЛИЕНТ будет общаться через ПОМОЩЬ КЛИЕНТУ.

CLIENT HELPER и SERVER могут понимать и общаться в JSON-LD. В то время как КЛИЕНТ может понимать только JSON.

В приведенном выше сценарии я реализую часть ПОМОЩИ КЛИЕНТУ (в основном API-КЛИЕНТ), как реализовать эту часть. Пожалуйста, объясните в терминах непрофессионала.

Изменить 1):

Для этого JSON-LD

{
  "@context": {
                "@vocab" : "http://www.myorganisation.com/vocab/"
              },
  "@id": "http://www.myorganisation.com/hydra/api/users/1",
  "@type": "User",
  "name": "Dhannan",
  "age": 38,
  "knows" : [
            {
                  "@id": "http://www.myorganisation.com/hydra/api/users/2",
                  "@type": "User",
                  "name": "Mrigika",
                  "age": 35
            },
            {
                  "@id": "http://www.myorganisation.com/hydra/api/languages/1",
                  "@type": "Language",
                  "description": "English"
            }
    ]
}

Код JAVA:

HttpGet request = new HttpGet ("http://data.dummy.jsonld/sampleUser.jsonld ");
HttpClient client = HttpClientBuilder.create (). build ();
HttpResponse response = client.execute (запрос);
Входной объект объекта = JsonUtils.fromInputStream (response.getEntity (). getContent ( ));
JsonLdOptions options = new JsonLdOptions ();
Object rdf = JsonLdProcessor.toRDF (ввод, параметры);
RDFDataset rdfDataset = (RDFDataset) rdf;
System.out.println (rdfDataset );


Это ответ с использованием jsonld-java

{
@default=
    [
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type},
        object={type=IRI, value=http://www.myorganisation.com/vocab/User}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/age},
        object={type=literal, value=38, datatype=http://www.w3.org/2001/XMLSchema#integer}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/knows},
        object={type=IRI, value=http://www.myorganisation.com/hydra/api/users/2}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/knows},
        object={type=IRI, value=http://www.myorganisation.com/hydra/api/languages/1}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/name},
        object={type=literal, value=Dhannan, datatype=http://www.w3.org/2001/XMLSchema#string}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/2},
        predicate={type=IRI, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type},
        object={type=IRI, value=http://www.myorganisation.com/vocab/User}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/2},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/age},
        object={type=literal, value=35, datatype=http://www.w3.org/2001/XMLSchema#integer}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/2},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/name},
        object={type=literal, value=Mrigika, datatype=http://www.w3.org/2001/XMLSchema#string}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/languages/1},
        predicate={type=IRI, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type},
        object={type=IRI, value=http://www.myorganisation.com/vocab/Language}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/languages/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/description},
        object={type=literal, value=English, datatype=http://www.w3.org/2001/XMLSchema#string}
        }
    ]
}

Придется ли мне иметь дело с этими данными?


person Badman    schedule 24.03.2017    source источник


Ответы (1)


Часть 1) Если сервер предоставляет данные, которые являются JSON-LD, то как использовать этот JSON-LD? Можем ли мы использовать простой Json Parser? Но я не думаю, что он будет работать из-за "@context", в котором есть отображение всех ключей.

Если вы точно знаете, в какой форме вы получите данные (например, потому что вы управляете сервером), вы можете проанализировать их как JSON. В противном случае вам лучше использовать процессор JSON-LD для его анализа. json-ld.org перечисляет ряд реализаций с открытым исходным кодом.

Часть 2) Теперь данные - это JSON-LD + Hydra (для создания API, управляемого Hypermedia). Предположим, что часть Hydra предоставляется либо через API-документацию, такую ​​как словарь Markus Lanthaler, либо вместе с данными ответа JSON-LD. Как получить данные (свойства) и выполнить действие с использованием этих данных. Я думал, что Apache Jena выполняет эту работу по потреблению и выполнению действий, но все же я не уверен, подходит ли Apache Jena для этой цели, если да, то как это происходит?

Каждая библиотека / инструмент / фреймворк RDF должны быть в состоянии помочь в этом отношении. Есть и более специализированные инструменты. Взгляните на hydra-cg.com

person Markus Lanthaler    schedule 26.03.2017
comment
См. Правка: 1 в Вопросе. Вы пытались передать то же самое?. - person Badman; 30.03.2017