DatabasePublisher (Objekt): Unterschied zwischen den Versionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
K (Schützte „DatabasePublisher (Objekt)“ [edit=autoconfirmed:move=autoconfirmed])
 
(9 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
{{Überarbeiten}}
 
{{Überarbeiten}}
 
==Name==
 
==Name==
DatabasePublisher - Publiziert [[Artikel]], [[Resource|Resourcen]] und [[Medium|Medien]] in eine Datebank
+
DatabasePublisher - Publiziert [[Article|Artikel]], [[Resource|Resourcen]] und [[Media|Medien]] in eine Datebank
  
 
==Beschreibung==
 
==Beschreibung==
Ein DatabasePublisher publiziert Artikel, Resourcen und Medien in eine Datebank. Dazu muß das Ausgabe-Template in einer XML-Struktur die Datensätze beschreiben, die in der Datenbank angelegt, geändert oder gelöscht werden sollen.
+
Ein DatabasePublisher publiziert Artikel, Resourcen und Medien in eine Datebank. Dazu muss das Ausgabe-Template in einer XML-Struktur die Datensätze beschreiben, die in der Datenbank angelegt, geändert oder gelöscht werden sollen.
 +
 
 +
===Beispiel: Insert-Statement===
 +
Das Insert-Statement fügt eine neue Zeile entsprechend der Angaben hinzu.
 +
<source lang="xml">
 +
<database-publishing>
 +
  <%-- Tabellen-Struktur bekannt geben --%>
 +
  <table name="BodyTable">
 +
    <key name="_id" type="long"/>
 +
    <column name="_body" type="string"/>
 +
  </table>
 +
  <%-- Aktion für Tabelle BodyTable --%>
 +
  <insert table="BodyTable">
 +
    <row>
 +
      <entry name="_id">123</entry>
 +
      <entry name="_body">text a</entry>
 +
    </row>
 +
    <row>
 +
      <entry name="_id">124</entry>
 +
      <entry name="_body">text b</entry>
 +
    </row>
 +
  </insert>
 +
</database-publishing>
 +
</source>
 +
 
 +
Daraus werden zwei SQL-Statements
 +
 
 +
<source lang="sql">
 +
INSERT INTO BodyTable _id, _body VALUES (123, "text a")
 +
INSERT INTO BodyTable _id, _body VALUES (124, "text b")
 +
</source>
 +
 
 +
===Beispiel: Update-Statement===
 +
 
 +
Ein Update-Statement erwartet einen Eintrag mit dem angegebenen Primary-Key und aktuallisiert dessen Werte.
 +
 
 +
<source lang="xml">
 +
<database-publishing>
 +
  <%-- Tabellen-Struktur bekannt geben --%>
 +
  <table name="BodyTable">
 +
    <key name="_id" type="long"/>
 +
    <column name="_body" type="string"/>
 +
  </table>
 +
  <%-- Aktion für Tabelle BodyTable --%>
 +
  <update table="BodyTable">
 +
    <row>
 +
      <entry name="_id">123</entry>
 +
      <entry name="_body">text c</entry>
 +
    </row>
 +
  </update>
 +
</database-publishing>
 +
</source>
 +
 
 +
Daraus wird ein SQL-Statement
 +
 
 +
<source lang="sql">
 +
UPDATE FROM BodyTable SET _body = "text c" WHERE _id = 123
 +
</source>
 +
 
 +
===Beispiel: Delete-Statement===
 +
Bei einem Delete-Statement muss lediglich der Schlüssel angegeben werden.
 +
 
 +
<source lang="xml">
 +
<database-publishing>
 +
  <%--
 +
    Tabellen-Struktur bekannt geben.
 +
    Da nur das Feld _id für die Aktion nötig ist,
 +
    wird auch nur dieses angegeben.
 +
  --%>
 +
  <table name="BodyTable">
 +
    <key name="_id" type="long"/>
 +
  </table>
 +
  <%-- Aktion für Tabelle BodyTable --%>
 +
  <delete table="BodyTable">
 +
    <row>
 +
      <entry name="_id">123</entry>
 +
    </row>
 +
  </delete>
 +
</database-publishing>
 +
</source>
 +
 
 +
Daraus wird ein SQL-Statement
 +
 
 +
<source lang="sql">
 +
DELETE FROM BodyTable WHERE _id = 123
 +
</source>
 +
 
 +
===Beispiel: Insert- oder Update-Statement===
 +
Je nach dem ob der Zeile schon existiert wird ein Insert- oder Update-Statement erzeugt.
 +
 
 +
<source lang="xml">
 +
<database-publishing>
 +
  <%-- Tabellen-Struktur bekannt geben --%>
 +
  <table name="BodyTable">
 +
    <key name="_id" type="long"/>
 +
    <column name="_body" type="string"/>
 +
  </table>
 +
  <%-- Aktion für Tabelle BodyTable --%>
 +
  <store table="BodyTable">
 +
    <row>
 +
      <entry name="_id">123</entry>
 +
      <entry name="_body">text d</entry>
 +
    </row>
 +
    <row>
 +
      <entry name="_id">125</entry>
 +
      <entry name="_body">text e</entry>
 +
    </row>
 +
  </store>
 +
</database-publishing>
 +
</source>
 +
 
 +
Daraus werden zwei SQL-Statements
 +
 
 +
<source lang="xml">
 +
UPDATE FROM BodyTable SET _body = "text d" WHERE _id = 123
 +
INSERT INTO BodyTable _id, _body VALUES(125, "text e")
 +
</source>
 +
 
 +
===Beispiel: Tabellen und Aktionen===
 +
Es können beliebig viele Tabellen und Aktionen verwendet werden.
 +
 
 +
<source lang="xml">
 +
<database-publishing>
 +
  <%-- Tabellen-Struktur bekannt geben --%>
 +
  <table name="ArticleTable">
 +
    <key name="_id" type="long"/>
 +
    <column name="_name" type="string"/>
 +
  </table>
 +
  <table name="BodyTable">
 +
    <key name="_id" type="long"/>
 +
    <column name="_body" type="string"/>
 +
  </table>
 +
 
 +
  <%-- Aktion für Tabelle BodyTable --%>
 +
  <store table="ArticleTable">
 +
    <row>
 +
      <entry name="_id">123</entry>
 +
      <entry name="_name">Ein Name</entry>
 +
    </row>
 +
  </store>
 +
  <%-- Aktion für Tabelle BodyTable --%>
 +
  <store table="BodyTable">
 +
    <row>
 +
      <entry name="_id">123</entry>
 +
      <entry name="_body">text d</entry>
 +
    </row>
 +
  </store>
 +
 
 +
  <table name="MyHistory">
 +
  <key name="_id" type="long"/>
 +
    <column name="_user" type="string"/>
 +
    <column name="_timestamp" type="string"/>
 +
  </table>
 +
  <create table="BodyTable">
 +
    <row>
 +
      <entry name="_id">123</entry>
 +
      <entry name="_user">Peter Lustig</entry>
 +
      <entry name="_timestamp">11.11.2004 11:11</entry>
 +
    </row>
 +
  </create>
 +
</database-publishing>
 +
</source>
 +
 
 +
 
 +
Regeln:
 +
# Tabellen-Definitionen können auch nach einer Aktion definiert werden. (Innerhalb von <database-publishing>)
 +
# Aktion können nur die Tabellen verwendet werden, die entsprechend definiert wurden
 +
# Definitionen überschreiben sich, wenn der Name identisch ist.
 +
# In dem <row>-Tag müssen so viele <entry>-Tags einthalten sein, wie in der Tabellen-Definition angegeben wurden.
 +
 
 +
 
 +
===Template===
 +
Um ein Template für verschiedene Publications-Typen zu definieren kann es wie folgt aufgebaut werden:
 +
<source lang="xml">
 +
<sp:io type="in">
 +
  <%-- Eingabe-Teil --%>
 +
</sp:io>
 +
 
 +
<sp:io type="out">
 +
  <sp:condition>
 +
 
 +
  <%-- "Normaler" File-Publisher --%>
 +
  <sp:if name="system.publisher.type" eq="file">
 +
    ...
 +
  </sp:if>
 +
 
 +
  <%-- Http-Publisher --%>
 +
  <sp:elseif name="system.publisher.type" eq="http">
 +
    ...
 +
  </sp:elseif>
 +
 
 +
  <%-- Database-Publisher --%>
 +
  <sp:elseif name="system.publisher.type" eq="database">
 +
 
 +
    <sp:condition>
 +
    <%-- Artikel wird (erneut) publiziert --%>
 +
      <sp:if name="system.publisher.isPublished">
 +
        <database-publishing>
 +
          <table ...>
 +
            ...
 +
          </table>
 +
          <store ...>
 +
            ...
 +
          </store>
 +
        </database-publishing>
 +
      </sp:if>
 +
 
 +
      <%-- Artikel depubliziert --%>
 +
      <sp:else>
 +
        <database-publishing>
 +
          <table ...>
 +
            ...
 +
          </table>
 +
          <delete ...>
 +
            ...
 +
          </delete>
 +
        </database-publishing>
 +
      </sp:else>
 +
    </sp:condition>
 +
 
 +
  </sp:elseif>
 +
</sp:io>
 +
</source>
 +
 
 +
 
  
 
==Attribute==
 
==Attribute==
{| class="prettytable"
+
{| class="prettytable sortable"
 
|- class="hintergrundfarbe1"
 
|- class="hintergrundfarbe1"
 
! Attribut || Type || Beschreibung || ab IES Version
 
! Attribut || Type || Beschreibung || ab IES Version
Zeile 42: Zeile 266:
 
|-
 
|-
 
| clients
 
| clients
| [[Collection]]
+
| [[Collection]]&nbsp;<[[Client]]>
 
| Liste der Mandanten, die Zugriff auf diesen Publisher haben
 
| Liste der Mandanten, die Zugriff auf diesen Publisher haben
 
| 1
 
| 1
 
|-
 
|-
 
| metadata
 
| metadata
| [[Map]]
+
| [[Map]]&nbsp;<[[String]],[[String]]>
 
| Metadaten eines Publishers
 
| Metadaten eines Publishers
 
| 1
 
| 1
Zeile 58: Zeile 282:
 
| isPublished
 
| isPublished
 
| [[Boolean]]
 
| [[Boolean]]
| Liefert im Out-Modus true, wenn der Artikel vom Publisher publiziert wird oder false, wenn der Artikel vom Publisher depubliziert wird
+
| Liefert im [[Template-Modus|Out-Modus]] true, wenn der Artikel vom Publisher publiziert wird oder false, wenn der Artikel vom Publisher depubliziert wird
 
| 1
 
| 1
 
|-
 
|-
Zeile 70: Zeile 294:
 
<noinclude>
 
<noinclude>
 
[[Category:Objekte]]
 
[[Category:Objekte]]
[[Category:Qualität_des_Inhalts_prüfen]]
 
[[Category:Qualität_der_Sprache_prüfen]]
 
 
[[Category:Qualität_des_Codes_prüfen]]
 
[[Category:Qualität_des_Codes_prüfen]]
 
</noinclude>
 
</noinclude>

Aktuelle Version vom 3. November 2010, 13:26 Uhr

Dieser Artikel bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf bitte mit ihn zu verbessern und entferne anschließend diese Markierung.

Name

DatabasePublisher - Publiziert Artikel, Resourcen und Medien in eine Datebank

Beschreibung

Ein DatabasePublisher publiziert Artikel, Resourcen und Medien in eine Datebank. Dazu muss das Ausgabe-Template in einer XML-Struktur die Datensätze beschreiben, die in der Datenbank angelegt, geändert oder gelöscht werden sollen.

Beispiel: Insert-Statement

Das Insert-Statement fügt eine neue Zeile entsprechend der Angaben hinzu.

<database-publishing>
  <%-- Tabellen-Struktur bekannt geben --%>
  <table name="BodyTable">
    <key name="_id" type="long"/>
    <column name="_body" type="string"/>
  </table>
  <%-- Aktion für Tabelle BodyTable --%>
  <insert table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_body">text a</entry>
    </row>
    <row>
      <entry name="_id">124</entry>
      <entry name="_body">text b</entry>
    </row>
  </insert>
</database-publishing>

Daraus werden zwei SQL-Statements

INSERT INTO BodyTable _id, _body VALUES (123, "text a")
INSERT INTO BodyTable _id, _body VALUES (124, "text b")

Beispiel: Update-Statement

Ein Update-Statement erwartet einen Eintrag mit dem angegebenen Primary-Key und aktuallisiert dessen Werte.

<database-publishing>
  <%-- Tabellen-Struktur bekannt geben --%>
  <table name="BodyTable">
    <key name="_id" type="long"/>
    <column name="_body" type="string"/>
  </table>
  <%-- Aktion für Tabelle BodyTable --%>
  <update table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_body">text c</entry>
    </row>
  </update>
</database-publishing>

Daraus wird ein SQL-Statement

UPDATE FROM BodyTable SET _body = "text c" WHERE _id = 123

Beispiel: Delete-Statement

Bei einem Delete-Statement muss lediglich der Schlüssel angegeben werden.

<database-publishing>
  <%--
    Tabellen-Struktur bekannt geben.
    Da nur das Feld _id für die Aktion nötig ist,
    wird auch nur dieses angegeben.
  --%>
  <table name="BodyTable">
    <key name="_id" type="long"/>
  </table>
  <%-- Aktion für Tabelle BodyTable --%>
  <delete table="BodyTable">
    <row>
      <entry name="_id">123</entry>
    </row>
  </delete>
</database-publishing>

Daraus wird ein SQL-Statement

DELETE FROM BodyTable WHERE _id = 123

Beispiel: Insert- oder Update-Statement

Je nach dem ob der Zeile schon existiert wird ein Insert- oder Update-Statement erzeugt.

<database-publishing>
  <%-- Tabellen-Struktur bekannt geben --%>
  <table name="BodyTable">
    <key name="_id" type="long"/>
    <column name="_body" type="string"/>
  </table>
  <%-- Aktion für Tabelle BodyTable --%>
  <store table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_body">text d</entry>
    </row>
    <row>
      <entry name="_id">125</entry>
      <entry name="_body">text e</entry>
    </row>
  </store>
</database-publishing>

Daraus werden zwei SQL-Statements

UPDATE FROM BodyTable SET _body = "text d" WHERE _id = 123
INSERT INTO BodyTable _id, _body VALUES(125, "text e")

Beispiel: Tabellen und Aktionen

Es können beliebig viele Tabellen und Aktionen verwendet werden.

<database-publishing>
  <%-- Tabellen-Struktur bekannt geben --%>
  <table name="ArticleTable">
    <key name="_id" type="long"/>
    <column name="_name" type="string"/>
  </table>
  <table name="BodyTable">
    <key name="_id" type="long"/>
    <column name="_body" type="string"/>
  </table>

  <%-- Aktion für Tabelle BodyTable --%>
  <store table="ArticleTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_name">Ein Name</entry>
    </row>
  </store>
  <%-- Aktion für Tabelle BodyTable --%>
  <store table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_body">text d</entry>
    </row>
  </store>

  <table name="MyHistory">
  <key name="_id" type="long"/>
    <column name="_user" type="string"/>
    <column name="_timestamp" type="string"/>
  </table>
  <create table="BodyTable">
    <row>
      <entry name="_id">123</entry>
      <entry name="_user">Peter Lustig</entry>
      <entry name="_timestamp">11.11.2004 11:11</entry>
    </row>
  </create>
</database-publishing>


Regeln:

  1. Tabellen-Definitionen können auch nach einer Aktion definiert werden. (Innerhalb von <database-publishing>)
  2. Aktion können nur die Tabellen verwendet werden, die entsprechend definiert wurden
  3. Definitionen überschreiben sich, wenn der Name identisch ist.
  4. In dem <row>-Tag müssen so viele <entry>-Tags einthalten sein, wie in der Tabellen-Definition angegeben wurden.


Template

Um ein Template für verschiedene Publications-Typen zu definieren kann es wie folgt aufgebaut werden:

<sp:io type="in">
  <%-- Eingabe-Teil --%>
</sp:io>

<sp:io type="out">
  <sp:condition>

  <%-- "Normaler" File-Publisher --%>
  <sp:if name="system.publisher.type" eq="file">
    ...
  </sp:if>

  <%-- Http-Publisher --%>
  <sp:elseif name="system.publisher.type" eq="http">
    ...
  </sp:elseif>

  <%-- Database-Publisher --%>
  <sp:elseif name="system.publisher.type" eq="database">

    <sp:condition>
    <%-- Artikel wird (erneut) publiziert --%>
      <sp:if name="system.publisher.isPublished">
        <database-publishing>
          <table ...>
            ...
          </table>
          <store ...>
            ...
          </store>
        </database-publishing>
      </sp:if>

      <%-- Artikel depubliziert --%>
      <sp:else>
        <database-publishing>
          <table ...>
            ...
          </table>
          <delete ...>
            ...
          </delete>
        </database-publishing>
      </sp:else>
    </sp:condition>

  </sp:elseif>
</sp:io>


Attribute

Attribut Type Beschreibung ab IES Version
id ID ID des Publisher 1
type String Liefert immer database 1
anchor Anchor Anker des Publishers 1
name String Name des Publishers 1
encoding String Encoding das der Publisher verwenden soll (UTF-8, ISO-8859-15, ...) 1
locale Locale Die Sprache, die für diesen Publisher verwendet werden soll 1
clients Collection <Client> Liste der Mandanten, die Zugriff auf diesen Publisher haben 1
metadata Map <String,String> Metadaten eines Publishers 1
metadataString String Metadaten eines Publishers als Zeichenkette. Jede Zeile ist ein Schlüssel/Werte-Paar, getrennt mit einem = (gleich). 1
isPublished Boolean Liefert im Out-Modus true, wenn der Artikel vom Publisher publiziert wird oder false, wenn der Artikel vom Publisher depubliziert wird 1
database String Name der konfigurierten Datenbankverbindung 1