2015-10-21 8 views
12

Ich würde gerne die expand und compact Methoden der jsonld.js Bibliothek verwenden, um Daten aus verschiedenen Quellen in ein gemeinsames Format für die Verarbeitung zu übersetzen. Wenn ich ein Quell-JSON-Dokument nehme, füge ein @context hinzu und übergebe es dann über die expand Methode, die ich in der Lage bin, das übliche Format zu bekommen, das ich brauche.Definieren Sie JSON-LD @context, um Werte zu verbinden/zu teilen?

Der Anwendungsfall, für den ich keine Lösung finden konnte, ist, wenn mehrere Werte zusammengeführt werden müssen. Zum Beispiel definiert schema.org ein PostalAddress mit einem einzelnen Feld für die streetAddress, aber viele Systeme speichern die Straßenadresse als separate Werte (Straßennummer, Straßenname, Straßenrichtung ...). Um die eingehenden Daten in das Schema.org-Format zu übersetzen, brauche ich eine Möglichkeit, in meiner @context, dass mehrere Felder bilden die streetAddress, in der richtigen Reihenfolge.

Verdichtete Dokument

{ 
    "@context": { 
     "displaName": "http://schema.org/name", 
     "website": "http://schema.org/homepage", 
     "icon": "http://schema.org/image", 
     "streetNumber": "http://schema.org/streetAddress" 
    }, 
    "displaName": "John Doe", 
    "website": "http://example.com/", 
    "icon": "http://example.com/images/test.png", 
    "streetNumber": "123", 
    "streetName": "Main St", 
    "streetDirection": "South" 
} 

Expanded Dokument

{ 
    "http://schema.org/name":[ 
     { 
     "@value":"John Doe" 
     } 
    ], 
    "http://schema.org/image":[ 
     { 
     "@value":"http://example.com/images/test.png" 
     } 
    ], 
    "http://schema.org/streetAddress":[ 
     { 
     "@value":"123" 
     } 
    ], 
    "http://schema.org/homepage":[ 
     { 
     "@value":"http://example.com/" 
     } 
    ] 
} 

Ich habe alle der JSON-LD-Spezifikationen überprüft, die ich finden konnte, und nicht in der Lage, etwas zu finden Dies zeigt eine Möglichkeit zum Teilen oder Verketten von Werten mit dem @context.

Kennt jemand eine Möglichkeit, mehrere Werte in einer Kontexteigenschaft in der richtigen Reihenfolge zuzuordnen und möglicherweise Leerzeichen zwischen den Werten hinzuzufügen. Ich muss auch eine Lösung für das umgekehrte Szenario finden, wo ich ein Feld in mehrere Werte in der richtigen Reihenfolge aufteilen muss.

Hinweis: Auch wenn ich alle drei Eigenschaften auf streetAddress abbilde, werden die Werte alle im Array enthalten, aber es gibt keine Garantie, dass sie in der richtigen Reihenfolge angezeigt werden.

Antwort

0

ich auf dem jsonld.js Github-Repository ein Problem geschrieben. Laut @dlongley, dem ursprünglichen Ersteller der jsonld.js-Bibliothek, ist es nicht möglich, Eigenschaften in diesem Modell zu manipulieren, indem Standard-JSON-LD verwendet wird.

https://github.com/digitalbazaar/jsonld.js/issues/115

3

Eine Möglichkeit, dies zu erreichen, besteht darin, für Ihre Adresse ein einzelnes Array-Feld zu verwenden, das die bestellten Adresskomponenten enthält (d. H. ["number", "direction", "name"]). Dann können Sie in der @context die address mit @container: @list angeben, die sicherstellen wird, dass die Adresskomponenten korrekt geordnet sind.

So würde das verdichtete Dokument sein: würde

{ 
    "@context": { 
     "displaName": "http://schema.org/name", 
     "website": "http://schema.org/homepage", 
     "icon": "http://schema.org/image", 
     "address": { 
      "@id": "http://schema.org/streetAddress", 
      "@container": "@list" 
     } 
    }, 
    "displaName": "John Doe", 
    "website": "http://example.com/", 
    "icon": "http://example.com/images/test.png", 
    "address": ["123", "South", "Main St"] 
} 

Und die erweiterte eine

sein
{ 
    "http://schema.org/streetAddress": [ 
     { 
     "@list": [ 
      { 
      "@value": "123" 
      }, 
      { 
      "@value": "South" 
      }, 
      { 
      "@value": "Main St" 
      } 
     ] 
     } 
    ], 
    "http://schema.org/name": [ 
     { 
     "@value": "John Doe" 
     } 
    ], 
    "http://schema.org/image": [ 
     { 
     "@value": "http://example.com/images/test.png" 
     } 
    ], 
    "http://schema.org/homepage": [ 
     { 
     "@value": "http://example.com/" 
     } 
    ] 
    } 
+0

danke für die antwort. Leider muss ich das Originaldokument in Takt halten. Der Zweck der Frage ist, einen Weg zu finden, die Übersetzung mit dem Kontext zu handhaben, vorausgesetzt, ich bin nicht derjenige, der die Eingabedaten liefert. –

+0

Ok, verstehe ich, Entschuldigung für das Missverständnis. Ich weiß es vielleicht anders, lass mich nachsehen. Obwohl die Felder intakt bleiben müssen, haben Sie die volle Kontrolle über den '@ Kontext'? – Val

+0

Ja. Ich versuche, eine Möglichkeit zu schaffen, Benutzern das Zuordnen von API-Ausgaben in ein gemeinsames Format zu ermöglichen.Ich verfüge bereits über eine funktionierende Benutzeroberfläche, um ein Eins-zu-Eins-Mapping zu ermöglichen, konnte aber aus der Dokumentation des json-ld-Prozessors nicht herauslesen, wie man Daten innerhalb des Quelldokuments manipulieren kann. –