2015-10-21 38 views
12

Desidero utilizzare i metodi expand e compact della libreria jsonld.js per convertire dati da varie origini in un formato comune per l'elaborazione. Se prendo un documento JSON di origine, aggiungo uno @context a esso, quindi lo passo attraverso il metodo expand Sono in grado di ottenere il formato comune di cui ho bisogno.Definire JSON-LD @context per unire/dividere valori?

Il caso d'uso per il quale non sono stato in grado di trovare una soluzione è quando è necessario unire più valori. Ad esempio, schema.org definisce un PostalAddress con un singolo campo per lo streetAddress, ma molti sistemi memorizzano l'indirizzo come valori separati (numero civico, nome della via, direzione della strada ...). Per tradurre i dati in arrivo nel formato schema.org ho bisogno di un modo per indicare nel mio @context che più campi compongono il streetAddress, nell'ordine corretto.

Compacted Documento

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

Documento Expanded

{ 
    "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/" 
     } 
    ] 
} 

ho rivisto tutte le specifiche JSON-LD che ho potuto trovare e non sono stati in grado di individuare qualsiasi cosa che indica un modo per dividere o concatenare valori usando @context.

Qualcuno è a conoscenza di un modo per mappare più valori in una proprietà di contesto, nell'ordine corretto ed eventualmente aggiungere spazi bianchi tra i valori. Devo anche trovare una soluzione per lo scenario inverso, in cui ho bisogno di dividere un campo in più valori, nell'ordine corretto.

Nota: anche se mappo tutte e tre le proprietà su streetAddress, tutti i valori verranno inclusi nell'array, ma non è garantito che siano nell'ordine corretto.

risposta

0

ho postato un problema sul jsonld.js Github repository. Secondo @dlongley, il creatore originale della libreria jsonld.js, non è possibile manipolare le proprietà in questo maniero, usando JSON-LD standard.

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

3

Un possibile modo per ottenere ciò è utilizzare un campo di array singolo per il proprio indirizzo contenente i componenti di indirizzo ordinati (ad esempio ["number", "direction", "name"]). Quindi nello @context è possibile specificare address con @container: @list, che garantirà che i componenti dell'indirizzo siano ordinati correttamente.

Quindi il documento compattato sarebbe:

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

E quello sarebbe espansa

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

grazie per la risposta. Purtroppo ho bisogno di mantenere intatto il documento originale. Lo scopo della domanda è trovare un modo per gestire la traduzione utilizzando il contesto, supponendo che io non sia quello che fornisce i dati di input. –

+0

Ok, capisco, mi dispiace per l'incomprensione. Potrei sapere in un altro modo, fammi controllare. Anche se i campi devono essere lasciati intatti, hai il pieno controllo su '@ context'? – Val

+0

Sì. Sto cercando di creare un modo per consentire agli utenti di mappare le uscite API in un formato comune.Ho già un'interfaccia utente funzionante per consentire una mappatura uno a uno, ma non sono stato in grado di capire dalla documentazione del processore json-ld come manipolare i dati all'interno del documento sorgente, oltre a mappare le chiavi al loro rispettivo vocabolario. –