XIP Format: Unterschied zwischen den Versionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
 
(24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
==Beschreibung==
 
XIP (e'''X'''change '''I'''nformation '''P'''ackage) ist ein von Sitepark entwickeltes Format zum Austausch von Daten in und aus dem IES.
 
 
 
Im einfachsten Fall besteht ein XIP aus einer XML-Datei. Die auszutauschenden Daten werden in einem definierten XML-Format beschrieben. Bei komplexeren Daten kann ein XIP aus mehreren Dateien bestehen, die unterhalb eines Verzeichnis liegen müssen, aber auch Unterverzeichnisse beliebiger Tiefe enthalten können. Dieses Verzeichnis kann auch mit ZIP zu einer ZIP-Datei zusammengefasst werden.
 
Im einfachsten Fall besteht ein XIP aus einer XML-Datei. Die auszutauschenden Daten werden in einem definierten XML-Format beschrieben. Bei komplexeren Daten kann ein XIP aus mehreren Dateien bestehen, die unterhalb eines Verzeichnis liegen müssen, aber auch Unterverzeichnisse beliebiger Tiefe enthalten können. Dieses Verzeichnis kann auch mit ZIP zu einer ZIP-Datei zusammengefasst werden.
  
Zeile 9: Zeile 6:
 
# ZIP-Datei, die Verzeichnisstrukturen mit Dateien enthält
 
# ZIP-Datei, die Verzeichnisstrukturen mit Dateien enthält
  
==Nutzer==
 
Neben Artikeln können auch alle anderen IES-Elemente bzw. Pools über diese Schnittstelle importiert werden. Die Eigenschaften der Nutzer werden über Attribute bestimmt. Zusäzliche Inhalte (z.B. Telefonnummer) werden über eine Resource beschrieben. Hier gelten die selben Bedingungen wie bei Resource-Artikeln.
 
  
Attribute des XML-Elements "user"
+
==Einfache XML Datei==
;<code>anchor</code>
 
:Anker des Nutzers. Dient beim wiederholten Import als Primärschlüssel dieser Daten und als Parent für die Artikel ([[String]]).
 
;<code>parent</code>
 
:Anker des Parentpools. Die Angabe muss über einen Anker erfolgen ([[String]]).
 
;<code>firstname</code>
 
:Vorname des Nutzers ([[String]]).
 
;<code>lastname</code>
 
:Nachname des Nutzers ([[String]]).
 
;<code>login</code>
 
:Login des Nutzers ([[String]]).
 
;<code>type</code>
 
:Nutzertyp ([[Integer]]).
 
;<code>password</code>
 
:binäres Passwort des Nutzers (i.d.R. wird das Attribut "<code>clear-password</code>" verwendet, um ein Passwort zu setzen) (<code>Base64-Encoded Bytes</code>).
 
;<code>clear-password</code>
 
:Klartextpasswort des Nutzers ([[String]]).
 
;<code>email</code>
 
:System-E-Mail-Adresse des Nutzers ([[String]]).
 
;<code>locale</code>
 
:Sprache des Nutzers (z.B. "<code>de</code>" oder "<code>de_DE</code>") ([[String]]).
 
;<code>sex</code>
 
:Geschlecht des Nutzers (<code>0=female, 1=male, -1=unknown</code>) ([[Integer]]).
 
;<code>valid-from</code>
 
:Ein Long-Wert mit der Angabe der Freischaltungszeit ([[Long]]).
 
;<code>valid-to</code>
 
:Ein Long-Wert mit der Angabe der Freischaltungszeit ([[Long]]).
 
;<code>disabled</code>
 
:Sperre des Nutzers ([[Boolean]]).
 
  
==Templates==
+
Eine einfache XML Datei kann eines der Folgenden Elemente enthalten:
Die Eigenschaften für Templates werden ebenfalls über Attribute bestimmt. Zusäzliche Inhalte (z.B. das Layout) werden über eine Resource beschrieben. Hier gelten die selben Bedingungen wie bei Resource-Artikeln.
+
* [[XIP Article]]
 +
* [[XIP User]]
 +
* [[XIP Template]]
 +
* [[XIP Role]]
 +
* [[XIP Pool]]
 +
* [[XIP Permissions]]
 +
 
 +
Eine einfache XIP-Datei mit einem Artikel könnte z.B. so aussehen:
 +
<source lang="xml">
 +
<?xml version="1.0" encoding="UTF-8" ?>
  
Attribute bzw. Unterelemente des XML-Elements "<code>template</code>"
+
<article anchor="article.example.xip.1" name="Example 1" parent="pool.tutorial.xip" template="tpl.content" filename="article.example">
;<code>anchor</code>
+
  <text name="sp_title">Einfache XIP-Datei</text>
:Anker des Templates. Dient beim wiederholten Import als Primärschlüssel dieser Daten und als Parent für die Artikel ([[String]]).
+
</article>
;<code>name</code>
+
</source>
:Name des Templates ([[String]]).
 
;<code>parent</code>
 
:Anker des Parentpools. Die Angabe muss über einen Anker erfolgen ([[String]]).
 
;<code>type</code>
 
:Optionaler Typ des Templates (Template: 6000, Tag: 6001) ([[Integer]]).
 
;<code>spml-version</code>
 
:Optionale Angabe der SPML-Version, auf der das Template basiert ([[String]]).
 
;<code>suffix</code>
 
:Dateiendung für Artikel die mit diesem Template angelegt werden ([[String]]).
 
;<code>source</code>
 
:Der SPML-Quellcode des Templates als sog. Body-Tag: <code>< source > ... < /source ></code> ([[String]]).
 
  
 +
Um mehrere Elemente in einer XML Datei zu definieren können alle oben aufgeführten Elemente innerhalb eines <code><xip></code>-Elementes liegen.
  
Das Feld "<code>layout</code>" wird als "<code>text</code>" innerhalb einer "<code>resource</code>" definiert und hat folgende Werte:
+
Eine einfache XML-Datei mit mehreren Artikeln könnte z.B. so aussehen:
;<code>common</code>
+
<source lang="xml">
:Normales Template.
+
<?xml version="1.0" encoding="UTF-8" ?>
;<code>handler</code>
 
:Template welches eigene Handler-Aufrufe enthält.
 
;<code>tag</code>
 
:Ein Tag-Template.
 
;<code>container</code>
 
:Ein Template mit Angaben zum Container.
 
  
==Rollen==
+
<xip>
Die Eigenschaften für Rollen werden ebenfalls über Attribute bestimmt. Zusäzliche Inhalte können über eine Resource beschrieben werden. Hier gelten die selben Bedingungen wie bei Resource-Artikeln. Die Angabe der Publisher für diese Rolle wird über einen eigene Tag gesteuert. Dieser steht innerhalb des Tags "<code>role</code>".
+
  <article anchor="article.example.xip.1" name="Example 1" parent="pool.tutorial.xip" template="tpl.content" filename="article.example">
 +
      <text name="sp_title">Einfache XIP-Datei</text>
 +
  </article>
 +
  <media anchor="article.example.xip.2" name="Example 2" parent="pool.tutorial.xip">
 +
      <binary url="file://./logo.gif"/>
 +
  </media>
 +
</xip>
 +
</source>
  
Attribute des XML-Elements "<code>role</code>"
+
Um ganze Poolstrukturen zu importieren, können innerhalb eines Pool-Elementes weitere Elemente und Unterpools liegen.
;<code>anchor</code>
+
 
:Anker der Rolle. Dient beim wiederholten Import als Primärschlüssel dieser Daten und als Parent für die Artikel ([[String]]).
+
Eine einfache XML-Datei mit Poolstruktur könnte z.B. so aussehen:
;<code>name</code>
 
:Name der Rolle ([[String]]).
 
;<code>parent</code>
 
:Anker des Parentpools. Die Angabe muss über einen Anker erfolgen ([[String]]).
 
;<code>new-element</code>
 
:Das Recht neue Elemente anzulegen ([[Boolean]]).
 
;<code>read-element</code>
 
:Das Recht Elemente zu lesen ([[Boolean]]]).
 
;<code>modify-element</code>
 
:Das Recht Elemente zu verändern ([[Boolean]]).
 
;<code>delete-element</code>
 
:Das Recht Elemente zu löschen ([[Boolean]]).
 
;<code>duplicate-element</code>
 
:Das Recht Elemente zu duplizieren ([[Boolean]]).
 
;<code>max-element</code>
 
:Maximale Anzahl von Elementen ([[Integer]]).
 
;<code>read</code>
 
:Das Recht den aktuellen Pool zu lesen ([[Boolean]]).
 
;<code>modify</code>
 
:Das Recht den aktuellen Pool zu verändern ([[Boolean]]).
 
;<code>duplicate</code>
 
:Das Recht den aktuellen Pool zu duplizieren ([[Boolean]]).
 
;<code>new-pool</code>
 
:Das Recht neue Pools anzulegen ([[Boolean]]).
 
;<code>delete-pool</code>
 
:Das Recht Pools zu löschen ([[Boolean]]).
 
;<code>max-pool</code>
 
:Maximale Anzahl von Pools ([[Integer]]).
 
;<code>editor-level</code>
 
:Angabe des Level (Kommaseparierte Liste von [[String|Strings]])
 
;<code>is-workflow-role</code>
 
:Angabe, ob diese Rolle für Workflow verwendet werden soll ([[Boolean]]).
 
;<code>publisher</code>
 
:Dieser Tag dient zur Konfiguration der Publisher dieser Rolle. Die Angabe kann sowohl über die Publisher-ID, als auch über den entsprechenden Anker vorgenommen werden. Das Feld "<code>hide</code>" ([[Boolean]]) steuert, ob der Publisher sichtbar sein soll oder nicht.
 
 
<source lang="xml">
 
<source lang="xml">
<publisher publisher-id="pub1" hide="true"/>
+
<?xml version="1.0" encoding="UTF-8" ?>
<publisher publisher-id="pub2" hide="false"/>
+
 
<publisher anchor="preview" hide="false"/>
+
<articlepool anchor="pool.tutorial" name="IES Tutorial" parent="gui.informations" directory="/tutorial">
 +
  <articlepool anchor="pool.tutorial.xip" name="XIP" parent="pool.tutorial.xip" directory="/xip">
 +
      <resource>
 +
        <text name="container" anchor="is5:gui.container.infosite.standard"/>
 +
        <text name="editorTemplatePool" anchor="standard.container.editing"/>
 +
        <text name="registrationTemplate" anchor="is5:gui.container.infosite.standard.all"/>
 +
      </resource>
 +
 
 +
      <article anchor="article.example.xip.1" name="Example 1" parent="pool.tutorial.xip" template="tpl.content" filename="article.example">
 +
        <text name="sp_title">Einfache XIP-Datei</text>
 +
      </article>
 +
      <media anchor="article.example.xip.2" name="Example 2" parent="pool.tutorial.xip">
 +
        <binary url="file://./logo.gif"/>
 +
      </media>
 +
 
 +
  </articlepool>
 +
</articlepool>
 
</source>
 
</source>
  
==Artikelpools==
+
Das zusammenfassen von Elementen mit dem <code><xip></code>-Element und über Pool-Elemente läßt sich auch kombinieren, so das auch die unterschiedlichen Elemente innerhalb einer XML-Datei zusammengefasst werde können.
Um einen Artikelpool zu importieren, muss eine XML-Datei erstellt werden, die das Root-Element "<code>articlepool</code>" verwendet. Attribute des Tags erlauben die Beschreibung des Pools. Alle Angaben neben Systemwerten werden innerhalb eines Resource-Tags vorgenommen. Hier gelten die selben Bedingungen wie bei Resource-Artikeln.
+
<source lang="xml">
 +
<?xml version="1.0" encoding="UTF-8" ?>
  
Attribute des XML-Elements "<code>articlepool</code>"
+
<xip>
;<code>anchor</code>
 
:Anker des Pools. Dient beim wiederholten Import als Primärschlüssel dieser Daten und als Parent für die Artikel ([[String]]).
 
;<code>name</code>
 
:Name des Pools ([[String]]).
 
;<code>parent</code>
 
:Anker des Parentpools. Die Angabe muss über einen Anker erfolgen ([[String]]).
 
;<code>directory</code>
 
:Angabe des Arbeitsverzeichnisses dieses Artikelpools ([[String]]).
 
  
Hier ein vollständiges Beispiel eines Artikelpools:
+
  <articlepool ...>
<source lang="xml">
+
      <article ...>...</article>
<!--
+
      <articlepool ...>
Einen Artikelpool anlegen:
+
        <article ...>...</article>
 +
      </articlepool>
 +
  </articlepool>
  
<articlepool   legt einen Artikel an
+
  <userpool ...>
 +
      <user ...>...</user>
 +
   </userpool>
  
anchor          Anker des Pools (dient beim wiederholten Import als Primärschlüssel
+
  <template ...>...</template>
                und als Parent für die Artikel)
 
name            Name des Pools
 
parent          Anker des Parentpools (Angabe muss über einen Anker erfolgen)
 
directory      Angabe des Arbeitsverzeichnisses dieses Artikelpools
 
-->
 
  
<articlepool
+
</xip>
  anchor="import.pool.1"
+
</source>
  name="Pool für importierte Artikel (Ebene 1)"
 
  parent="gui.informations"
 
  directory="/level_1">
 
  
    <!--
+
==Verzeichnisstruktur mit Dateien==
      Sämtliche META-Daten eines Pools werden vom System implizit in einer
+
XIP Daten können nicht nur aus einer XML-Datei, sondern auch aus mehreren Dateien in einer Verzeichnisstruktur beliebiger Tiefe bestehen. In einem gemeinsamen Verzeichnis können mehrere XML-Dateien abgelegt werden, die, wie im [[#Einfache XML Datei|obigen Abschnitt]] beschrieben, aufgebaut sein können.
      Resource gespeichert
 
    -->
 
    <resource>
 
        <!--
 
          einfache Textfelder, in denen die Konfiguration der Artikelpools
 
          steht (auch hier über die Angabe von Ankern gelöst)
 
        -->
 
  
        <!--
+
Artikel des IES können auch Medien enthalten. Um Medien eines Artikels in XIP zu beschreiben, bestehen zwei Möglichkeiten.
          Angabe des Containers:
+
# Die binären Daten des Mediums werden BAS64-Encodiert in der XML-Datei abgelegt
          "is5:gui.container.infosite.standard" oder
+
# Das Medium wird als eigene Datei in der Verzeichnisstruktur des XIP abgelegt. Der Pfad zu dem Medium kann innerhalb der XML-Datei des Artikels relativ zu dieser Datei angegeben werden.
          "is5:gui.container.infosite.media" möglich
 
        -->
 
        <text name="container" anchor="is5:gui.container.infosite.standard"></text>
 
  
        <!--
+
===XIP-INF Verzeichnis===
          Angabe des Template-Pools, für die Auswahl von Templates in diesem Pool:
+
Für den Aufbau eines XIP ist es Sinnvoll alle in einem Pool liegenden Elemente auch als XIP-Dateien in einem Verzeichnis abzulegen.
          Ein Anker aus dem eigenem System
+
Bei den oben beschriebenen XML-Dateien muss aber für jedes Element ein <code>parent</code> angegeben werden, um zu bestimmten, in welchem Pool das Element enthalten ist. Soll nachträglich das Element in einem anderen Pool (also in einem anderen Verzeichnis) abgelegt werden, muss auch immer das <code>parent</code>-Attribut für den neuen Pool gesetzt werden. Um flexibler mit XIP-Element-Dateien innerhalb von Verzeichnissen umgehen zu können, kann ein Verzeichnis als Pool definiert werden. Hierzu muss dieses Verzeichnis ein Unterverzeichnis <code>XIP-INF</code> besitzen. In diesem Unterverzeichnis wird eine Datei <code>pool.xml</code> abgelegt, die die XIP-Pool-Daten enthält. Alle XIP-Element-Dateien in diesem als Pool definierten Verzeichnis benötigen kein <code>parent</code>-Attribut mehr. Durch das Verzeichnis wird definiert, in welchem Pools sich das Element befindet.
        -->
 
        <text name="editorTemplatePool" anchor="standard.container.editing"></text>
 
  
        <!--
+
XIP-Basis-Verzeichnis
          Angabe des Templates für die Artikelanmeldung:
+
|
          "is5:gui.container.infosite.standard.all"
+
+-- Tutorial-Verzeichnis
          erlaubt beispielsweise das Anlegen aller Artikeltypen
+
    |
        -->
+
    +-- XIP-INF
        <text
+
    |  |
          name="registrationTemplate"
+
    |  +-- pool.xml
          anchor="is5:gui.container.infosite.standard.all">
+
    |
        </text>
+
    +-- XIP-Verzeichnis
 +
        |
 +
        +-- XIP-INF
 +
        |  |
 +
        |  + pool.xml
 +
        |  |
 +
        |  + permissions.xml (wenn auch Rechte definiert werden sollen)
 +
        |
 +
        +-- Beispiel_1.xml
 +
        |
 +
        +-- Beispiel_2.xml
 +
 
 +
<code>Tutorial-Verzeichnis/XIP-INF/pool.xml</code>
 +
<source lang="xml">
 +
<?xml version="1.0" encoding="UTF-8" ?>
  
        <!-- beliebige weitere Eingabefelder -->
+
<articlepool anchor="pool.tutorial" name="IES Tutorial" parent="gui.informations" directory="/tutorial">
        <text name="sp_rubric">demo</text>
 
        <systemlink name="sp_parentLink" anchor="article.rubric"/>
 
    </resource>
 
 
</articlepool>
 
</articlepool>
 
</source>
 
</source>
  
===Angaben zur Konfiguration===
+
<code>Tutorial-Verzeichnis/XIP-Verzeichnis/XIP-INF/pool.xml</code>
Damit ein Artikelpool in InfoSite 5 so funktioniert wie ein manuell ersteller Pool, müssen bestimmte Felder mit entsprechenden <code>META</code>-Daten angelegt werden. Hierzu zählen im Besonderen die Angaben zum Feld "<code>container</code>" und "<code>registration_template</code>". Die Felder "<code>editor_template_pool</code>" und "<code>editor_template</code>" verweisen auf das ausgewählte Template bzw. den Templatepool, der dem Redakteur zur Verfügung steht.
 
 
<source lang="xml">
 
<source lang="xml">
<!--
+
<?xml version="1.0" encoding="UTF-8" ?>
Angabe des Containers:
 
  is5:gui.container.infosite.standard
 
  is5:gui.container.infosite.media
 
-->
 
<text name="container" anchor="is5:gui.container.infosite.standard"></text>
 
  
<!--
+
<articlepool anchor="pool.tutorial.xip" name="XIP" directory="/xip">
Angabe des Template-Pools, für die Auswahl von Templates in diesem Pool:
+
  <resource>
  Ein Anker aus dem eigenem System
+
      <text name="container" anchor="is5:gui.container.infosite.standard"/>
-->
+
      <text name="editorTemplatePool" anchor="standard.container.editing"/>
<text name="editorTemplatePool" anchor="standard.container.editing"></text>
+
      <text name="registrationTemplate" anchor="is5:gui.container.infosite.standard.all"/>
 
+
  </resource>
<!--
+
</articlepool>
Angabe des Templates für die Artikelanmeldung:
 
  is5:gui.container.infosite.standard.all
 
  (erlaubt z.B. das Anlegen aller Artikeltypen)
 
-->
 
<text
 
  name="registrationTemplate"
 
  anchor="is5:gui.container.infosite.standard.all">
 
</text>
 
 
</source>
 
</source>
  
====Standard InfoSite Container====
+
<code>Tutorial-Verzeichnis/XIP-Verzeichnis/Beispiel_1.xml</code>
Der "Standard InfoSite Container" wird i.d.R. für alle normalen Artikelpools verwandt. Hierüber ist ein Redakteur in der Lage, Artikel jeden Typs anzulegen. Die Konfiguration der möglichen Artikeltypen wird über das Feld "<code>registration_template</code>" vorgenommen. Dies erfolgt in InfoSite über eine Select-Box. Im XML-Dokument müssen diese Werte manuell über Anker eingestellt werden. Folgende Anker sind dafür vorhanden:
+
<source lang="xml">
;"alle Artikel-Typen"
+
<?xml version="1.0" encoding="UTF-8" ?>
:<code>gui.container.infosite.standard.all</code>
 
;"nur Medien anlegen"
 
:<code>gui.container.infosite.standard.media</code>
 
;"nur Ressourcen anlegen"
 
:<code>gui.container.infosite.standard.resource</code>
 
;"nur Seiten anlegen"
 
:<code>gui.container.infosite.standard.page</code>
 
;"nur Seiten ohne Namensvergabe anlegen"
 
:<code>gui.container.infosite.standard.pageAutoName</code>
 
;"nur Seiten und Medien anlegen"
 
:<code>gui.container.infosite.standard.pageAndMedia</code>
 
;"nur Seiten und Ressourcen anlegen"
 
:<code>gui.container.infosite.standard.pageAndResource</code>
 
  
====Standard Medien Container====
+
<article anchor="article.example.xip.1" name="Example 1" template="tpl.content" filename="article.example">
Der "Standard Medien Container" wird für reine Medienpools verwandt. Hier sind neben der Angabe <code>Container</code> keine weiteren Angaben notwendig.
+
  <text name="sp_title">Einfache XIP-Datei 1 von 2</text>
 
+
</article>
==Nutzer-, Template- und Rollenpools==
+
</source>
Um einen Nutzer-, Rollen oder Templatepool zu importieren, muss eine XML-Datei erstellt werden, die das entsprechende Root-Element, also "<code>userpool</code>", "<code>templatepool</code>" oder "<code>rolepool</code>" verwendet. Attribute des Tags erlauben die Beschreibung des Pools. Alle Angaben neben Systemwerten werden innerhalb eines Resource-Tags vorgenommen. Hier gelten die selben Bedingungen wie bei Resource-Artikeln.
 
  
Attribute der XML-Elemente "<code>userpool</code>", "<code>templatepool</code>", "<code>rolepool</code>"
+
===Lange Verzeichnisnamen unter Windows===
;<code>anchor</code>
+
Auch wenn es für XIP keine Begrenzung der Verzeichnistiefe gibt, sollte dennoch beachtet werden das unter Windows ein Dateiname mit Verzeichnis-Pfad aus maximal 255 Zeichen bestehen darf. Für die im XIP enthaltenen Pfaden (die relativ sind) muss auch immer noch das Basis-Verzeichnis dazugerechnet werden (Z.B. <code>C:\Programme\Sitepark</code> oder ein beliebiges Verzeichnis, in dem mit XIP gearbeitet wird). Der daraus resultierende gesamte Pfad darf nicht mehr als 255 Zeichen enthalten.  
:Anker des Pools. Dient beim wiederholten Import als Primärschlüssel dieser Daten und als Parent für die Artikel ([[String]]).
 
;<code>name</code>
 
:Name des Pools ([[String]]).
 
;<code>parent</code>
 
:Anker des Parentpools. Die Angabe muss über einen Anker erfolgen ([[String]]).
 
  
 +
==ZIP-Datei, die Verzeichnisstrukturen mit Dateien enthält==
 +
Um XIP über das Netzwerk auszutauschen ist eine Verzeichnisstruktur ungeeignet. Die Verzeichnisstruktur kann gezippt werden, um daraus eine Datei zu erzeugen. Diese ZIP-Datei ist ebenfalls eine gültige XIP-Datei und sollte die Endung <code>.xip</code> besitzen.
  
 
<noinclude>
 
<noinclude>

Aktuelle Version vom 14. April 2010, 09:30 Uhr

Im einfachsten Fall besteht ein XIP aus einer XML-Datei. Die auszutauschenden Daten werden in einem definierten XML-Format beschrieben. Bei komplexeren Daten kann ein XIP aus mehreren Dateien bestehen, die unterhalb eines Verzeichnis liegen müssen, aber auch Unterverzeichnisse beliebiger Tiefe enthalten können. Dieses Verzeichnis kann auch mit ZIP zu einer ZIP-Datei zusammengefasst werden.

Ein XIP ist ein drei verschiedenen Formen gültig.

  1. Einfache XML-Datei
  2. Verzeichnisstruktur mit Dateien
  3. ZIP-Datei, die Verzeichnisstrukturen mit Dateien enthält


Einfache XML Datei

Eine einfache XML Datei kann eines der Folgenden Elemente enthalten:

Eine einfache XIP-Datei mit einem Artikel könnte z.B. so aussehen:

<?xml version="1.0" encoding="UTF-8" ?>

<article anchor="article.example.xip.1" name="Example 1" parent="pool.tutorial.xip" template="tpl.content" filename="article.example">
   <text name="sp_title">Einfache XIP-Datei</text>
</article>

Um mehrere Elemente in einer XML Datei zu definieren können alle oben aufgeführten Elemente innerhalb eines <xip>-Elementes liegen.

Eine einfache XML-Datei mit mehreren Artikeln könnte z.B. so aussehen:

<?xml version="1.0" encoding="UTF-8" ?>

<xip>
   <article anchor="article.example.xip.1" name="Example 1" parent="pool.tutorial.xip" template="tpl.content" filename="article.example">
      <text name="sp_title">Einfache XIP-Datei</text>
   </article>
   <media anchor="article.example.xip.2" name="Example 2" parent="pool.tutorial.xip">
      <binary url="file://./logo.gif"/>
   </media>
</xip>

Um ganze Poolstrukturen zu importieren, können innerhalb eines Pool-Elementes weitere Elemente und Unterpools liegen.

Eine einfache XML-Datei mit Poolstruktur könnte z.B. so aussehen:

<?xml version="1.0" encoding="UTF-8" ?>

<articlepool anchor="pool.tutorial" name="IES Tutorial" parent="gui.informations" directory="/tutorial">
   <articlepool anchor="pool.tutorial.xip" name="XIP" parent="pool.tutorial.xip" directory="/xip">
      <resource>
         <text name="container" anchor="is5:gui.container.infosite.standard"/>
         <text name="editorTemplatePool" anchor="standard.container.editing"/>
         <text name="registrationTemplate" anchor="is5:gui.container.infosite.standard.all"/>
      </resource>

      <article anchor="article.example.xip.1" name="Example 1" parent="pool.tutorial.xip" template="tpl.content" filename="article.example">
         <text name="sp_title">Einfache XIP-Datei</text>
      </article>
      <media anchor="article.example.xip.2" name="Example 2" parent="pool.tutorial.xip">
         <binary url="file://./logo.gif"/>
      </media>

   </articlepool>
</articlepool>

Das zusammenfassen von Elementen mit dem <xip>-Element und über Pool-Elemente läßt sich auch kombinieren, so das auch die unterschiedlichen Elemente innerhalb einer XML-Datei zusammengefasst werde können.

<?xml version="1.0" encoding="UTF-8" ?>

<xip>

   <articlepool ...>
      <article ...>...</article>
      <articlepool ...>
         <article ...>...</article>
      </articlepool>
   </articlepool>

   <userpool ...>
      <user ...>...</user>
   </userpool>

   <template ...>...</template>

</xip>

Verzeichnisstruktur mit Dateien

XIP Daten können nicht nur aus einer XML-Datei, sondern auch aus mehreren Dateien in einer Verzeichnisstruktur beliebiger Tiefe bestehen. In einem gemeinsamen Verzeichnis können mehrere XML-Dateien abgelegt werden, die, wie im obigen Abschnitt beschrieben, aufgebaut sein können.

Artikel des IES können auch Medien enthalten. Um Medien eines Artikels in XIP zu beschreiben, bestehen zwei Möglichkeiten.

  1. Die binären Daten des Mediums werden BAS64-Encodiert in der XML-Datei abgelegt
  2. Das Medium wird als eigene Datei in der Verzeichnisstruktur des XIP abgelegt. Der Pfad zu dem Medium kann innerhalb der XML-Datei des Artikels relativ zu dieser Datei angegeben werden.

XIP-INF Verzeichnis

Für den Aufbau eines XIP ist es Sinnvoll alle in einem Pool liegenden Elemente auch als XIP-Dateien in einem Verzeichnis abzulegen. Bei den oben beschriebenen XML-Dateien muss aber für jedes Element ein parent angegeben werden, um zu bestimmten, in welchem Pool das Element enthalten ist. Soll nachträglich das Element in einem anderen Pool (also in einem anderen Verzeichnis) abgelegt werden, muss auch immer das parent-Attribut für den neuen Pool gesetzt werden. Um flexibler mit XIP-Element-Dateien innerhalb von Verzeichnissen umgehen zu können, kann ein Verzeichnis als Pool definiert werden. Hierzu muss dieses Verzeichnis ein Unterverzeichnis XIP-INF besitzen. In diesem Unterverzeichnis wird eine Datei pool.xml abgelegt, die die XIP-Pool-Daten enthält. Alle XIP-Element-Dateien in diesem als Pool definierten Verzeichnis benötigen kein parent-Attribut mehr. Durch das Verzeichnis wird definiert, in welchem Pools sich das Element befindet.

XIP-Basis-Verzeichnis
|
+-- Tutorial-Verzeichnis
    |
    +-- XIP-INF
    |   |
    |   +-- pool.xml
    |
    +-- XIP-Verzeichnis
        |
        +-- XIP-INF
        |   |
        |   + pool.xml
        |   |
        |   + permissions.xml (wenn auch Rechte definiert werden sollen)
        |
        +-- Beispiel_1.xml
        |
        +-- Beispiel_2.xml

Tutorial-Verzeichnis/XIP-INF/pool.xml

<?xml version="1.0" encoding="UTF-8" ?>

<articlepool anchor="pool.tutorial" name="IES Tutorial" parent="gui.informations" directory="/tutorial">
</articlepool>

Tutorial-Verzeichnis/XIP-Verzeichnis/XIP-INF/pool.xml

<?xml version="1.0" encoding="UTF-8" ?>

<articlepool anchor="pool.tutorial.xip" name="XIP" directory="/xip">
   <resource>
      <text name="container" anchor="is5:gui.container.infosite.standard"/>
      <text name="editorTemplatePool" anchor="standard.container.editing"/>
      <text name="registrationTemplate" anchor="is5:gui.container.infosite.standard.all"/>
   </resource>
</articlepool>

Tutorial-Verzeichnis/XIP-Verzeichnis/Beispiel_1.xml

<?xml version="1.0" encoding="UTF-8" ?>

<article anchor="article.example.xip.1" name="Example 1" template="tpl.content" filename="article.example">
  <text name="sp_title">Einfache XIP-Datei 1 von 2</text>
</article>

Lange Verzeichnisnamen unter Windows

Auch wenn es für XIP keine Begrenzung der Verzeichnistiefe gibt, sollte dennoch beachtet werden das unter Windows ein Dateiname mit Verzeichnis-Pfad aus maximal 255 Zeichen bestehen darf. Für die im XIP enthaltenen Pfaden (die relativ sind) muss auch immer noch das Basis-Verzeichnis dazugerechnet werden (Z.B. C:\Programme\Sitepark oder ein beliebiges Verzeichnis, in dem mit XIP gearbeitet wird). Der daraus resultierende gesamte Pfad darf nicht mehr als 255 Zeichen enthalten.

ZIP-Datei, die Verzeichnisstrukturen mit Dateien enthält

Um XIP über das Netzwerk auszutauschen ist eine Verzeichnisstruktur ungeeignet. Die Verzeichnisstruktur kann gezippt werden, um daraus eine Datei zu erzeugen. Diese ZIP-Datei ist ebenfalls eine gültige XIP-Datei und sollte die Endung .xip besitzen.