XIP und XSLT mit Repository Abfragen: Unterschied zwischen den Versionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
 
Im Folgenden wird beschrieben, wie innerhalb der XSL-Transformation Abfragen auf das IES-Repository erstellt werden können. Dazu ist die Ergänzung eines Namespaces nötig, mit der die Java Klasse angegeben wird, die die möglichen Funktionen zur Verfügung stellt (com.sitepark.ies.xip.importer.xslt.Repository).  
 
Im Folgenden wird beschrieben, wie innerhalb der XSL-Transformation Abfragen auf das IES-Repository erstellt werden können. Dazu ist die Ergänzung eines Namespaces nötig, mit der die Java Klasse angegeben wird, die die möglichen Funktionen zur Verfügung stellt (com.sitepark.ies.xip.importer.xslt.Repository).  
 
 
==Beispiel-XSLT==
 
 
<source lang="xml">
 
<?xml version="1.0" encoding="UTF-8"?>
 
<xsl:stylesheet
 
    version="1.0"
 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 
    xmlns:repository="com.sitepark.ies.xip.importer.xslt.Repository">
 
 
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
 
    <xsl:template match="/">
 
 
        <!-- Prüfe auf Existenz-->
 
        <xsl:if test="repository:exists('myArticle.anchor')">
 
            <!-- ...  Dinge, die bei existierendem Objekt erfolgen müssen -->
 
        </xsl:if>
 
 
        <!-- Den Parent ermitteln-->
 
        <xsl:variable name="parentAnchor" select="repository:getParent('myArticle.anchor')">
 
            <parentAnchor><xsl:value-of select="$parentAnchor" /></parentAnchor>
 
        </xsl:if>
 
 
        <!-- Wenn per xslt beispielsweise direkt in den Solr Index importiert wird-->
 
        <xsl:variable name="categoryPath" select="repository:getParentPathIDs('currentArticle.anchor', 'withoutSignature', 'sp_parent_category_iterate', 'sp_parent_category.link')"/>
 
        <xsl:for-each select="fn:tokenize($categoryPath, ',')">
 
            <field name="sp_category_path"><xsl:value-of select="." /></field>
 
        </xsl:for-each>
 
 
        <!-- einfach Suchabfrage -->
 
        <xsl:variable name="results" select="repository:search('select id, name where sp_link.link = 100010100000002841-1015')" />
 
        <xsl:for-each select="fn:tokenize(results, ',')">
 
            <!-- Hinweis: 'search' liefert nur Artikel, die einen Anker besitzen -->
 
            <link name="sp_link" anchor="{.}" />
 
        </xsl:for-each>
 
 
        <!-- Suchabfrage mit Volltextsuche  -->
 
        <xsl:variable name="hitList" select="repository:searchIDs('select id, name where luceneSearch([!{ies.infp.infosite}] ,  &apos;&apos;sp_title:Artikel*&apos;&apos; )')" />
 
        <xsl:for-each select="fn:tokenize(results, ',')">
 
            <link name="sp_link" original-id="{.}" />
 
        </xsl:for-each>
 
 
    </xsl:template>
 
</xsl:stylesheet>
 
</source>
 
 
  
 
==Repository==
 
==Repository==
Zeile 101: Zeile 54:
 
|2.14.5
 
|2.14.5
 
|}
 
|}
 +
 +
==Beispiel-XSLT==
 +
 +
<source lang="xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<xsl:stylesheet
 +
    version="1.0"
 +
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 +
    xmlns:repository="com.sitepark.ies.xip.importer.xslt.Repository">
 +
 +
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
 +
    <xsl:template match="/">
 +
 +
        <!-- Prüfe auf Existenz-->
 +
        <xsl:if test="repository:exists('myArticle.anchor')">
 +
            <!-- ...  Dinge, die bei existierendem Objekt erfolgen müssen -->
 +
        </xsl:if>
 +
 +
        <!-- Den Parent ermitteln-->
 +
        <xsl:variable name="parentAnchor" select="repository:getParent('myArticle.anchor')">
 +
            <parentAnchor><xsl:value-of select="$parentAnchor" /></parentAnchor>
 +
        </xsl:if>
 +
 +
        <!-- Wenn per xslt beispielsweise direkt in den Solr Index importiert wird-->
 +
        <xsl:variable name="categoryPath" select="repository:getParentPathIDs('currentArticle.anchor', 'withoutSignature', 'sp_parent_category_iterate', 'sp_parent_category.link')"/>
 +
        <xsl:for-each select="fn:tokenize($categoryPath, ',')">
 +
            <field name="sp_category_path"><xsl:value-of select="." /></field>
 +
        </xsl:for-each>
 +
 +
        <!-- einfach Suchabfrage -->
 +
        <xsl:variable name="results" select="repository:search('select id, name where sp_link.link = 100010100000002841-1015')" />
 +
        <xsl:for-each select="fn:tokenize(results, ',')">
 +
            <!-- Hinweis: 'search' liefert nur Artikel, die einen Anker besitzen -->
 +
            <link name="sp_link" anchor="{.}" />
 +
        </xsl:for-each>
 +
 +
        <!-- Suchabfrage mit Volltextsuche  -->
 +
        <xsl:variable name="hitList" select="repository:searchIDs('select id, name where luceneSearch([!{ies.infp.infosite}] ,  &apos;&apos;sp_title:Artikel*&apos;&apos; )')" />
 +
        <xsl:for-each select="fn:tokenize(results, ',')">
 +
            <link name="sp_link" original-id="{.}" />
 +
        </xsl:for-each>
 +
 +
    </xsl:template>
 +
</xsl:stylesheet>
 +
</source>
  
  

Version vom 16. April 2020, 15:38 Uhr

Im Folgenden wird beschrieben, wie innerhalb der XSL-Transformation Abfragen auf das IES-Repository erstellt werden können. Dazu ist die Ergänzung eines Namespaces nötig, mit der die Java Klasse angegeben wird, die die möglichen Funktionen zur Verfügung stellt (com.sitepark.ies.xip.importer.xslt.Repository).

Repository

Klassenname: com.sitepark.ies.xip.importer.xslt.Repository
Funktionen Bedeutung Rückgabe/Beispiel ies-xip Version
exists(anchor) Prüft, ob das Objekt mit den Anker existiert boolean
getId(anchor [, format = null]) Liefert die ID zu dem angegebenen Anker

format = null|leer
format = withoutType
format = withoutSignature

ID

1010101000000002514-1015)
1010101000000002514
2514

(mit Parameter format: 2.14.5)
getParent(anchor) Liefert den Anker des Parent-Objektes String
getParentId(anchor [, format = null]) Liefert die ID des Parent-Objektes ID (entsprechend des Formats s.o.) 2.14.5
getParentPathIDs(anchor [, format = null [, parentLinkIterateName = null [, parentLinkFieldName = null]]] ) Liefert eine kommaseparierte List von Parent-Pool-ID's zum angegebenen Anker.

Für die Parent-Strukturen aus Navigation oder Kategorie Verknüpfungen können die Feldnamen parentLinkIterateName und parentLinkFieldName der Verknüpfung angegeben werden

zB: 'sp_parent_category_iterate'

zB: 'sp_parent_category.link'

2.14.5
search(query [, idFormat=null]]) Liefert die Anker der Objekte aus dem Suchergebnis. HINWEIS: Besitzt ein Artikel keinen Anker, wird dieser ignoriert. String, kommaseparierte Liste von Ankern. 2.14.5
searchIds(query [, idFormat=null]) Liefert die Id's der Objekte aus dem Suchergebnis. String, kommaseparierte Liste von Id's in dem angegebenen Format(s.o.). 2.14.5

Beispiel-XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:repository="com.sitepark.ies.xip.importer.xslt.Repository">

    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">

        <!-- Prüfe auf Existenz--> 
        <xsl:if test="repository:exists('myArticle.anchor')">
            <!-- ...  Dinge, die bei existierendem Objekt erfolgen müssen -->
        </xsl:if>

        <!-- Den Parent ermitteln--> 
        <xsl:variable name="parentAnchor" select="repository:getParent('myArticle.anchor')">
            <parentAnchor><xsl:value-of select="$parentAnchor" /></parentAnchor>
        </xsl:if>

        <!-- Wenn per xslt beispielsweise direkt in den Solr Index importiert wird-->
        <xsl:variable name="categoryPath" select="repository:getParentPathIDs('currentArticle.anchor', 'withoutSignature', 'sp_parent_category_iterate', 'sp_parent_category.link')"/>
        <xsl:for-each select="fn:tokenize($categoryPath, ',')">
            <field name="sp_category_path"><xsl:value-of select="." /></field>
        </xsl:for-each>

        <!-- einfach Suchabfrage -->
        <xsl:variable name="results" select="repository:search('select id, name where sp_link.link = 100010100000002841-1015')" />
        <xsl:for-each select="fn:tokenize(results, ',')">
            <!-- Hinweis: 'search' liefert nur Artikel, die einen Anker besitzen -->
            <link name="sp_link" anchor="{.}" />
        </xsl:for-each>

        <!-- Suchabfrage mit Volltextsuche  -->
        <xsl:variable name="hitList" select="repository:searchIDs('select id, name where luceneSearch([!{ies.infp.infosite}] ,  &apos;&apos;sp_title:Artikel*&apos;&apos; )')" />
        <xsl:for-each select="fn:tokenize(results, ',')">
            <link name="sp_link" original-id="{.}" />
        </xsl:for-each>

    </xsl:template>
</xsl:stylesheet>