2016-08-10 5 views
2

Angenommen, ich habe ein JSON-Objekt mit einigen Eigenschaften in einem verschachtelten Objekt.Verschachtelte Strukturen/Werte in JSON-LD notieren

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

Gibt es eine einfache Art und Weise kann ich nur ein @context mein Top-Level-Objekt hinzufügen diese Eigenschaften zu erreichen (das heißt nur „passieren“ Meta-Objekt)? Etwas entlang diese Linien:

{ 
    "@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" 
    } 
} 

Ich möchte zu vermeiden, hinzufügen (duplicate) @id an das verschachtelte Objekt, das ist, wie ich es sonst gelöst haben:

{ 
    "@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" 
    } 
} 

Diese Lösung funktioniert, erfordert aber die Duplizierung und kommt von ethanresnick's comments on Github über das Kommentieren von JSON API. Er notierte in another issue, dass @context nicht "ziemlich ausdrucksvoll genug ist, um die JSON-API-Struktur mit Anmerkungen zu versehen". Ich hatte gehofft, dass er zumindest in dieser Angelegenheit falsch liegen könnte.

+0

Wenn Sie einfach die 'publishedAt' Begriff definiert wird es für alle Instanzen arbeiten (aber, Sie wollen wahrscheinlich' xsd: dateTime', nicht 'xsd: date '). –

+0

Wenn Sie versuchen, das Element "meta" zu essen, dann können Sie dies nicht in JSON-LD tun. –

+0

@GreggKellogg Vielen Dank! Sie haben natürlich Recht mit 'xsd: dateTime'. Ich bin traurig, das zu hören. Wenn du deinen Kommentar als Antwort postest, würde ich das als akzeptiert markieren :) – vicvicvic

Antwort

3

Ich habe gerade festgestellt, dass die neueste JSON-LD-Spezifikation einen neuen Abschnitt nested properties enthält. Definieren Sie Ihren Kontext wie diese sollten in der gewünschten Ausgabe führen:

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

Fantastische Neuigkeiten! Wenn Sie die Spezifikation lesen, müssen Sie nicht "" meta ":" @nest "' in '@ context' einfügen? – vicvicvic

+0

Sie sind völlig richtig. Ich habe die Antwort aktualisiert. – cbst

2

Wenn Sie versuchen, das Meta-Element zu essen, dann nein, das kann nicht in JSON-LD getan werden.

Es gab Diskussionen über einen inversen Index, der so etwas tun könnte, aber ich sehe kein Problem. Sie könnten einen unter https://github.com/json-ld/json-ld.org/issues erstellen. Irgendwann wird der CG oder eine neu gebildete WG anfangen, Feature-Anfragen für eine neue Version zu betrachten.

Verwandte Themen