15. DAV Properties (DAV-Eigenschaften)
15. DAV Properties (DAV-Eigenschaften)
Bei DAV-Eigenschaften ist der Name der Eigenschaft auch derselbe wie der Name des XML-Elements, das ihren Wert enthält. Im folgenden Abschnitt gibt die letzte Zeile jedes Abschnitts die Elementtypdeklaration unter Verwendung des in [REC-XML] definierten Formats an. Das Feld "Value", falls vorhanden, spezifiziert weitere Einschränkungen für den zulässigen Inhalt des XML-Elements unter Verwendung von BNF (d.h. um die Werte eines PCDATA-Elements weiter einzuschränken).
Eine geschützte Eigenschaft ist eine Eigenschaft, die nicht mit einer PROPPATCH-Anfrage geändert werden kann. Es kann andere Anfragen geben, die zu einer Änderung einer geschützten Eigenschaft führen würden (wie wenn eine LOCK-Anfrage den Wert von DAV:lockdiscovery beeinflusst). Beachten Sie, dass eine bestimmte Eigenschaft bei einem Ressourcentyp geschützt sein könnte, aber bei einem anderen Ressourcentyp nicht geschützt ist.
Eine berechnete Eigenschaft ist eine Eigenschaft mit einem Wert, der in Bezug auf eine Berechnung definiert ist (basierend auf dem Inhalt und anderen Eigenschaften dieser Ressource oder sogar einer anderen Ressource). Eine berechnete Eigenschaft ist immer eine geschützte Eigenschaft.
Das COPY- und MOVE-Verhalten bezieht sich auf lokale COPY- und MOVE-Operationen.
Für Eigenschaften, die auf HTTP GET-Antwort-Headern basieren (DAV:get*), könnte der Header-Wert LWS enthalten, wie in [RFC2616], Abschnitt 4.2 definiert. Server-Implementierer SOLLTEN LWS aus diesen Werten entfernen, bevor sie als WebDAV-Eigenschaftswerte verwendet werden.
15.1. creationdate Property (creationdate-Eigenschaft)
Name: creationdate
Zweck (Purpose): Zeichnet die Zeit und das Datum auf, zu dem die Ressource erstellt wurde.
Wert (Value): date-time (definiert in [RFC3339], siehe die ABNF in Abschnitt 5.6.)
Geschützt (Protected): KANN geschützt sein. Einige Server erlauben die Änderung von DAV:creationdate, um die Zeit widerzuspiegeln, zu der das Dokument erstellt wurde, wenn dies für den Benutzer bedeutungsvoller ist (anstatt der Zeit, zu der es hochgeladen wurde). Daher SOLLTEN Clients diese Eigenschaft NICHT in der Synchronisationslogik verwenden (verwenden Sie stattdessen DAV:getetag).
COPY/MOVE-Verhalten: Dieser Eigenschaftswert SOLLTE während einer MOVE-Operation beibehalten werden, wird aber normalerweise neu initialisiert, wenn eine Ressource mit einem COPY erstellt wird. Er sollte nicht in einem COPY gesetzt werden.
Beschreibung (Description): Die DAV:creationdate-Eigenschaft SOLLTE auf allen DAV-konformen Ressourcen definiert sein. Falls vorhanden, enthält sie einen Zeitstempel des Moments, in dem die Ressource erstellt wurde. Server, die nicht in der Lage sind, das Erstellungsdatum dauerhaft aufzuzeichnen, SOLLTEN es stattdessen undefiniert lassen (d.h. "Not Found" melden).
<!ELEMENT creationdate (#PCDATA) >
15.2. displayname Property (displayname-Eigenschaft)
Name: displayname
Zweck (Purpose): Bietet einen Namen für die Ressource, der für die Präsentation an einen Benutzer geeignet ist.
Wert (Value): Beliebiger Text.
Geschützt (Protected): SOLLTE NICHT geschützt sein. Beachten Sie, dass Server, die [RFC2518] implementieren, dies möglicherweise zu einer geschützten Eigenschaft gemacht haben, da dies eine neue Anforderung ist.
COPY/MOVE-Verhalten: Dieser Eigenschaftswert SOLLTE bei COPY- und MOVE-Operationen erhalten bleiben.
Beschreibung (Description): Enthält eine Beschreibung der Ressource, die für die Präsentation an einen Benutzer geeignet ist. Diese Eigenschaft ist auf der Ressource definiert und SOLLTE daher unabhängig von der zum Abrufen verwendeten Request-URI denselben Wert haben (daher ist die Berechnung dieser Eigenschaft basierend auf der Request-URI veraltet). Während generische Clients den Eigenschaftswert möglicherweise Endbenutzern anzeigen, müssen Client-UI-Designer verstehen, dass die Methode zur Identifizierung von Ressourcen nach wie vor die URL ist. Änderungen an DAV:displayname geben keine Verschiebungen oder Kopien an den Server aus, sondern ändern einfach ein Stück Metadaten auf der einzelnen Ressource. Zwei Ressourcen können denselben DAV:displayname-Wert haben, selbst innerhalb derselben Sammlung.
<!ELEMENT displayname (#PCDATA) >
15.3. getcontentlanguage Property (getcontentlanguage-Eigenschaft)
Name: getcontentlanguage
Zweck (Purpose): Enthält den Content-Language-Header-Wert (aus Abschnitt 14.12 von [RFC2616]), wie er von einem GET ohne Accept-Header zurückgegeben würde.
Wert (Value): language-tag (language-tag ist in Abschnitt 3.10 von [RFC2616] definiert)
Geschützt (Protected): SOLLTE NICHT geschützt sein, damit Clients die Sprache zurücksetzen können. Beachten Sie, dass Server, die [RFC2518] implementieren, dies möglicherweise zu einer geschützten Eigenschaft gemacht haben, da dies eine neue Anforderung ist.
COPY/MOVE-Verhalten: Dieser Eigenschaftswert SOLLTE bei COPY- und MOVE-Operationen erhalten bleiben.
Beschreibung (Description): Die DAV:getcontentlanguage-Eigenschaft MUSS auf jeder DAV-konformen Ressource definiert sein, die den Content-Language-Header bei einem GET zurückgibt.
<!ELEMENT getcontentlanguage (#PCDATA) >
15.4. getcontentlength Property (getcontentlength-Eigenschaft)
Name: getcontentlength
Zweck (Purpose): Enthält den Content-Length-Header, der von einem GET ohne Accept-Header zurückgegeben wird.
Wert (Value): Siehe Abschnitt 14.13 von [RFC2616].
Geschützt (Protected): Diese Eigenschaft ist berechnet, daher geschützt.
Beschreibung (Description): Die DAV:getcontentlength-Eigenschaft MUSS auf jeder DAV-konformen Ressource definiert sein, die den Content-Length-Header als Antwort auf ein GET zurückgibt.
COPY/MOVE-Verhalten: Dieser Eigenschaftswert hängt von der Größe der Zielressource ab, nicht vom Wert der Eigenschaft auf der Quellressource.
<!ELEMENT getcontentlength (#PCDATA) >
15.5. getcontenttype Property (getcontenttype-Eigenschaft)
Name: getcontenttype
Zweck (Purpose): Enthält den Content-Type-Header-Wert (aus Abschnitt 14.17 von [RFC2616]), wie er von einem GET ohne Accept-Header zurückgegeben würde.
Wert (Value): media-type (definiert in Abschnitt 3.7 von [RFC2616])
Geschützt (Protected): Potenziell geschützt, wenn der Server es vorzieht, Inhaltstypen selbst zuzuweisen (siehe auch Diskussion in Abschnitt 9.7.1).
COPY/MOVE-Verhalten: Dieser Eigenschaftswert SOLLTE bei COPY- und MOVE-Operationen erhalten bleiben.
Beschreibung (Description): Diese Eigenschaft MUSS auf jeder DAV-konformen Ressource definiert sein, die den Content-Type-Header als Antwort auf ein GET zurückgibt.
<!ELEMENT getcontenttype (#PCDATA) >
15.6. getetag Property (getetag-Eigenschaft)
Name: getetag
Zweck (Purpose): Enthält den ETag-Header-Wert (aus Abschnitt 14.19 von [RFC2616]), wie er von einem GET ohne Accept-Header zurückgegeben würde.
Wert (Value): entity-tag (definiert in Abschnitt 3.11 von [RFC2616])
Geschützt (Protected): MUSS geschützt sein, da dieser Wert vom Server erstellt und kontrolliert wird.
COPY/MOVE-Verhalten: Dieser Eigenschaftswert hängt vom Endzustand der Zielressource ab, nicht vom Wert der Eigenschaft auf der Quellressource. Beachten Sie auch die Überlegungen in Abschnitt 8.8.
Beschreibung (Description): Die getetag-Eigenschaft MUSS auf jeder DAV-konformen Ressource definiert sein, die den Etag-Header zurückgibt. Siehe Abschnitt 3.11 von RFC 2616 für eine vollständige Definition der Semantik eines ETag und Abschnitt 8.6 für eine Diskussion von ETags in WebDAV.
<!ELEMENT getetag (#PCDATA) >
15.7. getlastmodified Property (getlastmodified-Eigenschaft)
Name: getlastmodified
Zweck (Purpose): Enthält den Last-Modified-Header-Wert (aus Abschnitt 14.29 von [RFC2616]), wie er von einer GET-Methode ohne Accept-Header zurückgegeben würde.
Wert (Value): rfc1123-date (definiert in Abschnitt 3.3.1 von [RFC2616])
Geschützt (Protected): SOLLTE geschützt sein, da einige Clients sich möglicherweise auf den Wert für ein angemessenes Caching-Verhalten verlassen oder auf den Wert des Last-Modified-Headers, mit dem diese Eigenschaft verknüpft ist.
COPY/MOVE-Verhalten: Dieser Eigenschaftswert hängt vom letzten Änderungsdatum der Zielressource ab, nicht vom Wert der Eigenschaft auf der Quellressource. Beachten Sie, dass einige Server-Implementierungen den Dateisystem-Datumsänderungswert für den DAV:getlastmodified-Wert verwenden, und dies kann bei einem MOVE beibehalten werden, selbst wenn der HTTP Last-Modified-Wert sich ändern SOLLTE. Beachten Sie, dass [RFC2616] von Clients verlangt, ETags zu verwenden, wo sie bereitgestellt werden, ein Server, der ETags implementiert, kann darauf zählen, dass Clients einen viel besseren Mechanismus als Änderungsdaten für Offline-Synchronisation oder Cache-Kontrolle verwenden. Beachten Sie auch die Überlegungen in Abschnitt 8.8.
Beschreibung (Description): Das Datum der letzten Änderung einer Ressource SOLLTE nur Änderungen im Körper (den GET-Antworten) der Ressource widerspiegeln. Eine Änderung nur einer Eigenschaft SOLLTE NICHT dazu führen, dass sich das Datum der letzten Änderung ändert, da Clients sich möglicherweise auf das Datum der letzten Änderung verlassen, um zu wissen, wann der vorhandene Körper überschrieben werden soll. Die DAV:getlastmodified-Eigenschaft MUSS auf jeder DAV-konformen Ressource definiert sein, die den Last-Modified-Header als Antwort auf ein GET zurückgibt.
<!ELEMENT getlastmodified (#PCDATA) >
15.8. lockdiscovery Property (lockdiscovery-Eigenschaft)
Name: lockdiscovery
Zweck (Purpose): Beschreibt die aktiven Sperren auf einer Ressource
Geschützt (Protected): MUSS geschützt sein. Clients ändern die Liste der Sperren über LOCK und UNLOCK, nicht über PROPPATCH.
COPY/MOVE-Verhalten: Der Wert dieser Eigenschaft hängt vom Sperrzustand des Ziels ab, nicht von den Sperren der Quellressource. Denken Sie daran, dass Sperren bei einer MOVE-Operation nicht verschoben werden.
Beschreibung (Description): Gibt eine Auflistung zurück, wer eine Sperre hat, welche Art von Sperre er hat, den Timeout-Typ und die verbleibende Zeit beim Timeout sowie das zugehörige Sperr-Token. Eigentümerinformationen KÖNNEN weggelassen werden, wenn sie als sensibel angesehen werden. Wenn es keine Sperren gibt, der Server aber Sperren unterstützt, ist die Eigenschaft vorhanden, enthält aber null 'activelock'-Elemente. Wenn eine oder mehrere Sperren vorhanden sind, erscheint für jede Sperre auf der Ressource ein 'activelock'-Element. Diese Eigenschaft ist in Bezug auf Schreibsperren NICHT sperrbar (Abschnitt 7).
<!ELEMENT lockdiscovery (activelock)* >
15.8.1. Beispiel - Abrufen von DAV:lockdiscovery
Anfrage (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>
Antwort (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>
Diese Ressource hat eine einzelne exklusive Schreibsperre darauf mit einem unendlichen Timeout.
15.9. resourcetype Property (resourcetype-Eigenschaft)
Name: resourcetype
Zweck (Purpose): Gibt die Art der Ressource an.
Geschützt (Protected): SOLLTE geschützt sein. Der Ressourcentyp wird im Allgemeinen durch die Operation entschieden, die die Ressource erstellt (MKCOL vs PUT), nicht durch PROPPATCH.
COPY/MOVE-Verhalten: Im Allgemeinen führt ein COPY/MOVE einer Ressource zu demselben Ressourcentyp am Ziel.
Beschreibung (Description): MUSS auf allen DAV-konformen Ressourcen definiert sein. Jedes Kindelement identifiziert einen bestimmten Typ, zu dem die Ressource gehört, wie z.B. 'collection', der einzige von dieser Spezifikation definierte Ressourcentyp (siehe Abschnitt 14.3). Wenn das Element das 'collection'-Kindelement plus zusätzliche nicht erkannte Elemente enthält, sollte es im Allgemeinen als Sammlung behandelt werden. Wenn das Element keine erkannten Kindelemente enthält, sollte es als Nicht-Sammlungsressource behandelt werden. Der Standardwert ist leer. Dieses Element DARF NICHT Text oder gemischten Inhalt enthalten. Jedes benutzerdefinierte Kindelement wird als Bezeichner für einen Ressourcentyp betrachtet.
Beispiel: (fiktives Beispiel zur Veranschaulichung der Erweiterbarkeit)
<x:resourcetype xmlns:x="DAV:">
<x:collection/>
<f:search-results xmlns:f="http://www.example.com/ns"/>
</x:resourcetype>
15.10. supportedlock Property (supportedlock-Eigenschaft)
Name: supportedlock
Zweck (Purpose): Bereitstellung einer Auflistung der von der Ressource unterstützten Sperrfähigkeiten.
Geschützt (Protected): MUSS geschützt sein. Server, nicht Clients, bestimmen, welche Sperrmechanismen unterstützt werden.
COPY/MOVE-Verhalten: Dieser Eigenschaftswert hängt von der Art der am Ziel unterstützten Sperren ab, nicht vom Wert der Eigenschaft auf der Quellressource. Server, die versuchen, zu einem Ziel zu KOPIEREN, sollten nicht versuchen, diese Eigenschaft am Ziel zu setzen.
Beschreibung (Description): Gibt eine Auflistung der Kombinationen von Umfang und Zugriffstypen zurück, die in einer Sperranfrage für die Ressource angegeben werden können. Beachten Sie, dass der tatsächliche Inhalt selbst durch Zugriffskontrollen gesteuert wird, sodass ein Server nicht verpflichtet ist, Informationen bereitzustellen, die der Client nicht sehen darf. Diese Eigenschaft ist in Bezug auf Schreibsperren NICHT sperrbar (Abschnitt 7).
<!ELEMENT supportedlock (lockentry)* >
15.10.1. Beispiel - Abrufen von DAV:supportedlock
Anfrage (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>
Antwort (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>