2015-01-26 17 views
9

Ho visto CURIE descritti nello HAL specification. A prima vista, sembra un modo per fornire i template per gli URI. Tuttavia, ho anche notato che può essere utilizzato per accedere alla documentazione su un rel. Qual é? È semplicemente un meccanismo dei modelli? Qualcuno ha un esempio per un buon caso d'uso?Qualcuno può fornire una buona spiegazione dei CURIE e come usarli?

Inoltre, il seguente è un uso legale di un CURIE? O dovrebbe essere usato solo per fornire documentazione su un rel?

{ 
     "id": 1, 
     "name": "Social Media Bundle", 
     "_links": { 
      "self": { 
       "href": "http://my.api.com/bundles/1" 
      }, 
      "curies": { 
       "name": "bundle", 
       "href": "http://my.api.com/bundles/1{rel}" 
       "templated": true 
      }, 
      "bundle:channels": { 
       "href": "/channels" 
      } 
     } 
    } 

Qui bundle:channels sarebbe esteso a http://my.api.com/bundles/1/channels.

risposta

6

Secondo pagina 7 del HAL spec, curie sono un mezzo suggerito da cui collegare la documentazione di una data risorsa:

tipi di collegamento relazioni con clienti (tipi di relazione di estensione in [RFC5988])
dovrebbe essere URI che, quando sottoposti a dereferenziazione in un browser Web forniscono la documentazione pertinente
, sotto forma di pagina HTML, sul significato e/o sul comportamento della risorsa di destinazione
. Ciò migliorerà
la rilevabilità dell'API.

La sintassi CURIE [W3C.NOTE-curie-20101216] PU be essere utilizzata per brevità per questi URI. I CURIE vengono stabiliti all'interno di un documento HAL tramite un set di oggetti di collegamento con il tipo di relazione "curies" nella radice
Oggetto di risorsa. Questi collegamenti contengono un modello URI con il token
"rel" e sono denominati tramite la proprietà "nome".

{ 
    "_links": { 
    "self": { "href": "/orders" }, 
    "curies": [{ 
     "name": "acme", 
     "href": "http://docs.acme.com/relations/{rel}", 
     "templated": true 
    }], 
    "acme:widgets": { "href": "/widgets" } 
    } 
} 

Quanto sopra dimostra il rapporto "http://docs.acme.com/relations/ widget" essere abbreviati per "Acme: widget" tramite la sintassi Curie.

La stessa CURIE spec, non ha nulla di specificamente a che fare con le risorse che documentano ed è progettato per consentire URI compatte.

Per rispondere alla tua domanda, la mia interpretazione delle specifiche suggerirebbe che hai usato legittimamente la sintassi di curie ma non nel contesto di HAL.

+0

in modo che appaia come se fossero di non essere utilizzati per template in generale, il che significa che l'esempio che ho dato nella mia domanda sarebbe valido in base alle specifiche HAL, corretta ? Cioè, anche se quello che ho è un CURIE legittimo, non è usato legittimamente nel contesto di HAL. –

+2

non modellano l'href del collegamento, modellano l'URL del rel. con ciò che hai in bundle: i canali sarebbero dereferenziati a http://my.api.com/bundles/1channels [sic] per illustrare meglio dal momento che hai usato molto le stesse stringhe di caratteri ... bundle: il cane avrebbe dereferenziato a http : //my.api.com/bundles/1dog L'href di uno di questi collegamenti è SOLO definito dal campo href ... nel tuo esempio tecnicamente/i canali sarebbero ambigui in quanto HAL non definisce l'URL di base per il quale gli URL relativi sono calcolati ... ma in genere dovrebbero essere considerati come http://my.api.com/channels –

1

A CURIE è un sostituto di QName in lingue non XML che fornisce funzionalità di namespacing per descrivere le relazioni URL utilizzando stenografia basata su mappature prefisso/suffisso in dati semantici (RDFa, JSON-LD, YAML, ecc.) Senza fare affidamento su spazi dei nomi XML.

Il Web semantico lo specifica tramite Documenti di Vocabolario, in cui un prefisso è associato a un documento e un suffisso viene utilizzato per creare un IRI basato su questo vocabolario. Ad esempio, l'IRI http://xmlns.com/foaf/0.1/ specifica un documento del vocabolario e il nome è un termine in quel vocabolario. Unisci i due elementi insieme e hai un identificatore univoco per un termine di vocabolario. L'espressione URI compatta, o forma abbreviata, è foaf: name e il modulo espanso è http://xmlns.com/foaf/0.1/name. Questo termine di vocabolario identifica il nome dato per qualcosa, ad esempio il nome di una persona.

Ad esempio:

Se in RDF voglio utilizzare la proprietà creatore Dublin Core, quindi tutto quello che ho bisogno di fare è questo:

dc:creator 

ea condizione che Ho il prefisso del namespace dc definito come http://purl.org/dc/elements/1.1/, ho effettivamente rappresentato il seguente URI:

In HTML sarebbe simile a questa:

<div prefix="dc:http://purl.org/DC/elements/1.0"> 
<a property="dc:creator" href="http://example.com">IANA</a> 
</div> 

Riferimenti