Utilisation des paramètres transférés par DirXML

Le moteur DirXML transfère aux feuilles de style des principes les paramètres suivants, et la feuille de style peut utiliser ces paramètres. Avec DirXML 1.1, les paramètres du processeur de requêtes sont maintenant transférés aux principes d'assignation de schéma et aux principes de transformation d'entrée et de sortie. Les paramètres du processeur de commande sont transférés à tous les principes.

Pour utiliser ces paramètres, insérez ce qui suit dans votre feuille de style :

<xsl:param name="fromNds"/>
<xsl:param name="srcQueryProcessor"/>
<xsl:param name="destQueryProcessor"/>
<xsl:param name="srcCommandProcessor"/>
<xsl:param name="destCommandProcessor"/>

Avec DirXML 1.1, les processeurs acceptent un élément de requête ou de commande comme élément supérieur et l'enveloppent dans <input> et <nds> si nécessaire.

Lorsque vous utilisez les paramètres de requête et de commande avec les règles d'assignation de schéma, les règles de transformation d'entrée et les règles de transformation de sortie, les limites suivantes s'appliquent :

  1. Les requêtes émises vers le module d'interface pilote de l'application doivent respecter le format attendu. En d'autres termes, les noms de schémas doivent se trouver dans l'espace de nom de l'application et la requête doit se conformer à tout vocabulaire XML utilisé en natif par le module d'interface pilote. Aucune référence d'association ne sera ajoutée à la requête.
  2. Les réponses du module d'interface pilote de l'application doivent respecter le format renvoyé par le module d'interface pilote, sans qu'aucune modification ou assignation de schéma ne soit réalisée et sans résolution des références d'association.
  3. Les requêtes émises vers NDS doivent respecter le format attendu par NDS. En d'autres termes, les noms de schémas doivent se trouver dans l'espace de noms NDS et la requête doit être du type XDS. Les références d'association ne seront pas résolues.
  4. Les réponses du module d'interface pilote de l'application respecteront le format renvoyé par le module d'interface pilote, sans qu'aucune modification ou assignation de schéma ne soit réalisée.

Processeurs de requêtes

L'utilisation des processeurs de requêtes dépend de la mise en oeuvre par Novell XSLT des fonctions d'extension. Pour réaliser une requête, vous devez déclarer un espace de nom pour l'interface XdsQueryProcessor. Pour cela, ajoutez ce qui suit à l'élément <xsl:stylesheet> ou <xsl:transform> de la feuille de style.

xmlns:query="http://www.novell.com/nxsl/java/com.novell.nds.dirxml.driver.XdsQueryProcessor"

L'exemple suivant utilise un des processeurs de requêtes (les longues lignes supplémentaires sont enveloppées et ne commencent pas par <).

<!-- Query object name queries NDS for the passed object --> 
<!-- name. Ideally, this would not depend on "CN": to do -->
<!-- this, add another parameter that is the name of the -->
<!-- naming attribute. -->

<xsl:template name="query-object-name">
<xsl:param name="object-name"/>

<!-- build an xds query as a result tree fragment -->
<xsl:variable name="query">
<nds ndsversion="8.5" dtdversion="1.0">
<input>
<query>
<search-class class-name="{ancestor-or-self:
:add/@class-name}"/>

<!-- NOTE: depends on CN being the naming attribute -->
<search-attr attr-name="CN">
<value><xsl:value-of select="$object-name"/
></value>
</search-attr>
<!-- put an empty read attribute in so that we don't get -->
<!-- the whole object back -->
<read-attr/>
</query>
</input>
</nds>
</xsl:variable>

<!-- query NDS -->
<xsl:variable name="result" select="query:query($destQuery
Processor,$query)"/>

<!-- return an empty or non-empty result tree fragment -->
<!-- depending on result of query -->
<xsl:value-of select="$result//instance"/>
</xsl:template>

Paramètres de commande

Pour autoriser la réécriture du canal pour les attributs par défaut ajoutés par une règle de création, un nouvel attribut XML intitulé write-back a été ajouté à l'élément <required-attr> du principe de création. S'il est présent et défini sur true (vrai), le principe de création appellera srcCommandProcessor avec une commande de modification pour réécrire la valeur par défaut dans la source.

L'exemple suivant utilise des paramètres de commande pour réaliser une opération de réécriture.

<?xml version="1.0"?> 
<xsl:transform
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cmd="http://www.novell.com/nxsl/java
com.novell.nds.dirxml.driver.XdsCommandProcessor"
>
<xsl:param name="srcCommandProcessor"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="add">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>

<!-- on a user add, add Engineering department to the source object -->
<xsl:variable name="dummy">
<modify class-name="{@class-name} "dest-dn="{@src-dn}">
<xsl-copy-of select="association"/>
<modify-attr attr-name="OU">
<add-value>
<value type="string">Engineering</value>
</add-value>
</modify-attr>
</modify>
</xsl:variable>
<xsl:variable name="dummy2"
select="cmd:execute($srcCommandProcessor, $dummy)"/>
</xsl:template>

</xsl:transform>