2016-08-10 51 views
2

假設我有一個JSON對象,其中包含嵌套對象中的一些屬性。在JSON-LD中註釋嵌套結構/值

{ 
    "title": "My Blog Post", 
    "meta": { 
     "publishedAt": "2016-08-01T00:00:00Z" 
    } 
} 

有一個簡單的方法,我可以再補充一個@context我頂層對象達到 這些屬性(即只是「通過」元對象)?沿着 東西這些行:

{ 
    "@context": { 
     "title": "schema:name", 
     "meta.publishedAt": { 
      "@type": "xsd:date", 
      "@id": "schema:datePublished" 
     } 
    }, 

    "@id": "/my-article", 
    "title": "My Blog Post", 

    "meta": { 
     "publishedAt": "2016-08-01T00:00:00Z" 
    } 
} 

我想,以避免增加(一式兩份)@id到嵌套的對象,這是多麼我本來已經解決了這個問題:

{ 
    "@context": { 
     "title": "schema:name", 
     "meta": { "@id": "_:meta", "@container": "@set" }, 
     "publishedAt": { 
      "@type": "xsd:date", 
      "@id": "schema:datePublished" 
     } 
    }, 

    "@id": "/my-article", 
    "title": "My Blog Post", 

    "meta": { 
     "@id": "/my-article", 
     "publishedAt": "2016-08-01T00:00:00Z" 
    } 
} 

該解決方案作品,但需要重複,並且來自ethanresnick's comments on Github關於註釋JSON API。他在another issue中指出,@context的「表達能力不足以註釋JSON API結構」。至少在這個問題上,我希望證明他是錯的。

+0

如果你簡單地定義了'publishedAt'來看,它會爲所有的情況下工作(但是,你可能想'的xsd:dateTime',不'XSD:日期')。 –

+0

如果你想要做的是吃'元'元素,那麼不,這不能在JSON-LD中完成。 –

+0

@GreggKellogg謝謝!當然你對'xsd:dateTime'說得對。我很難過聽到這個消息。如果你發表你的評論作爲答案,我會把它標記爲接受:) – vicvicvic

回答

3

我剛剛發現最新的JSON-LD規範在nested properties上新增了一節。定義你的背景下這應該導致所需的輸出:

{ 
    "@context": { 
     "title": "schema:name", 
     "meta": "@nest", 
     "publishedAt": { 
      "@type": "xsd:date", 
      "@id": "schema:datePublished", 
      "@nest": "meta" 
     } 
    }, 
    ... 
} 
+0

奇妙的消息!閱讀規範,你不需要在'@ context'中包含''meta':'@nest'嗎? – vicvicvic

+0

你是完全正確的。我更新了答案。 – cbst

2

如果你想要做的是吃元元素,那麼不,這不能在JSON-LD中完成。

已經有人討論過做一個可以做這種事情的逆向索引,但我沒有看到問題。您可以在https://github.com/json-ld/json-ld.org/issues創建一個。在某個時候,CG或新組建的工作組將開始查看新版本的功能請求。