XIP Format: Unterschied zwischen den Versionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
 
(25 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
  
==Artikel==
 
Für die drei Artikeltypen steht jeweils ein eigener XML-Tag zur Verfügung, über den die Daten angelegt, bzw. aktualisiert werden. Die Regeln für den Import der eigentlichen Inhaltsfelder ist danach für alle Artikeltypen identisch.
 
  
Die unterschiedlichen Inhaltsfelder werden in Contenttypen unterschieden. Alle Contenttypen werden über einen eigenen XML-Tag beschrieben. Die Typen sind analog zu den Typen aus InfoSite. Neben dem Attribut <code>name</code> wird auch das Attribut <code>locale</code> für alle Tags unterstützt. Die Tags im einzelnen sind:
+
==Einfache XML Datei==
  
;<code>text</code>
+
Eine einfache XML Datei kann eines der Folgenden Elemente enthalten:
:Import einfacher Textinhalte
+
* [[XIP Article]]
:<code><text name="sp_headline">Die Rubrikseite</text></code>
+
* [[XIP User]]
:<code><text name="sp_intro" locale="de">Links auf alle anderen importierten Seiten</text></code>
+
* [[XIP Template]]
 +
* [[XIP Role]]
 +
* [[XIP Pool]]
 +
* [[XIP Permissions]]
  
;<code>date</code>
+
Eine einfache XIP-Datei mit einem Artikel könnte z.B. so aussehen:
:Import Long-Werte als Typ Date
+
<source lang="xml">
:<code><date name="sp_date">1165408738935</date></code>
+
<?xml version="1.0" encoding="UTF-8" ?>
  
;<code>number</code>
+
<article anchor="article.example.xip.1" name="Example 1" parent="pool.tutorial.xip" template="tpl.content" filename="article.example">
:Import Zahlen als Typ Number
+
  <text name="sp_title">Einfache XIP-Datei</text>
:<code><number name="sp_number" locale="de_DE">123</number></code>
+
</article>
 
 
;<code>mail</code>
 
:Import von Text-Feldern vom Typ Mail. Inhalte werden nicht validiert und können über "<code>.mail</code>" ausgegeben werden.
 
:<code><mail name="sp_mail">Email: support@sitepark.com</mail></code>
 
 
 
;<code>email</code>
 
:Import von Text-Feldern vom Typ Email. Inhalte können validiert werden. Dieser Typ wird in der Regel vom Newsletter oder ähnlichen Modulen verwendet und kann über "<code>.email</code>" ausgegeben werden.
 
:<code><text name="sp_mail">Email vom Sitepark Support</text></code>
 
:<code><email name="sp_mail">support@sitepark.com</email></code>
 
 
 
;<code>query</code>
 
:Import von Queries.
 
:<code><query name="sp_query">parent = !{myparent}</query></code>
 
 
 
;<code>url</code>
 
:Import manuell eingegebener URLs
 
:<code><text name="external">www.google.de</text></code>
 
:<code><url name="external">http://www.google.de</url></code>
 
 
 
;<code>link, navlink, systemlink</code>
 
:Import von Links zu anderen Artikeln (können bereits bestehen, oder werden ebenfalls importiert) Die Verknüpfung erfolgt über einen Anker. Wenn der angegebene Anker (noch) nicht verfügbar ist, wird dieses Feld nicht importiert.
 
<source lang="xml">
 
<systemlink name="sp_link" anchor="article.x"/>
 
<link name="sp_simplelink" anchor="article.y"/>
 
 
</source>
 
</source>
  
;<code>list und item</code>
+
Um mehrere Elemente in einer XML Datei zu definieren können alle oben aufgeführten Elemente innerhalb eines <code><xip></code>-Elementes liegen.
:Mit diesen XML-Tags werden Listen erstellt. Über Listen werden vom System Iterate-Felder angelegt, die entsprechend der Inhalte gefüllt sind. Mehrere "<code>item</code>"-Blöcke untereinander erstellen mehrere Iterate-Blöcke.
 
<source lang="xml">
 
<!-- ein Iterator (hier für Texte und Links) -->
 
<list name="sp_main_iterate">
 
  <item>
 
    <!-- Einfache Inhaltsfelder -->
 
    <text name="sp_subheadline">Content:</text>
 
    <text name="sp_part">Link auf die Rubrikseite</text>
 
 
 
    <!-- Link auf einen anderen Artikel -->
 
    <link name="sp_link" anchor="article.rubric"/>
 
  </item>
 
</list>
 
</source>
 
  
;<code>binary</code>
+
Eine einfache XML-Datei mit mehreren Artikeln könnte z.B. so aussehen:
:Mit diesem Tag werden Upload-Felder definiert. Dies ermöglicht das Einbinden von Medien in Artikel, oder das Anlegen von Medienartikeln. Das Attribut "<code>url</code>" gibt an, wo sich die zu importierende Datei befindet. Hier ist die Angabe eines relativen oder absoluten Pfades ebenso wie die Angabe einer externen URL möglich:
 
 
<source lang="xml">
 
<source lang="xml">
  <binary name="sp_externalmedia_1" url="file://../media/a.gif"/>
+
<?xml version="1.0" encoding="UTF-8" ?>
  <binary name="sp_externalmedia_1" url="file://./image.gif"/>
 
  <binary name="sp_externalmedia_2" url="file:///tmp/level_1/media/b.gif"/>
 
  <binary name="sp_externalmedia_3" url="http://www.sitepark.com/btn_ies.gif"/>
 
</source>
 
  
;<code>publication-state</code>
+
<xip>
:Dieser Tag dient zur Steuerung der Publikation des Artikels. Die Angabe kann sowohl über die Publisher-ID, als auch über den entsprechenden Anker vorgenommen werden. Es sind hier nur die Publikationsbereiche anzugeben, in denen der Artikel publiziert werden soll. Alle übrigen Publikationsbereiche können weggelassen werden. Alternativ kann auch der Status auf 0 gesetzt werden. Beachten Sie, dass die Rechte des Import-Nutzer ausreichen.
+
  <article anchor="article.example.xip.1" name="Example 1" parent="pool.tutorial.xip" template="tpl.content" filename="article.example">
<source lang="xml">
+
      <text name="sp_title">Einfache XIP-Datei</text>
<publication-state publisher-id="pub1" status="1"/>
+
  </article>
<publication-state publisher-id="pub2" status="0"/>
+
  <media anchor="article.example.xip.2" name="Example 2" parent="pool.tutorial.xip">
<publication-state anchor="preview" status="1"/>
+
      <binary url="file://./logo.gif"/>
 +
  </media>
 +
</xip>
 
</source>
 
</source>
  
;<code>calendar</code>
+
Um ganze Poolstrukturen zu importieren, können innerhalb eines Pool-Elementes weitere Elemente und Unterpools liegen.
:Dieser Tag dient zur Beschreibung von Terminen. Auch Angaben zur Freischaltung erfolgen über diesen Tag. Zu beachten ist, dass die Zeiten als Long-Werte (Millisekunden seit 00:00:00 Uhr 01.01.1970) angegeben werden müssen.
 
 
 
Details zu Terminen werden über den <code>entry</code>-Tag beschrieben. Folgende Attribute sind hier möglich:
 
;<code>from</code>
 
:Long Wert für den Beginn des Termins
 
;<code>to</code>
 
:Long Wert für das Ende des Termins
 
;<code>type</code>
 
:Typ des Termins (<code>day, daily, weekly, monthlyByDay, monthlyByOccurrence, yearlyByDay, yearlyByOccurrence, yearlyByMonth</code>)
 
;<code>interval</code>
 
:Wiederholungsintervall des Termins (z.B. jeden 2-ten Tag)
 
;<code>all-day</code>
 
:Ganztägiger Termin (<code>true</code>, <code>false</code>)
 
;<code>repetition-count</code>
 
:Anzahl der Wiederholungen
 
;<code>repetition-date</code>
 
:Long Wert für das Ende der Wiederholungen
 
;<code>dow</code>
 
:Tage der Woche, an denen der Termin stattfindet (<code>sun,mon,tue,wed,thu,fri,sat</code>)
 
;<code>dom</code>
 
:Zahl für den Tag des Monats
 
;<code>doy</code>
 
:Zahl für den Tag des Jahres
 
;<code>oom</code>
 
:Zahl für das Vorkommen in der Woche (z.B. 1. Freitag im Monat)
 
;<code>moy</code>
 
:Zahl für den Monat des Jahres (0=Januar, 11=Dezember)
 
 
 
Ein Wiederhol-Termin könnte z.B: durch folgenden XML-Code beschrieben werden:
 
<source lang="xml">
 
<calendar name="sp_date">
 
  <entry from="1208296800000" to="1208296800000"
 
    type="weekly"
 
    interval="0"
 
    all-day="true"
 
    repetition-date="1208383200000"
 
    dow="wed,thu"/>
 
</calendar>
 
</source>
 
  
Um einen Artikel von Zeitpunkt A bis zum Zeitpunkt B in den Publikationsbereichen "<code>www</code>" und "<code>preview</code>" freizugeben, ist folgender XML-Code zu generieren:
+
Eine einfache XML-Datei mit Poolstruktur könnte z.B. so aussehen:
 
<source lang="xml">
 
<source lang="xml">
<calendar name="publicationFrom">
+
<?xml version="1.0" encoding="UTF-8" ?>
  <entry from="978351240000" to="978351240000"/>
 
  <publish-task template="my.template.anchor">
 
    <publisher anchor="www"/>
 
    <publisher anchor="preview"/>
 
  </publish-task>
 
</calendar>
 
<calendar name="publicationTo">
 
  <entry from="1355353140000" to="1355353140000"/>
 
  <depublish-task template-id="1010100000026042-6000">
 
    <publisher publisher-id="pub1"/>
 
    <publisher anchor="preview"/>
 
  </depublish-task>
 
</calendar>
 
</source>
 
  
;<code>linktree</code> (ab Version 2.0.1)
+
<articlepool anchor="pool.tutorial" name="IES Tutorial" parent="gui.informations" directory="/tutorial">
:Import vom LinkTrees wie z.B. Sitemaps.
+
  <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>
  
Folgende Attribute sind hier möglich:
+
      <article anchor="article.example.xip.1" name="Example 1" parent="pool.tutorial.xip" template="tpl.content" filename="article.example">
;<code>name</code>
+
        <text name="sp_title">Einfache XIP-Datei</text>
:Name des Feldes
+
      </article>
;<code>parentlink</code>
+
      <media anchor="article.example.xip.2" name="Example 2" parent="pool.tutorial.xip">
:Name des Links, der auf einen, in der zu erstellenden Struktur, übergeordneten Artikel verweist.
+
        <binary url="file://./logo.gif"/>
;<code>rootelement-anchor</code>
+
      </media>
:Anchor des Root-Elements des Baums. Ist kein Root-Element angegeben, wird der dazugehörige Artikel als Root-Element verwendet.
 
;<code>attributes</code>
 
:Eine Kommaseparierte Liste von Attributen, die der Artikel enthalten und auf dessen Änderungen er reagieren soll.
 
;<code>localelink</code>
 
:Mit diesem Attribut kann angegeben werden, ob ein Linktree sprachabhängig aufgebaut werden soll. Wird localelink auf true gesetzt, wird die Sprache des Publikationsbereichs für den Tree verwendet. Die Parentlinks, die den Baum ergeben, müssen dann mit einer Sprache definiert werden.  
 
;<code>sortkeys</code>
 
:Attribute des Artikels, nach denen der Baum sortiert werden soll. Jede Ebene des Baums wird für sich sortiert.
 
;<code>sortsequences</code>
 
:Für jedes Sortierkriterium muss eine Sortierreihenfolge festgelegt werden, mit der bestimmt wird, ob mit dem Sortierkriterium aufsteigend (<code>desc</code>), absteigend (<code>asc</code>) oder zufällig (<code>random</code>) sortiert wird.  
 
;<code>sorttypes</code>
 
:Für jedes Sortierkriterium kann ein Sortiertyp festgelegt werden, der bestimmt, wie sortiert wird. Dabei ist eine Sortierung von Zeichenketten (<code>text</code>) oder eine Sortierung von Zahlen (<code>number</code>) möglich.
 
  
Beispiel für einen LinkTree import:
+
  </articlepool>
<source lang="xml">
+
</articlepool>
<linktree
 
  name="sp_sitemap" parentlink="sp_parent.link" rootelement-anchor="information.sg.homepage"
 
  localelink="true" attributes="sp_title,sp_tooltip,sp_menuSperre,sp_parent.link,editor_template"
 
  sortkeys="name"/>
 
 
</source>
 
</source>
  
===Eigene Seiten===
+
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 Artikel zu importieren muss eine XML-Datei erstellt werden, die das Root-Element "<code>article</code>" verwendet. Attribute des Tags erlauben die Beschreibung des Artikels. Alle Angaben neben Systemwerten werden über den oben beschriebenen Tag vorgenommen.
 
;<code>anchor</code>
 
:Anker des Artikels. Dient beim wiederholten Import als Primärschlüssel dieser Daten ([[String]]).
 
;<code>name</code>
 
:Name des Artikels.
 
;<code>parent</code>
 
:Anker des Parentpools. Die Angabe muss über einen Anker erfolgen ([[String]]).
 
;<code>template</code>
 
:Anker des Templates, welches diesem Artikel zugewiesen werden soll. Die Angabe muss über einen Anker erfolgen ([[String]]).
 
;<code>filename</code>
 
:Der Dateiname des Artikels. Fehlt dieses Attribut, so wird der Dateiname automatisch vergeben ([[String]]).
 
 
 
Hier ein vollständiges Beispiel eines Artikels:
 
 
<source lang="xml">
 
<source lang="xml">
<!--
+
<?xml version="1.0" encoding="UTF-8" ?>
Einen Artikel anlegen:
 
  
<article    legt einen Artikel an
+
<xip>
<media      legt ein Medium an
 
<resource  legt einen Resource-Artikel an
 
  
anchor      Anker des Artikels (dient beim wiederholten Import als Primärschlüssel)
+
   <articlepool ...>
name        Name des Artikels
+
      <article ...>...</article>
parent      Anker des Parentpools (Angabe muss über einen Anker erfolgen)
+
      <articlepool ...>
template   Anker des verwendeten Templates (Angabe muss über einen Anker erfolgen)
+
        <article ...>...</article>
filename    Dateiname des Artikels (nur für den Typ <article)
+
      </articlepool>
-->
+
  </articlepool>
<article
 
  anchor="article.america"
 
  name="The World according to America"
 
  parent="import.pool.1"
 
  template="tpl.content"
 
  filename="article.america">
 
  
    <!-- Kommantarfeld des Artikels -->
+
  <userpool ...>
    <comment>kann: Ein kleiner Kommentar</comment>
+
      <user ...>...</user>
 +
  </userpool>
  
    <!-- Publikationsstatus des Artikels -->
+
  <template ...>...</template>
    <publication-state publisher-id="pub1" status="1" />
 
    <publication-state publisher-id="pub2" status="1" />
 
  
    <!-- Einfache Inhaltsfelder -->
+
</xip>
    <text name="sp_headline">The World According To America</text>
 
    <text name="sp_intro">
 
      Kleine Zeichnung zum amerikanischen Verständnis der Welt.
 
    </text>
 
 
 
    <!-- Beispiel für einer Checkbox true/false -->
 
    <text name="sp_textHTML">true</text>
 
 
 
    <!-- Beispiel für eine Selectbox -->
 
    <text name="sp_select">left</text>
 
 
 
    <!-- ein Iterator (hier für Texte und Links) -->
 
    <list name="sp_main_iterate">
 
        <item>
 
            <!-- Einfache Inhaltsfelder -->
 
            <text name="sp_subheadline">The World:</text>
 
            <text name="sp_part">
 
              Hier kommt die Grafik und ein Link auf die Rubrikseite
 
            </text>
 
 
 
            <!-- Systemlink auf einen anderen Artikel -->
 
            <systemlink name="sp_mon_link" anchor="article.rubric"/>
 
 
 
            <!-- Navlink auf einen anderen Artikel -->
 
            <systemlink name="sp_nav_link" anchor="article.content.2"/>
 
 
 
            <!-- Link auf einen anderen Artikel -->
 
            <link name="sp_link" anchor="article.rubric"/>
 
            <text name="sp_link">link auf article.rubric</text>
 
 
 
            <!-- Link auf ein Medium -->
 
            <systemlink name="sp_image" anchor="image.america"/>
 
 
 
            <!-- Externe URL und Linktext -->
 
            <text name="sp_external">www.google.de</text>
 
            <url name="sp_external">http://www.google.de</url>
 
        </item>
 
    </list>
 
 
 
    <!--
 
      ein Upload-Feld (das Medium wird beim Import von der angegebenen URL
 
      (extern oder relativ) geladen)
 
    -->
 
    <binary name="sp_externalmedia" url="http://www.sitepark.com/btn_ies.gif"/>
 
</article>
 
 
</source>
 
</source>
  
===Medien===
+
==Verzeichnisstruktur mit Dateien==
Um ein Medium zu importieren, muss neben dem eigentlichen Medium eine XML-Datei erstellt werden, die das Root-Element "<code>media</code>" verwendet. In dieser Datei wird das Medium beschrieben und ein Anker zugewiesen. Alle Angaben neben Systemwerten werden über den oben beschriebenen Tag vorgenommen.
+
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.
 
 
Hier ein vollständiges Beispiel eines Medienimports:
 
<source lang="xml">
 
<!--
 
Einen Artikel anlegen:
 
 
 
<article    legt einen Artikel an
 
<media      legt ein Medium an
 
<resource  legt einen Resource-Artikel an
 
  
anchor      Anker des Artikels (dient beim wiederholten Import als Primärschlüssel)
+
Artikel des IES können auch Medien enthalten. Um Medien eines Artikels in XIP zu beschreiben, bestehen zwei Möglichkeiten.
name        Name des Artikels
+
# Die binären Daten des Mediums werden BAS64-Encodiert in der XML-Datei abgelegt
parent      Anker des Parentpools (Angabe muss über einen Anker erfolgen)
+
# 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.
template    Anker des verwendeten Templates (Angabe muss über einen Anker erfolgen)
 
filename    Dateiname des Artikels (nur für den Typ <article)
 
-->
 
<media
 
  anchor="image.america"
 
  name="The World according to America (IMAGE)"
 
  parent="import.pool.media">
 
  
    <!-- Kommantarfeld des Artikels -->
+
===XIP-INF Verzeichnis===
    <comment>kann: Ein kleiner Kommentar</comment>
+
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 <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.
  
    <!-- Publikationsstatus des Artikels -->
+
XIP-Basis-Verzeichnis
    <publication-state publisher-id="pub1" status="1" />
+
|
    <publication-state publisher-id="pub2" status="1" />
+
+-- 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
  
    <!--  
+
<code>Tutorial-Verzeichnis/XIP-INF/pool.xml</code>
      ein Upload-Feld (das Medium wird beim Import von der angegebenen URL
 
      (extern oder relativ) geladen)
 
    -->
 
    <binary url="file://./america.gif"/>
 
</media>
 
</source>
 
 
 
===Resourcen===
 
Falls Resourceartikel importiert werden sollen, steht der Tag "<code>resource</code>" zur Verfügung. Die Beschreibung der Daten erfolgt analog zu den anderen Artikeltypen. Lediglich das Root-Element muss vom Typ "<code>resource</code>" sein.
 
 
 
Hier ein vollständiges Beispiel eines Medienimports:
 
 
<source lang="xml">
 
<source lang="xml">
<!--
+
<?xml version="1.0" encoding="UTF-8" ?>
Einen Artikel anlegen:
 
  
<article    legt einen Artikel an
+
<articlepool anchor="pool.tutorial" name="IES Tutorial" parent="gui.informations" directory="/tutorial">
<media      legt ein Medium an
+
</articlepool>
<resource  legt einen Resource-Artikel an
 
 
 
anchor      Anker des Artikels (dient beim wiederholten Import als Primärschlüssel)
 
name        Name des Artikels
 
parent      Anker des Parentpools (Angabe muss über einen Anker erfolgen)
 
template    Anker des verwendeten Templates (Angabe muss über einen Anker erfolgen)
 
filename    Dateiname des Artikels (nur für den Typ <article>)
 
-->
 
<resource
 
  anchor="article.externe.url"
 
  name="Eine externe URL"
 
  parent="import.pool.1"
 
  template="tpl.external">
 
 
 
    <!-- Kommantarfeld des Artikels -->
 
    <comment>kann: Ein kleiner Kommentar</comment>
 
 
 
    <!-- Publikationsstatus des Artikels -->
 
    <publication-state publisher-id="pub1" status="1" />
 
    <publication-state publisher-id="pub2" status="1" />
 
 
 
    <!--
 
      Externe URL und Linktext.
 
      name "external" sorgt bei Resource-Artikeln automatisch für die Ausgabe
 
      der richtigen URL
 
    -->
 
    <text name="external">www.google.de</text>
 
    <url name="external">http://www.google.de</url>
 
 
 
</resource>
 
</source>
 
 
 
==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"
 
;<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==
 
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.
 
 
 
Attribute bzw. Unterelemente des XML-Elements "<code>template</code>"
 
;<code>anchor</code>
 
:Anker des Templates. Dient beim wiederholten Import als Primärschlüssel dieser Daten und als Parent für die Artikel ([[String]]).
 
;<code>name</code>
 
: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]]).
 
 
 
 
 
Das Feld "<code>layout</code>" wird als "<code>text</code>" innerhalb einer "<code>resource</code>" definiert und hat folgende Werte:
 
;<code>common</code>
 
:Normales Template.
 
;<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==
 
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>".
 
 
 
Attribute des XML-Elements "<code>role</code>"
 
;<code>anchor</code>
 
:Anker der Rolle. Dient beim wiederholten Import als Primärschlüssel dieser Daten und als Parent für die Artikel ([[String]]).
 
;<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">
 
<publisher publisher-id="pub1" hide="true"/>
 
<publisher publisher-id="pub2" hide="false"/>
 
<publisher anchor="preview" hide="false"/>
 
 
</source>
 
</source>
  
==Artikelpools==
+
<code>Tutorial-Verzeichnis/XIP-Verzeichnis/XIP-INF/pool.xml</code>
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.
 
 
 
Attribute des XML-Elements "<code>articlepool</code>"
 
;<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:
 
 
<source lang="xml">
 
<source lang="xml">
<!--
+
<?xml version="1.0" encoding="UTF-8" ?>
Einen Artikelpool anlegen:
 
  
<articlepool   legt einen Artikel an
+
<articlepool anchor="pool.tutorial.xip" name="XIP" directory="/xip">
 
+
  <resource>
anchor          Anker des Pools (dient beim wiederholten Import als Primärschlüssel
+
      <text name="container" anchor="is5:gui.container.infosite.standard"/>
                und als Parent für die Artikel)
+
      <text name="editorTemplatePool" anchor="standard.container.editing"/>
name            Name des Pools
+
      <text name="registrationTemplate" anchor="is5:gui.container.infosite.standard.all"/>
parent          Anker des Parentpools (Angabe muss über einen Anker erfolgen)
+
  </resource>
directory      Angabe des Arbeitsverzeichnisses dieses Artikelpools
 
-->
 
 
 
<articlepool
 
  anchor="import.pool.1"
 
  name="Pool für importierte Artikel (Ebene 1)"
 
  parent="gui.informations"
 
  directory="/level_1">
 
 
 
    <!--
 
      Sämtliche META-Daten eines Pools werden vom System implizit in einer
 
      Resource gespeichert
 
    -->
 
    <resource>
 
        <!--
 
          einfache Textfelder, in denen die Konfiguration der Artikelpools
 
          steht (auch hier über die Angabe von Ankern gelöst)
 
        -->
 
 
 
        <!--
 
          Angabe des Containers:
 
          "is5:gui.container.infosite.standard" oder
 
          "is5:gui.container.infosite.media" möglich
 
        -->
 
        <text name="container" anchor="is5:gui.container.infosite.standard"></text>
 
 
 
        <!--
 
          Angabe des Template-Pools, für die Auswahl von Templates in diesem Pool:
 
          Ein Anker aus dem eigenem System
 
        -->
 
        <text name="editorTemplatePool" anchor="standard.container.editing"></text>
 
 
 
        <!--
 
          Angabe des Templates für die Artikelanmeldung:
 
          "is5:gui.container.infosite.standard.all"
 
          erlaubt beispielsweise das Anlegen aller Artikeltypen
 
        -->
 
        <text
 
          name="registrationTemplate"
 
          anchor="is5:gui.container.infosite.standard.all">
 
        </text>
 
 
 
        <!-- beliebige weitere Eingabefelder -->
 
        <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/Beispiel_1.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>
 
  
<!--
+
<article anchor="article.example.xip.1" name="Example 1" template="tpl.content" filename="article.example">
Angabe des Template-Pools, für die Auswahl von Templates in diesem Pool:
+
   <text name="sp_title">Einfache XIP-Datei 1 von 2</text>
  Ein Anker aus dem eigenem System
+
</article>
-->
 
<text name="editorTemplatePool" anchor="standard.container.editing"></text>
 
 
 
<!--
 
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====
+
===Lange Verzeichnisnamen unter Windows===
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:
+
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.  
;"alle Artikel-Typen"
 
:<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====
 
Der "Standard Medien Container" wird für reine Medienpools verwandt. Hier sind neben der Angabe <code>Container</code> keine weiteren Angaben notwendig.
 
 
 
==Nutzer-, Template- und Rollenpools==
 
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>"
 
;<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]]).
 
  
 +
==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>
 +
[[Category:XIP]]
 
[[Category:Qualität_des_Inhalts_prüfen]]
 
[[Category:Qualität_des_Inhalts_prüfen]]
 
[[Category:Qualität_des_Codes_prüfen]]
 
[[Category:Qualität_des_Codes_prüfen]]
 
</noinclude>
 
</noinclude>

Aktuelle Version vom 14. April 2010, 10: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.