2017-03-24 28 views
0

我的問題有兩部分:
第1部分)如果服務器提供的數據是JSON-LD,那麼如何使用這個JSON-LD?我們可以使用簡單的Json解析器嗎?但我認爲它不會工作,因爲「@context」映射了每個鍵。
第2部分)現在數據是JSON-LD + Hydra(用於製作超媒體驅動的API)。假設Hydra部分是通過API文檔(如Markus Lanthaler vocab)或JSON-LD響應數據提供的。如何獲取數據(屬性)並使用該數據執行操作。
我以爲Apache Jena做這個工作來消費和執行操作,但我仍然不確定,如果是的話,Apache Jena是爲了這個目的,那麼它怎麼樣?
回答之前考慮這個塞納里奧:如何使用JSONLD數據或JSONLD + Hydra在Java中製作超媒體驅動的API?

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

要與服務器通信,客戶端將通過客戶HELPER通信。

客戶端幫助者和服務器都可以理解和使用JSON-LD進行通信。 雖然CLIENT只能理解JSON。

在上面這個場景中,我實現了CLIENT HELPER(bascially API CLIENT)部分如何實現該部分。請在外行人員的角度解釋。

編輯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請求=新HTTPGET( 「http://data.dummy.jsonld/sampleUser.jsonld」);
HttpClient client = HttpClientBuilder.create()。build();
HttpResponse response = client.execute(request);
Object input = JsonUtils.fromInputStream(response.getEntity()。getContent());
JsonLdOptions options = new JsonLdOptions();
對象rdf = JsonLdProcessor.toRDF(input,options);
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} 
     } 
    ] 
} 

我將不得不面對這一數據的反應如何?

回答

0

第1部分)如果服務器提供的數據是JSON-LD,那麼如何使用這個JSON-LD? ?我們可以使用簡單的Json解析器嗎?但我認爲它不會工作 ,因爲「@context」映射了每個鍵。

如果您確切知道以何種形式獲取數據(例如,因爲您控制服務器),則可以將其解析爲JSON。否則,您應該使用JSON-LD處理器來解析它。 json-ld.org列出了許多開源實現。

第2部分)現在數據是JSON-LD + Hydra(用於製作超媒體驅動的API)。 假設Hydra部分是通過API文檔(如 Markus Lanthaler vocab)或JSON-LD響應數據提供的。如何獲取 數據(屬性)並使用該數據執行操作。我以爲Apache Jena做這項工作是爲了消費和執行行動,但我仍然不確定 ,如果是的話,Apache Jena是爲了這個目的,那麼它是怎麼做的?

每個RDF庫/工具/框架應​​該能夠在這方面提供幫助。還有更專業的工具。看看hydra-cg.com

+0

請看編輯:1的問題。你是否試圖用同樣的方式表達?我仍然在想出九頭蛇的部分,以後我會再來。 – Badman