<obj-where>

Ausschnitt aus der DTD:

<!ENTITY % cm.cm-request "
  ...
  (obj-where+, obj-addComment) |
  (obj-where+, obj-commit) |
  (obj-where+, obj-copy) |
  (obj-where+, obj-delete) | 
  (obj-where+, obj-description) |
  (obj-where+, obj-edit) |
  (obj-where+, obj-exportSubtree) |
  (obj-where+, obj-forward) |
  (obj-where+, obj-get) |
  (obj-where+, obj-give) |
  (obj-where+, obj-permissionGrantTo) |
  (obj-where+, obj-permissionRevokeFrom) |
  (obj-where+, obj-reject) |
  (obj-where+, obj-release) |
  (obj-where+, obj-removeActiveContents) |
  (obj-where+, obj-removeArchivedContents) |
  (obj-where+, obj-revert) |
  (obj-where+, obj-set) | 
  (obj-where+, obj-sign) |
  (obj-where+, obj-take) |
  (obj-where+, obj-unrelease) |
  ...
">
<!ATTLIST obj-where
    maxResults CDATA #IMPLIED
>

Definition: <!ENTITY % cm.obj-where " (id | ids | path | parent | condition* "> <!ELEMENT obj-where %cm.obj-where;> <!ELEMENT condition (%cm.atom; | %cm.listitem;)*> <!ATTLIST condition subject CDATA #REQUIRED verb CDATA #REQUIRED >

Aufgabe: obj-where ermöglicht die Suche nach Dateien, wobei die angegebenen Parameter die Trefferliste einschränken. Werden keine Parameterwerte angegeben, so wird eine Liste der IDs aller Dateien zurückgegeben. Die Höchstzahl der zu liefernden Treffer kann mit dem Tag-Attribut maxResults angegeben werden.

Spezielle Parameter dieses Funktionselements:

  • ids: der Inhalt dieses Elements ist eine Liste von Datei-IDs, bei der die einzelnen IDs durch Leerzeichen voneinander separiert sind. Alternativ kann jede ID in einem separaten listitem-Element angegeben werden. Die Suche wird durch ids auf die Dateien mit den angegebenen IDs beschränkt.
  • id: der Inhalt dieses Elements ist eine Datei-ID. Die Suche wird auf die Datei mit dieser ID beschränkt.
  • condition: Mit condition kann in Verbindung mit ids eine Bedingung angegeben werden, die eine Datei erfüllen muss, um in die Ergebnisliste aufgenommen zu werden. Die Bedingung besteht aus drei Teilen, einer Eigenschaft, einem Vergleichsoperator und einem Vergleichswert, wobei die Eigenschaft und der Vergleichsoperator als die Tag-Attribute subject und verb und der Vergleichswert als Inhalt des condition-Elements angegeben werden. Es gibt die folgenden Kombinationen dieser drei Bestandteile einer Bedingung:

    Eigenschaft Operator Vergleichswert
    name
    title
    nameOrTitle
    objClass
    is
    contains
    startsWith
    Zeichenkette
    objType is




    isOneOf
    document
    publication
    generic
    image
    template

    Liste mit Dateitypen (s. is)
    state is
    isNot


    isOneOf
    edited
    committed
    released
    Liste mit Workflowzuständen (s. is)

    Es können mehrere Bedingungen angegeben werden, die dann implizit und-verknüpft werden. Beispiel:

    <obj-where maxResults="20">
      <condition subject="nameOrTitle" verb="contains">foo</condition>
      <condition subject="objType" verb="isOneOf">
        <listitem>publication</listitem>
        <listitem>generic</listitem>
      </condition>
    </obj-where>
    

    Wird bei objType isOneOf oder state isOneOf eine leere Liste angegeben, so ist die Treffermenge leer.

    state isNot ist die einzige Negation. Diese ist erforderlich, weil Workflowzustände nicht exklusiv sind (eine Datei kann eine Arbeitsversion im Zustand edited oder committed sowie zusätzlich eine Version im Zustand released haben.

    Die obj where-Bedingungen können auch in der Template Engine verwendet werden. Allerdings gibt es dort nur freigegebene Dateien, weshalb state dort das Folgende liefert:

    state is / isOneOf...
    released: die Bedingung wird ignoriert
    committed / edited: die Treffermenge ist immer leer

    state isNot...
    released: die Treffermenge ist immer leer
    committed/ edited: die Bedingung wird ignoriert

Verwendung: obj-where ist ein Funktionselement, das nicht ohne ein weiteres unmittelbar darauf folgendes Funktionselement verwendet werden kann. Mit obj-where erhält man die Liste der IDs der passenden Dateien, die dem Suchkriterium entsprechen. Erst durch das folgende Funktionselement wird jedoch bestimmt, wie diese Dateien zu behandeln sind. Jedes der Elemente, die auf obj-where folgen können, entspricht dabei einer Schablone, die nacheinander auf jedes der mit obj-where ermittelten Dateien angewendet wird (siehe Requests als Schablonen und die Darstellung der Ergebnis-Daten).

Erforderliche Rechte: keine Einschränkungen.