Passa al contenuto principale

15. DAV Properties (Proprietà DAV)

15. DAV Properties (Proprietà DAV)

Per le proprietà DAV, il nome della proprietà è anche lo stesso del nome dell'elemento XML che contiene il suo valore. Nella sezione seguente, l'ultima riga di ciascuna sezione fornisce la dichiarazione del tipo di elemento utilizzando il formato definito in [REC-XML]. Il campo "Value", quando presente, specifica ulteriori restrizioni sul contenuto consentito dell'elemento XML utilizzando BNF (cioè, per restringere ulteriormente i valori di un elemento PCDATA).

Una proprietà protetta è una proprietà che non può essere modificata con una richiesta PROPPATCH. Potrebbero esserci altre richieste che comporterebbero una modifica di una proprietà protetta (come quando una richiesta LOCK influisce sul valore di DAV:lockdiscovery). Si noti che una determinata proprietà potrebbe essere protetta su un tipo di risorsa, ma non protetta su un altro tipo di risorsa.

Una proprietà calcolata è una proprietà con un valore definito in termini di calcolo (basato sul contenuto e altre proprietà di quella risorsa, o anche di un'altra risorsa). Una proprietà calcolata è sempre una proprietà protetta.

Il comportamento COPY e MOVE si riferisce alle operazioni COPY e MOVE locali.

Per le proprietà definite in base alle intestazioni di risposta HTTP GET (DAV:get*), il valore dell'intestazione potrebbe includere LWS come definito in [RFC2616], Sezione 4.2. Gli implementatori del server DOVREBBERO rimuovere LWS da questi valori prima di utilizzarli come valori di proprietà WebDAV.

15.1. creationdate Property (Proprietà creationdate)

Nome (Name): creationdate

Scopo (Purpose): Registra l'ora e la data di creazione della risorsa.

Valore (Value): date-time (definito in [RFC3339], vedere l'ABNF nella Sezione 5.6.)

Protetto (Protected): PUÒ essere protetto. Alcuni server consentono di modificare DAV:creationdate per riflettere l'ora in cui il documento è stato creato se ciò è più significativo per l'utente (piuttosto che l'ora in cui è stato caricato). Pertanto, i client NON DOVREBBERO utilizzare questa proprietà nella logica di sincronizzazione (utilizzare invece DAV:getetag).

Comportamento COPY/MOVE: Questo valore di proprietà DOVREBBE essere mantenuto durante un'operazione MOVE, ma normalmente viene reinizializzato quando una risorsa viene creata con un COPY. Non dovrebbe essere impostato in un COPY.

Descrizione (Description): La proprietà DAV:creationdate DOVREBBE essere definita su tutte le risorse conformi a DAV. Se presente, contiene un timestamp del momento in cui la risorsa è stata creata. I server che non sono in grado di registrare in modo permanente la data di creazione DOVREBBERO invece lasciarla non definita (cioè riportare "Not Found").

<!ELEMENT creationdate (#PCDATA) >

15.2. displayname Property (Proprietà displayname)

Nome (Name): displayname

Scopo (Purpose): Fornisce un nome per la risorsa adatto alla presentazione a un utente.

Valore (Value): Qualsiasi testo.

Protetto (Protected): NON DOVREBBE essere protetto. Si noti che i server che implementano [RFC2518] potrebbero aver reso questa una proprietà protetta poiché si tratta di un nuovo requisito.

Comportamento COPY/MOVE: Questo valore di proprietà DOVREBBE essere preservato nelle operazioni COPY e MOVE.

Descrizione (Description): Contiene una descrizione della risorsa adatta alla presentazione a un utente. Questa proprietà è definita sulla risorsa e quindi DOVREBBE avere lo stesso valore indipendentemente dal Request-URI utilizzato per recuperarla (quindi, calcolare questa proprietà in base al Request-URI è deprecato). Mentre i client generici potrebbero visualizzare il valore della proprietà agli utenti finali, i progettisti dell'interfaccia utente del client devono comprendere che il metodo per identificare le risorse è ancora l'URL. Le modifiche a DAV:displayname non emettono spostamenti o copie al server, ma semplicemente modificano un pezzo di metadati sulla singola risorsa. Due risorse possono avere lo stesso valore DAV:displayname anche all'interno della stessa collezione.

<!ELEMENT displayname (#PCDATA) >

15.3. getcontentlanguage Property (Proprietà getcontentlanguage)

Nome (Name): getcontentlanguage

Scopo (Purpose): Contiene il valore dell'intestazione Content-Language (dalla Sezione 14.12 di [RFC2616]) come verrebbe restituito da un GET senza intestazioni di accettazione.

Valore (Value): language-tag (language-tag è definito nella Sezione 3.10 di [RFC2616])

Protetto (Protected): NON DOVREBBE essere protetto, in modo che i client possano reimpostare la lingua. Si noti che i server che implementano [RFC2518] potrebbero aver reso questa una proprietà protetta poiché si tratta di un nuovo requisito.

Comportamento COPY/MOVE: Questo valore di proprietà DOVREBBE essere preservato nelle operazioni COPY e MOVE.

Descrizione (Description): La proprietà DAV:getcontentlanguage DEVE essere definita su qualsiasi risorsa conforme a DAV che restituisce l'intestazione Content-Language su un GET.

<!ELEMENT getcontentlanguage (#PCDATA) >

15.4. getcontentlength Property (Proprietà getcontentlength)

Nome (Name): getcontentlength

Scopo (Purpose): Contiene l'intestazione Content-Length restituita da un GET senza intestazioni di accettazione.

Valore (Value): Vedere la Sezione 14.13 di [RFC2616].

Protetto (Protected): Questa proprietà è calcolata, quindi protetta.

Descrizione (Description): La proprietà DAV:getcontentlength DEVE essere definita su qualsiasi risorsa conforme a DAV che restituisce l'intestazione Content-Length in risposta a un GET.

Comportamento COPY/MOVE: Questo valore di proprietà dipende dalla dimensione della risorsa di destinazione, non dal valore della proprietà sulla risorsa di origine.

<!ELEMENT getcontentlength (#PCDATA) >

15.5. getcontenttype Property (Proprietà getcontenttype)

Nome (Name): getcontenttype

Scopo (Purpose): Contiene il valore dell'intestazione Content-Type (dalla Sezione 14.17 di [RFC2616]) come verrebbe restituito da un GET senza intestazioni di accettazione.

Valore (Value): media-type (definito nella Sezione 3.7 di [RFC2616])

Protetto (Protected): Potenzialmente protetto se il server preferisce assegnare i tipi di contenuto da solo (vedere anche la discussione nella Sezione 9.7.1).

Comportamento COPY/MOVE: Questo valore di proprietà DOVREBBE essere preservato nelle operazioni COPY e MOVE.

Descrizione (Description): Questa proprietà DEVE essere definita su qualsiasi risorsa conforme a DAV che restituisce l'intestazione Content-Type in risposta a un GET.

<!ELEMENT getcontenttype (#PCDATA) >

15.6. getetag Property (Proprietà getetag)

Nome (Name): getetag

Scopo (Purpose): Contiene il valore dell'intestazione ETag (dalla Sezione 14.19 di [RFC2616]) come verrebbe restituito da un GET senza intestazioni di accettazione.

Valore (Value): entity-tag (definito nella Sezione 3.11 di [RFC2616])

Protetto (Protected): DEVE essere protetto perché questo valore è creato e controllato dal server.

Comportamento COPY/MOVE: Questo valore di proprietà dipende dallo stato finale della risorsa di destinazione, non dal valore della proprietà sulla risorsa di origine. Si notino anche le considerazioni nella Sezione 8.8.

Descrizione (Description): La proprietà getetag DEVE essere definita su qualsiasi risorsa conforme a DAV che restituisce l'intestazione Etag. Fare riferimento alla Sezione 3.11 di RFC 2616 per una definizione completa della semantica di un ETag e alla Sezione 8.6 per una discussione degli ETag in WebDAV.

<!ELEMENT getetag (#PCDATA) >

15.7. getlastmodified Property (Proprietà getlastmodified)

Nome (Name): getlastmodified

Scopo (Purpose): Contiene il valore dell'intestazione Last-Modified (dalla Sezione 14.29 di [RFC2616]) come verrebbe restituito da un metodo GET senza intestazioni di accettazione.

Valore (Value): rfc1123-date (definito nella Sezione 3.3.1 di [RFC2616])

Protetto (Protected): DOVREBBE essere protetto perché alcuni client potrebbero fare affidamento sul valore per un comportamento di caching appropriato, o sul valore dell'intestazione Last-Modified a cui questa proprietà è collegata.

Comportamento COPY/MOVE: Questo valore di proprietà dipende dalla data dell'ultima modifica della risorsa di destinazione, non dal valore della proprietà sulla risorsa di origine. Si noti che alcune implementazioni del server utilizzano il valore della data di modifica del file system per il valore DAV:getlastmodified e questo può essere preservato in un MOVE anche quando il valore HTTP Last-Modified DOVREBBE cambiare. Si noti che poiché [RFC2616] richiede ai client di utilizzare gli ETag quando forniti, un server che implementa gli ETag può contare sui client che utilizzano un meccanismo molto migliore delle date di modifica per la sincronizzazione offline o il controllo della cache. Si notino anche le considerazioni nella Sezione 8.8.

Descrizione (Description): La data dell'ultima modifica su una risorsa DOVREBBE riflettere solo le modifiche nel corpo (le risposte GET) della risorsa. Una modifica solo in una proprietà NON DOVREBBE causare la modifica della data dell'ultima modifica, perché i client POTREBBERO fare affidamento sulla data dell'ultima modifica per sapere quando sovrascrivere il corpo esistente. La proprietà DAV:getlastmodified DEVE essere definita su qualsiasi risorsa conforme a DAV che restituisce l'intestazione Last-Modified in risposta a un GET.

<!ELEMENT getlastmodified (#PCDATA) >

15.8. lockdiscovery Property (Proprietà lockdiscovery)

Nome (Name): lockdiscovery

Scopo (Purpose): Descrive i blocchi attivi su una risorsa

Protetto (Protected): DEVE essere protetto. I client modificano l'elenco dei blocchi tramite LOCK e UNLOCK, non tramite PROPPATCH.

Comportamento COPY/MOVE: Il valore di questa proprietà dipende dallo stato di blocco della destinazione, non dai blocchi della risorsa di origine. Ricordare che i blocchi non vengono spostati in un'operazione MOVE.

Descrizione (Description): Restituisce un elenco di chi ha un blocco, che tipo di blocco ha, il tipo di timeout e il tempo rimanente sul timeout e il token di blocco associato. Le informazioni sul proprietario POSSONO essere omesse se considerate sensibili. Se non ci sono blocchi, ma il server supporta i blocchi, la proprietà sarà presente ma conterrà zero elementi 'activelock'. Se ci sono uno o più blocchi, appare un elemento 'activelock' per ogni blocco sulla risorsa. Questa proprietà NON è bloccabile rispetto ai blocchi di scrittura (Sezione 7).

<!ELEMENT lockdiscovery (activelock)* >

15.8.1. Esempio - Recupero di DAV:lockdiscovery

Richiesta (Request):

PROPFIND /container/ HTTP/1.1
Host: www.example.com
Content-Length: xxxx
Content-Type: application/xml; charset="utf-8"

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D='DAV:'>
<D:prop><D:lockdiscovery/></D:prop>
</D:propfind>

Risposta (Response):

HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx

<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D='DAV:'>
<D:response>
<D:href>http://www.example.com/container/</D:href>
<D:propstat>
<D:prop>
<D:lockdiscovery>
<D:activelock>
<D:locktype><D:write/></D:locktype>
<D:lockscope><D:exclusive/></D:lockscope>
<D:depth>0</D:depth>
<D:owner>Jane Smith</D:owner>
<D:timeout>Infinite</D:timeout>
<D:locktoken>
<D:href
>urn:uuid:f81de2ad-7f3d-a1b2-4f3c-00a0c91a9d76</D:href>
</D:locktoken>
<D:lockroot>
<D:href>http://www.example.com/container/</D:href>
</D:lockroot>
</D:activelock>
</D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>

Questa risorsa ha un singolo blocco di scrittura esclusivo su di essa, con un timeout infinito.

15.9. resourcetype Property (Proprietà resourcetype)

Nome (Name): resourcetype

Scopo (Purpose): Specifica la natura della risorsa.

Protetto (Protected): DOVREBBE essere protetto. Il tipo di risorsa è generalmente deciso attraverso l'operazione che crea la risorsa (MKCOL vs PUT), non da PROPPATCH.

Comportamento COPY/MOVE: Generalmente un COPY/MOVE di una risorsa risulta nello stesso tipo di risorsa alla destinazione.

Descrizione (Description): DEVE essere definito su tutte le risorse conformi a DAV. Ogni elemento figlio identifica un tipo specifico a cui appartiene la risorsa, come 'collection', che è l'unico tipo di risorsa definito da questa specifica (vedere la Sezione 14.3). Se l'elemento contiene l'elemento figlio 'collection' più elementi aggiuntivi non riconosciuti, dovrebbe generalmente essere trattato come una collezione. Se l'elemento non contiene elementi figlio riconosciuti, dovrebbe essere trattato come una risorsa non-collezione. Il valore predefinito è vuoto. Questo elemento NON DEVE contenere testo o contenuto misto. Qualsiasi elemento figlio personalizzato è considerato un identificatore per un tipo di risorsa.

Esempio: (esempio fittizio per mostrare l'estensibilità)

<x:resourcetype xmlns:x="DAV:">
<x:collection/>
<f:search-results xmlns:f="http://www.example.com/ns"/>
</x:resourcetype>

15.10. supportedlock Property (Proprietà supportedlock)

Nome (Name): supportedlock

Scopo (Purpose): Fornire un elenco delle capacità di blocco supportate dalla risorsa.

Protetto (Protected): DEVE essere protetto. I server, non i client, determinano quali meccanismi di blocco sono supportati.

Comportamento COPY/MOVE: Questo valore di proprietà dipende dal tipo di blocchi supportati alla destinazione, non dal valore della proprietà sulla risorsa di origine. I server che tentano di COPIARE in una destinazione non dovrebbero tentare di impostare questa proprietà alla destinazione.

Descrizione (Description): Restituisce un elenco delle combinazioni di ambito e tipi di accesso che possono essere specificate in una richiesta di blocco sulla risorsa. Si noti che i contenuti effettivi sono essi stessi controllati dai controlli di accesso, quindi un server non è tenuto a fornire informazioni che il client non è autorizzato a vedere. Questa proprietà NON è bloccabile rispetto ai blocchi di scrittura (Sezione 7).

<!ELEMENT supportedlock (lockentry)* >

15.10.1. Esempio - Recupero di DAV:supportedlock

Richiesta (Request):

PROPFIND /container/ HTTP/1.1
Host: www.example.com
Content-Length: xxxx
Content-Type: application/xml; charset="utf-8"

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
<D:prop><D:supportedlock/></D:prop>
</D:propfind>

Risposta (Response):

HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx

<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>http://www.example.com/container/</D:href>
<D:propstat>
<D:prop>
<D:supportedlock>
<D:lockentry>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope><D:shared/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
</D:supportedlock>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>