# Das Erstellen von Designs für den Anmeldungsmanager von &kdm;

Dieser Abschnitt beschreibt das Erstellen von Designs für den Anmeldungsmanager. Beispiele mit Bildschirmfotos finden Sie bei den installierten Standarddesigns und den Designs von der Design-Webseite.

## Überblick über Designs

Designs für &kdm; können mit Hilfe einer XML-Datei, die der Spezifikation in `$`KDEDIR`/share/apps/doc/kdm/greeter.dtd` folgt, erstellt werden. Designs werden im Ordner `$`KDEDIR`/share/apps/kdm/themes/design_name` abgelegt. Der Design-Ordner sollte eine Datei mit dem Namen `KdmGreeterTheme.desktop` enthalten, die ein ähnliches Format aufweist wie die anderen `.desktop`-Dateien und wie folgt aussieht:

    [KdmGreeterTheme]
    Greeter=circles.xml
    Name=Circles
    Description=Theme with blue circles
    Author=Bond, James Bond
    Copyright=(c) 2002 Bond, James Bond
    Screenshot=screenshot.png

Die Felder `Name`, `Description`, `Author` und `Copyright` können wie bei den anderen `.desktop`-Dateien übersetzt werden. Alle aufgeführten Dateien sollten sich im Design-Ordner befinden. Das Feld `Screenshot` verweist auf eine Datei mit einem 200x150 großen Bildschirmfoto des Designs. (Sie können darauf auch verzichten, aber für den Anwender bietet es einen Vorteil.) Der Eintrag `Greeter` verweist auf eine XML-Datei, die die Beschreibung des Designs enthält.

Wenn das Design gründlich getestet ist, erstellen Sie ein tar-Archiv, das den Ordner in dem Zustand enthält, wie er im Ordner `$`KDEDIR`/share/apps/kdm/themes` installiert werden soll. Dies ist das Standardformat für die Verteilung von Designs für &kdm;.

## Ausführliche Beschreibung des XML-Formats für Designs

### Wurzel-Knoten

Designs für &kdm; sind XML-Dateien mit dem Tag <greeter> als Wurzel. Der Knoten auf der obersten Ebene ist ein Elementknoten des Typs `rect` mit einer impliziten festgelegten Anordnung.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE greeter SYSTEM "greeter.dtd">
    <greeter>
    [...]
    </greeter>

Eingeschlossen in das greeter-Tag können weitere Knoten sein, die in den folgenden Abschnitten dieses Dokuments beschrieben sind. Einige dieser Knoten sind Container (Anordnungs-Knoten, Element-Knoten), die weitere Knoten enthalten können.

### Element-Knoten

Ein &kdm;-Design wird durch die Angabe einer Hierarchie von Element- und Anordnungsknoten erstellt. Element-Knoten können folgende Werte für das Attribut `Typ` haben:

button

  Ein Knopf-Feld. Dieses Feld benutzt einen Qt-Knopf.

  Sie können jeden anderen Eintrag dazu veranlassen sich wie ein Knopf zu verhalten, indem Sie das Attribut `button` auf `true` setzen. Sie sollten allerdings in &kdm;-Designs lieber Qt-Knöpfe verwenden, da diese auch für Benutzer mit Behinderungen zugänglich sind.

Eintrag

  Ein Eingabe-Element wie ein Textfeld oder ein Kombinationsfeld. Beachten Sie, dies ist nur ein Platzhalter für Qt-Elemente.

label

  Eine Beschriftung. Diese muss entweder einen `text`-Knoten oder einen `stock`-Knoten mit der Angabe des Textes enthalten.

list

  Ein Widget für eine Gesichterliste

pixmap

  Ein Rasterbild in einem von Qt unterstützten Format, &eg; PNG, JPEG, Tiff usw.

rect

  Ein einfaches Rechteck.

svg

  Ein Vektorbild im SVG-Format.

Ein Beispiel:

    <item type="label">

Ein Eintrag, der sich wie ein Knopf verhält:

    <item type="rect" id="disconnect_button" button="true">.

In der Voreinstellung verschwindet der Anmeldebildschirm von &kdm; nach der Authentifizierung. Dadurch kann es zu einem Flackern beim Umschalten zwischen Anmeldebildschirm und Arbeitssitzung führen. Mit dem Attribut `background` kann der Benutzer angeben, welche Elemente des Designs zum Hintergrundbild gehören. In diesem Fall entfernt &kdm; alle Elemente, die nicht zum Hintergrund gehören vom Display und rendert die verbleibenden `background`-Elemente in das Hintergrundfenster (root window). Damit erreicht man einen sanften Übergang zwischen dem Anmeldebildschirm und der Arbeitssitzung:

    <item type="rect" background="true">
      <normal file="background.svg"/>
      <pos x="0" y="0" width="100%" height="-75"/>
    </item>

Wenn für den Übergang vom Anmeldebildschirm ein anderer Hintergrund verwendet werden soll als für den Anmeldebildschirm, sollte das Design zwei Element-Knoten angeben (die &eg; Pixmaps oder SVG-Bilder enthalten können). Das Element, das zum Hintergrund für den Anmeldungsmanager gehört, sollte keine Eigenschaft `background` haben, während das Element für den Übergangshintergrund die Eigenschaft `background` haben sollte. Ein Beispiel:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE greeter SYSTEM "greeter.dtd">
    <greeter>
      <item type="rect" background="true">
        <normal file="background_for_login.svg" element="background"/>
        <pos x="0" y="0" width="100%" height="100%"/>
      </item>
      <item type="rect">
        <normal file="background_for_greeter.svg"/>
        <pos x="0" y="0" width="100%" height="100%"/>
      </item>
      [...]
    </greeter>

Für Systeme mit mehreren Bildschirmen kann im Design auch das Erscheinungsbild für die Bildschirme ohne Anmeldungsmanager vorgegeben werden, typischerweise nur Elemente für den Bildschirmhintergrund. Um den Bildschirm anzugeben, auf dem ein Element angezeigt werden soll, kann das Attribut `screen` mit einem der Werte `greeter` (für den Bildschirm mit dem Anmeldungsmanager), `other` (für die Bildschirme ohne Anmeldungsmanager) oder `all` (für alle Bildschirme) benutzt werden.

Jedem Elemente kann über das Attribut `id` ein Name zugeordnet werden. &kdm; kennt bestimmte ids, um diesen Elementen besondere Funktionen zuzuordnen:

`button`-Elemente und Elemente mit dem Attribut `button="true"`.

  Knöpfe lösen typischerweise bestimmte Aktionen aus. Knöpfe, deren Aktionen aus irgendeinem Grund nicht verfügbar sind, werden von &kdm; ausgeblendet.

  Id
  Aktion
  chooser_button
  Startet die XDMCP-Auswahl
  disconnect_button
  Verbindung zu Fremdrechner abbrechen.
  session_button
  Öffne das Auswahlmenü für den Sitzungstyp.
  system_button
  Öffnet ein allumfassendes Menü mit verschiedenen Optionen und Aktion, abhängig von der Konfiguration.
`label`-Einträge

  &kdm; blendet diese Beschriftungen ein bzw. aus und setzt ihren Text abhängig vom Status des Anmeldedialogs.

  Id
  Funktion
  pam-error
  Hiermit wird die Nachricht Anmeldung fehlgeschlagen angezeigt.
Einträge mit eingebetteten Elementen

  &kdm; bettet bestimmte Qt-Elemente in diese Einträge ein.

  Id
  Funktion
  user-entry
  Eingabefeld für den Benutzernamen.
  pw-entry
  Eingabefeld für das Passwort.
  domain-entry
  Einige Kommunikationserweiterungen benutzen dieses Feld zur Abfrage eines Domänen-Namens. Ist dieses Feld vorhanden, sollten die damit verbundenen, umschließenden Elemente Anzeigeknoten vom Typ `plugin-domain-entry` haben.
  talker
  Dieses Element sollte den Typ `rect` haben. Es stellt den heißen Bereich des Anmeldemanagers dar: Es enthält die `label`- und `entry`-Elemente, die sich um den Authentifizierungsvorgang kümmern. Findet eine Kommunikationserweiterung nicht die benötigten Elemente, versucht es ein komplexes Bildschirmelement mit eigener Anordnung in dieses Element einzubetten und damit den talker des Designs komplett zu überschreiben. Streng genommen müssen &kdm;-Designs keine eigenen talker-Designs bereitstellen, da alle Authentifizierungserweiterungen von &kdm; das Element `talker` benutzen können.
  userlist
  Dieser Eintrag muss vom Typ `list` sein. Ist die Funktion Benutzerliste eingeschaltet, bettet &kdm; das Element mit der Benutzerliste hier ein. Andernfalls ist der Eintrag unsichtbar.
  xconsole
  Dieser Eintrag sollte vom Typ `rect` sein. Ist die eingebaute Funktion `xconsole` einkompiliert und aktiviert, bettet &kdm; das Protokoll-Element für die Konsole hier ein. Andernfalls ist dieser Eintrag ausgeblendet.
Andere Einträge

  &kdm; blendet diese Elemente ein bzw. aus, abhängig von der Konfiguration und dem aktuellen Status des Anmeldemanagers. &kdm; setzt hier keinen bestimmten Typ voraus, aber es bietet sich ein bestimmter Typ an.

  Id
  Nur anzeigen, wenn ...
  timed-label
  ... eine geplante Anmeldung läuft.
  caps-lock-warning
  ... die Feststelltaste aktiv ist.
  xauth-warning
  ... der &X-Server; keine X-Authorisierung zum Verbinden benötigt.
  userlist-rect
  ... die Benutzerliste eingeschaltet ist. Indem Sie das Element `userlist` hierin einbetten, ist es möglich so etwas wie einen Rahmen um die Liste zu erstellen, der nur angezeigt wird, wenn auch die Benutzerliste angezeigt wird.
  xconsole-rect
  ... die eingebaute `xconsole` eingeschaltet ist. Verhält sich analog zu `userlist-rect`.

### Anordnungscontainer-Knoten

Anordnungsknoten tauchen innerhalb von Element-Knoten auf und enthalten wiederum selbst Element-Knoten. Der Typ des Anordnungsknoten legt das Arrangement der Kindknoten fest. Ein Element-Knoten kann einen Anordnungsknoten beliebigen Typs enthalten.

#### Kastenknoten

Kastenknoten ordnen ihre Kinder automatisch in einer Reihe an. Sie sind wie folgt spezifiziert:

    <box orientation="alignment" min-width="num" min-height="num"
        xpadding="num" ypadding="num" spacing="num"
        homogeneous="bool">

Hierbei bedeutet num die Anzahl der Pixel und bool bedeutet entweder `true` oder `false`. Der Wert alignment kann entweder `horizontal` oder `vertical` sein. Lassen Sie ein Attribut aus, wird dieses mit dem Wert 0 für Zahlen, `false` für bool und `vertical` für alignment angenommen.

Spacing ist der Abstand zwischen zwei benachbarten Kindelementen. Padding ist der äußere Rand des Kastens. Ist der Kasten homogeneous, wird für jedes Kindelement der selbe Platz bereitgestellt.

#### Fixierte Knoten

Fixiert ist ein Container, dessen Kindelemente an präzisen Koordinaten ausgerichtet sind. Die Größe dieses Containers wird durch das kleinste mögliche Rechteck festgelegt, dass alle Kinder umfasst. Das Tag fixed verfügt über keine weiteren Attribute, und darum wird es einfach so verwendet:

    <fixed>

Dann platzieren Sie weitere Elemente mit entsprechenden Positionsknoten darin.

### Positionsknoten

Jedes Element kann seine Position und Größe über den `pos`-Knoten festlegen. Ein Beispiel:

    <pos x="0" y="4" width="100%" height="100%"/>

Ist keine Größe angegeben, wird die natürliche Größe des Elements verwendet, diese wird auch Größenhinweis genannt. Beachten Sie, dass nicht alle Elemente einen sinnvollen Größenhinweis haben.

Position und size können in Prozent angegeben werden und werden in diesem Fall relativ zur Größe des umgebenden Containers berechnet. Bei Elementen der obersten Ebene bezieht sich der Prozentwert auf den gesamten Bildschirm. Durch Anhängen von Circumflexes (`^`) an die Angabe für size, kann diese auch relativ zur Größe des umschließenden Elements oder dessen umschließenden Elements &etc; angegeben werden.

Enthält der Container einen Kasten, können `width` und `height` mit dem Wert `box` angegeben werden, was bedeutet, dass hier die Breite und Höhe des Kastens (die den Elementen im Kasten zuzüglich des Randes entspricht) gemeint ist.

Entweder `width` oder `height` kann hier den Wert `scale` erhalten. Damit ist gemeint, dass die betreffende Abmessung entsprechend der Größe der anderen Dimension relativ zum Größenhinweis ausgelegt wird. Hiermit kann automatisch das Seitenverhältnis skalierter Bilder beibehalten werden.

Ist das Attribut `expand` angegeben und hat den Wert `true`, wird das Element im umschließenden Kasten so weit wie möglich ausgedehnt (das bedeutet, es erhält mehr Platz, wenn dies möglich ist).

Wenn `width` oder `height` als Zahlenwert angegeben werden, bedeutet ein negativer Wert einen Abstand zur Größe des umschließenden Containers. Beachten Sie, dass auch ein positiver Versatz angegeben werden kann, indem Sie zwei Minuszeichen angeben.

In jedem Fall kann die endgültige Größe durch die Attribute `min-width`, `min-height`, `max-width` und `max-height` eingeschränkt werden, die genau so angegeben werden können wie die Attribute `width` und `height`.

Wenn `x` oder `y` ein Zahlenwert ist, bedeutet ein negativer Wert den Abstand vom rechten bzw. unteren Rand, anders als in der Voreinstellung, bei der der linke bzw. obere Rand gemeint ist.

Es besteht auch die Möglichkeit den Punkt innerhalb des Elements anzugeben, auf den sich die Position bezieht. Dieser wird Anker genannt und kann entweder `c` für zentriert oder`n`, `ne`, `e`, `se`, `s`, `sw`, `w` und `nw` sein. Diese Abkürzungen stehen für die verschiedenen Ränder/Ecken einer topografischen Karte. (Anm. d. Übers.: Die Abkürzungen beziehen sich auf die englischen Himmelsrichtungen). Die Voreinstellung ist `nw`, für die obere linke Ecke. Ein Beispiel:

    <pos x="10%" y="50%" anchor="w" width="80%" height="95"/>

### Anzeigeknoten

Sie können das Attribut `type` angeben. Damit zeigen sie an, dass bestimmte Element nur angezeigt werden sollen, wenn der Typ gesetzt ist. Wird dem Typ ein Ausrufezeichen vorangestellt (`!`) wird die Bedingung umgekehrt. Gültige Werte sind folgende:

Typ
Anzeigen wenn ...
chooser
ein Umschalten auf das Anmelden an Fremdrechnern erlaubt ist.
halt
und `reboot`
das Herunterfahren des Systems erlaubt ist.
system
keine Bedingung (In &kdm; immer gesetzt).
plugin-
entry-name
die Kommunikationserweiterung bietet ein entsprechendes Eingabefeld.

Zum Beispiel:

    <show type="chooser"/>

Alternativ können Sie auch einen Wert `min-screen-width` oder `min-screen-height` angeben, der vorgibt, dass bestimmte Elemente nur dann angezeigt werden sollen, wenn die Bildschirmauflösung mindestens den angegebenen Wert hat. Ein Beispiel:

    <show min-screen-height="768"/>

### Normal-/Active-/Prelight-Knoten

Das Aussehen der meisten Elemente kann mit den folgenden Tags angepasst werden:

`normal`

  Normaler Zustand

`prelight`

  Wenn sich der Mauszeiger darüber befindet.

`active`

  Wenn eine Maustaste auf dem Element betätigt wird.

Der genaue Umfang der verfügbaren Attribute hängt vom Typ des Elements ab:

`rect`

      <normal color="#000000" alpha="0.0"/>

  Beide Attribute können weggelassen werden. In diesem Fall wird der Standardwert benutzt (das Beispiel zeigt die Standardwerte). `alpha` ist eine Fließkommazahl zwischen 0 (transparent) und 1 (undurchsichtig). `color` ist ein Doppelkreuz gefolgt von einem sechstelligen Hexadezimalwert; Das Format ist `#`rrggbb. Alternativ kann `color` als achtstellige Hexadezimalzahl angegeben werden, wobei die beiden ersten Ziffern den Alphawert darstellen.
`label`

      <normal color="#ffffff" alpha="1.0" font="Sans 14"/>

  `alpha` und `color` werden angegeben wie bei rect-Einträgen.

  `font` folgt dem Format family-list style-options size. Alle Bestandteile sind optional.

  family-list ist eine komma-separierte Liste von Schriftfamilien wie helvetica, monospace &etc;

  style-options ist eine leerzeichen-getrennte Liste von Schlüsselwörtern aus den Kategorien style, weight und stretch; aus jeder Kategorie höchstens eins. Style kann `normal`, `italic` or `oblique`. Weight kann sein `ultra-light`, `light`, `medium`, `semi-bold`, `bold`, `ultra-bold` or `heavy`. Die Werte für stretch umfassen `ultra-condensed`, `extra-condensed`, `condensed`, `semi-condensed`, `normal`, `semi-expanded`, `expanded`, `extra-expanded` and `ultra-expanded`.

  size ist entweder eine Fließkommazahl, die die Größe in Punkten (1/72 Zoll) darstellt oder eine Ganzzahl, gefolgt von `px`, um die Größe in Pixeln anzugeben. Größenangaben in Punkten sind vorzuziehen, da diese unabhängig von der Bildschirmauflösung sind.

  Wir ein Attribut ausgelassen, werden die Wert des Stilknotens benutzt. Ergibt diese keine Farbangabe für window-text, wird Weiß verwendet. Die Standardschriftart ist die in &kdmrc; eingerichtete.

`pixmap`
`svg`

      <normal file="picture.png" tint="#dddddd" alpha="1.0"/>

  `file` gibt die Datei an, die das Bild enthält. Relative Pfade sind relativ zum Ordner des Designs.

  `element` gibt die Element-ID in einer SVG-Datei an. Ohne diese Angabe wird das ganze SVG-Bild angezeigt.

  Bei `pixmap`-Knoten versucht &kdm; zunächst basierend auf dem angegebenen Dateinamen die Datei zu öffnen, die zu basename`-`width `x` height`.`extension passt, so dass für eine vorgebene Auflösung das qualitativ beste Bild verwendet werden kann.

  `scalemode` legt fest, wie die Größe von Bildern geändert wird, die nicht in das Element passen. Mit der Voreinstellung `free` wird die Größe der Bilder angepasst, dabei wird unter Umständen das Seitenverhältnis geändert. Mit den beiden folgenden Einstellungen bleibt das Seitenverhältnis erhalten: Mit `fit` wird die Größe des Bildes so geändert, dass es in das Element passt. Dabei wird das Bild zentriert. Der vom Bild nicht überdeckte Bereich des Elements wird nicht durch das Element gezeichnet, daher sollte das Bild auf einem einfarbigen `rect` angeordnet werden. Mit der Einstellung `crop` wird das Bild so vergrößert, dass das Bild das Element ganz ausfüllt. Die überstehenden Teile des Bildes werden symmetrisch abgeschnitten.

  `tint` und `alpha` bilden eine Farbangabe wie bei `rect`-Elementen. Jedes Pixel des Bildes wird komponentenweise mit dieser Farbe multipliziert.

### Element-Stil-Knoten

Mit diesem Tag das Erscheinungsbild in das Design eingebetteter Beschriftungen und Qt-Widgets geändert werden, &eg; Eingabefelder, Knöpfe oder die Benutzerliste. Die Vorgaben für den Stil werden von Kindelementen geerbt, können aber individuell überschrieben werden. Die Standardwerte werden aus &kdmrc; übernommen.

Das Attribut `font` legt die Schriftart für alle Widgets fest. Für Widgets mit einer Eingabefunktion kann die Schriftart mit dem Attribut `edit-font` überschrieben werden. Schriftarten werden genauso angegeben wie in Normal/Active/Prelight.

Normalerweise gibt sich die Design-Engine alle Mühe die Rahmen von Qt-Widgets zu entfernen, so dass diese übergangslos im Design dargestellt werden. In Fällen, in denen dies nicht gewünscht ist, kann das Attribut `frame` auf den Wert `true` gesetzt werden.

Sie können beinah die gesamte auf der Trolltech-Webseite dokumentierte Palette für die Widgets angeben. Attributnamen setzen sich aus einem Gültigkeitsbereich, einer Farbrolle und einem Suffix zusammen. Mögliche Gültigkeitsbereiche, in aufsteigender Rangfolge, sind `all-` für alle Farbgruppen, keiner für die aktiven und inaktiven Farbgruppen und `active-`, `inactive-` und `disabled-` für die entsprechenden Farbgruppen. Unterstützte Farbrollen sind `window`, `window-text`, `base`, `alternate-base`, `text`, `bright-text`, `highlight`, `highlighted-text`, `button` und `button-text`. Das Suffix kann den Wert `-color` oder `-alpha` mit der entsprechenden Bedeutung aus normal/active/prelight nodes haben.

Beispiel:

    <style edit-font="Comic 16" text-color="#dddddd" frame="true"/>

### Farbknoten für die Gesichterliste

Farbknoten erlauben das Überschreiben der Hintergrundfarbe von Elementen in der Gesichterliste. `labelcolor` und `altlabelcolor` sind im Wesentlichen äquivalent zu `all-base-color` bzw. `all-alternate-base-color` in style nodes. Wird nur `labelcolor` angegeben, werden alternierende Elementhintergründe abgeschaltet.

    <color labelcolor="#80ffffff" altlabelcolor="#80f0f0f0"/>

### Text-Knoten

Text-Tags werden von Beschriftungen verwendet. Diese können zur Anzeige von lokalisiertem Text wie folgt benutzt werden (fehlt das Attribut `xml:lang`, wird das POSIX locale vorausgesetzt):

    <text xml:lang="fr">Option</text>

Text-Knoten können die folgenden Sonderzeichenfolgen enthalten, die wie folgt übersetzt werden:

Zeichenfolge
Auflösung
%%
Ein %-Zeichen
%c
Uhrzeit und Datum
%d
Der Display-Name (Umgebungsname `DISPLAY`)
%h
Rechnername (Ausgabe von `gethostname`)
%m
Maschinentyp (Bestandteil machine der Ausgabe von `uname`)
%n
Netzwerkname (nodename, Bestandteil der Ausgabe von `uname`.
%o
Domänen-Name (Ausgabe von `getdomainname`)
%r
Release-Nummer (release, Bestandteil der Ausgabe von `uname`)
%s
Systemname (sysname, Bestandteil der Ausgabe von `uname`)
%t
Verbleibende Anzahl Sekunden bis zur Ausführung einer geplanten Anmeldung. Hinzu kommt die passende i18n-Pluralform für Sekunde.
%u
Benutzername für geplante Anmeldung
_
Macht das folgende Zeichen zu einem Kurzbefehl.

`%t` und `%u` sind nur zum internen Gebrauch zur Anzeige der Nachricht `timed-label` gedacht, die automatisch jede Sekunde aktualisiert wird.

### Bestandsknoten

Bestimmte häufige, lokalisierte Beschriftungen können über Bestandsknoten angegeben werden. Das Tag `text` wird ignoriert, wenn das Tag `stock` angegeben ist. Sie sollten lieber die Bestandsbeschriftungen verwenden als sämtliche Übersetzungen in den Designs abzulegen. Dies führt zu schnelleren Ladezeiten und wahrscheinlich zu besseren Übersetzungen. Die folgenden Werte sind gültig:

Typ
Auflösung
caps-lock-warning
Feststelltaste ist aktiviert
chooser
_XDMCP-Rechnermenü
quit
Be_enden
disconnect
_Trennen
halt
Aus_schalten
language
_Sprache
login
_Anmelden
session
Sitzungs_art
reboot
_Neustart
system
_Menü
timed-label
Benutzer %u wird angemeldet in %t
domain-label
_Domain:
username-label
_Benutzername:
password-label
_Passwort:
welcome-label
Willkommen auf %h

Zum Beispiel:

    <stock type="welcome-label"/>

### Buddy-Knoten

Elementen, die nur indirekt eine Aktion auslösen, kann ein Buddy zugewiesen werden. Sobald das Element aktiviert wird (angeklickt oder der `Kurzbefehl` einer Beschriftung wird betätigt), erhält das Buddy-Element den Eingabefokus.

Der Buddy wird über seine Id mit dem Attribut `idref` adressiert. Es ist daher offensichtlich, dass er eine Id erhalten muss. Beispiel:

    <item type="label">
      <stock type="username-label"/>
      <buddy idref="user-entry"/>
      [...]
    </item>
    [...]
    <item type="entry" id="user-entry">
      [...]
    </item>