Passa al contenuto principale

4. Data Model for Resource Properties (Modello di dati per le proprietà delle risorse)

4. Data Model for Resource Properties (Modello di dati per le proprietà delle risorse)

4.1 The Resource Property Model (Il modello di proprietà delle risorse)

Le proprietà sono pezzi di dati che descrivono lo stato di una risorsa. Le proprietà sono dati sui dati.

Le proprietà sono utilizzate negli ambienti di authoring distribuito per fornire una scoperta e gestione efficiente delle risorse. Ad esempio, una proprietà 'subject' potrebbe consentire l'indicizzazione di tutte le risorse per argomento, e una proprietà 'author' potrebbe consentire di scoprire quali autori hanno scritto quali documenti.

Il modello di proprietà DAV consiste in coppie nome/valore. Il nome di una proprietà identifica la sintassi e la semantica della proprietà e fornisce un indirizzo mediante il quale fare riferimento alla sua sintassi e semantica.

Esistono due categorie di proprietà: "live" e "dead". Una proprietà live ha la sua sintassi e semantica imposte dal server. Le proprietà live includono i casi in cui a) il valore di una proprietà è protetto e mantenuto dal server, e b) il valore della proprietà è mantenuto dal client, ma il server esegue il controllo della sintassi sui valori inviati. Tutte le istanze di una data proprietà live DEVONO conformarsi alla definizione associata a quel nome di proprietà. Una proprietà dead ha la sua sintassi e semantica imposte dal client; il server registra semplicemente il valore della proprietà testualmente.

4.2 Properties and HTTP Headers (Proprietà e intestazioni HTTP)

Le proprietà esistono già, in senso limitato, nelle intestazioni dei messaggi HTTP. Tuttavia, negli ambienti di authoring distribuito, è necessario un numero relativamente grande di proprietà per descrivere lo stato di una risorsa, e impostarle/restituirle tutte tramite intestazioni HTTP è inefficiente. Pertanto, è necessario un meccanismo che consenta a un principal di identificare un insieme di proprietà a cui è interessato e di impostare o recuperare solo quelle proprietà.

4.3 Property Values (Valori delle proprietà)

Il valore di una proprietà è sempre un frammento XML ben formato.

XML è stato scelto perché è un formato di dati strutturato flessibile e auto-descrittivo che supporta ricche definizioni di schema e per il suo supporto per più set di caratteri. La natura auto-descrittiva di XML consente di estendere il valore di qualsiasi proprietà aggiungendo elementi. I client non si interromperanno quando incontrano estensioni perché avranno ancora i dati specificati nello schema originale e DEVONO ignorare gli elementi che non comprendono.

Il supporto di XML per più set di caratteri consente a qualsiasi proprietà leggibile dall'uomo di essere codificata e letta in un set di caratteri familiare all'utente. Il supporto di XML per più lingue umane, utilizzando l'attributo "xml:lang", gestisce i casi in cui lo stesso set di caratteri è impiegato da più lingue umane. Si noti che l'ambito xml:lang è ricorsivo, quindi un attributo xml:lang su qualsiasi elemento contenente un elemento nome di proprietà si applica al valore della proprietà a meno che non sia stato sovrascritto da un attributo con ambito più locale. Si noti che una proprietà ha solo un valore, in una lingua (o la lingua PUÒ essere lasciata non definita); una proprietà non ha più valori in lingue diverse o un singolo valore in più lingue.

Una proprietà è sempre rappresentata con un elemento XML costituito dal nome della proprietà, chiamato "property name element". L'esempio più semplice è una proprietà vuota, che è diversa da una proprietà che non esiste:

<R:title xmlns:R="http://www.example.com/ns/"><R:title>

Il valore della proprietà appare all'interno dell'elemento nome di proprietà. Il valore può essere qualsiasi tipo di contenuto XML ben formato, incluso contenuto solo testo e contenuto misto. I server DEVONO preservare i seguenti XML Information Items (utilizzando la terminologia da [REC-XML-INFOSET]) nell'archiviazione e trasmissione delle proprietà dead:

Per l'Element Information Item del nome di proprietà stesso:

  • [namespace name]
  • [local name]
  • [attributes] denominati "xml:lang" o qualsiasi tale attributo nell'ambito
  • [children] di tipo element o character

Su tutti gli Element Information Items nel valore della proprietà:

  • [namespace name]
  • [local name]
  • [attributes]
  • [children] di tipo element o character

Sugli Attribute Information Items nel valore della proprietà:

  • [namespace name]
  • [local name]
  • [normalized value]

Sui Character Information Items nel valore della proprietà:

  • [character code]

Poiché i prefissi sono utilizzati in alcuni vocabolari XML (XPath e XML Schema, ad esempio), i server DOVREBBERO preservare, per qualsiasi Information Item nel valore:

  • [prefix]

Gli attributi XML Infoset non elencati sopra POSSONO essere preservati dal server, ma i client NON DEVONO fare affidamento sulla loro preservazione. Le regole sopra si applicherebbero anche per impostazione predefinita alle proprietà live, salvo diversa definizione.

I server DEVONO ignorare l'attributo XML xml:space se presente e non utilizzarlo mai per modificare la gestione degli spazi bianchi. Gli spazi bianchi nei valori delle proprietà sono significativi.

4.3.1 Esempio - Proprietà con contenuto misto

Consideriamo una proprietà dead 'author' creata dal client come segue:

<D:prop xml:lang="en" xmlns:D="DAV:">
<x:author xmlns:x='http://example.com/ns'>
<x:name>Jane Doe<x:name>
<!-- Jane's contact info -->
&lt;x:uri type='email'
added='2005-11-26'>mailto:[email protected]&lt;x:uri>
&lt;x:uri type='web'
added='2005-11-27'>http://www.example.com&lt;x:uri>
&lt;x:notes xmlns:h='http://www.w3.org/1999/xhtml'>
Jane has been working way &lt;h:em>too&lt;h:em> long on the
long-awaited revision of <![CDATA[&lt;RFC2518>]]>.
&lt;x:notes>
&lt;x:author>
&lt;D:prop>

Quando questa proprietà viene richiesta, un server potrebbe restituire:

&lt;D:prop xmlns:D='DAV:'>&lt;author
xml:lang='en'
xmlns:x='http://example.com/ns'
xmlns='http://example.com/ns'
xmlns:h='http://www.w3.org/1999/xhtml'>
&lt;x:name>Jane Doe&lt;x:name>
&lt;x:uri added="2005-11-26" type="email"
>mailto:[email protected]&lt;x:uri>
&lt;x:uri added="2005-11-27" type="web"
>http://www.example.com&lt;x:uri>
&lt;x:notes>
Jane has been working way &lt;h:em>too&lt;h:em> long on the
long-awaited revision of &lt;RFC2518&gt;.
&lt;x:notes>
&lt;/author>
&lt;D:prop>

Notare in questo esempio:

  • Il [prefix] per il nome della proprietà stessa non è stato preservato, essendo non significativo, mentre tutti gli altri valori [prefix] sono stati preservati,
  • i valori degli attributi sono stati riscritti con virgolette doppie invece di virgolette singole (lo stile delle virgolette non è significativo), e l'ordine degli attributi non è stato preservato,
  • l'attributo xml:lang è stato restituito sull'elemento nome di proprietà stesso (era nell'ambito quando la proprietà è stata impostata, ma la posizione esatta nella risposta non è considerata significativa finché è nell'ambito),
  • gli spazi bianchi tra i tag sono stati preservati ovunque (non così gli spazi bianchi tra gli attributi),
  • l'incapsulamento CDATA è stato sostituito con l'escaping dei caratteri (anche il contrario sarebbe legale),
  • l'elemento commento è stato rimosso (così come sarebbe stato un elemento di istruzione di elaborazione).

Nota di implementazione: ci sono casi come scenari di modifica in cui i client potrebbero richiedere che il contenuto XML sia preservato carattere per carattere (come l'ordine degli attributi o lo stile delle virgolette). In questo caso, i client dovrebbero considerare l'utilizzo di un valore di proprietà solo testo eseguendo l'escape di tutti i caratteri che hanno un significato speciale nell'analisi XML.

4.4 Property Names (Nomi delle proprietà)

Un nome di proprietà è un identificatore universalmente unico che è associato a uno schema che fornisce informazioni sulla sintassi e la semantica della proprietà.

Poiché il nome di una proprietà è universalmente unico, i client possono dipendere da un comportamento coerente per una particolare proprietà su più risorse, sullo stesso server e su server diversi, a condizione che quella proprietà sia "live" sulle risorse in questione e che l'implementazione della proprietà live sia fedele alla sua definizione.

Il meccanismo dello spazio dei nomi XML, che si basa sugli URI ([RFC3986]), viene utilizzato per nominare le proprietà perché previene collisioni dello spazio dei nomi e fornisce vari gradi di controllo amministrativo.

Lo spazio dei nomi delle proprietà è piatto; cioè, nessuna gerarchia di proprietà è esplicitamente riconosciuta. Pertanto, se una proprietà A e una proprietà A/B esistono su una risorsa, non c'è riconoscimento di alcuna relazione tra le due proprietà. Ci si aspetta che venga eventualmente prodotta una specifica separata che affronterà questioni relative alle proprietà gerarchiche.

Infine, non è possibile definire la stessa proprietà due volte su una singola risorsa, poiché ciò causerebbe una collisione nello spazio dei nomi delle proprietà della risorsa.

4.5 Source Resources and Output Resources (Risorse sorgente e risorse di output)

Alcune risorse HTTP sono generate dinamicamente dal server. Per queste risorse, presumibilmente esiste da qualche parte un codice sorgente che regola come quella risorsa viene generata. La relazione tra i file sorgente e le risorse HTTP di output può essere uno a uno, uno a molti, molti a uno o molti a molti. Non esiste alcun meccanismo in HTTP per determinare se una risorsa è persino dinamica, tantomeno dove esistono i suoi file sorgente o come crearli. Sebbene questo problema sarebbe utilmente risolto, implementazioni WebDAV interoperabili sono state ampiamente distribuite senza risolvere effettivamente questo problema, occupandosi solo di risorse statiche. Pertanto, il problema sorgente vs. output non è risolto in questa specifica ed è stato rinviato a un documento separato.