XSLT des composants WebPart Federated Results
Notes
Cette rubrique décrit la fonctionnalité qui fait partie de Infrastructure Update for Microsoft Office Servers. Pour télécharger la mise à jour, voir l'article Description de la mise à jour d'infrastructure SharePoint Server 2007 : 15 juillet 2008.
Les résultats de la recherche des emplacements fédérés sont retournés au serveur de recherche dans un format XML structuré (par exemple, RSS ou Atom). Les résultats sont mis en forme et rendus dans les composants WebPart de recherche fédérée dans la transformation XSLT spécifiée (XSLT).
Cette rubrique fournit une vue d'ensemble du XSLT par défaut des emplacements fédérés, et décrit comment le personnaliser pour modifier l'affichage des résultats dans les composants WebPart de recherche fédérée.
Présentation du XSLT
XSL est un langage de programmation qui transforme XML en un autre format ou une autre structure, telle que HTML. Cela signifie qu'au lieu d'afficher une page Web avec du HTML statique, vous pouvez appliquer le XSLT à un document XML pour générer dynamiquement le code HTML. Dans ce scénario, la couche de présentation est également séparée de la couche des données. XSL fournit nombre des fonctionnalités que l'on trouve dans les langages de programmation traditionnels, tels que les variables, les fonctions, les itérations et les instructions conditionnelles.
Pour plus d'informations sur XSLT, voir les ressources suivantes :
XPath est le langage utilisé pour spécifier les éléments du code XML à transformer, ainsi que pour calculer des valeurs.
Pour plus d'informations, voir les ressources suivantes :
Personnalisation du XSLT pour un emplacement fédéré
Avant de passer en revue le XSLT utilisé spécifiquement pour afficher des résultats de recherche fédérée, vous devez savoir comment l'afficher et le modifier.
Vous pouvez accéder au XSLT à deux endroits :
dans la définition de l'emplacement fédéré ;
dans les propriétés du composant WebPart fédéré.
L'endroit où vous choisissez de modifier le XSLT varie suivant que vous souhaitez qu'il s'applique globalement à tous les composants WebPart de recherche fédérée et suivant les composants WebPart de recherche fédérée où vous voulez afficher les résultats.
Modification du XSLT pour un emplacement fédéré
Le XSLT d'un emplacement fédéré est spécifié dans le champ XSL de la section Propriétés d'affichage de l'emplacement fédéré.
Notes
Vous devez être un administrateur de service de recherche pour effectuer la procédure suivante.
Pour accéder au champ XSL de l'emplacement fédéré
Dans la page d'administration de recherche, cliquez sur Emplacements fédérés.
Dans la page Gérer les emplacements fédérés, cliquez sur Nom d'affichage de l'emplacement pour l'emplacement que vous souhaitez modifier.
Dans la section Afficher les informations, désactivez la case à cocher Utiliser la mise en forme par défaut dans la section du composant WebPart de recherche fédérée dont vous souhaitez modifier le XSLT.
Cliquez sur le bouton de sélection (...) pour le champ XSL. Cela ouvre la fenêtre Entrée de texte pour l'élément Xsl de l'emplacement. Vous pouvez modifier le XSLT directement dans cette fenêtre ; toutefois, vous pouvez trouver plus facile de copier le code dans un fichier. Vous pouvez ensuite modifier ce fichier à l'aide d'une application telle que Microsoft Visual Studio 2008. Lorsque vous avez terminé de modifier le fichier, vous pouvez copier le code modifié dans la fenêtre Entrée de texte.
Cliquez sur OK pour enregistrer vos modifications, fermez la fenêtre Entrée de texte, puis cliquez sur OK pour mettre à jour l'emplacement.
Vous pouvez annuler vos modifications du XSLT, et revenir au XSLT spécifié par défaut pour l'emplacement en activant la case à cocher Utiliser la mise en forme par défaut spécifiée à l'étape 3.
Notes
Vous pouvez également accéder au XSLT de l'emplacement directement dans le fichier de définition d'emplacement (.fld). Le XSLT est spécifié dans l'élément XSL, contenu dans l'élément Visualisation du schéma de définition d'emplacement.
Vous pouvez choisir cette méthode si vous souhaitez que le XSLT personnalisé soit appliqué globalement à la plupart ou à tous les composants WebPart fédérés configurés pour utiliser un emplacement spécifique. Cela est dû au fait que lorsque vous modifiez l'élément Xsl de l'emplacement fédéré, le XSLT personnalisé est utilisé pour tous les composants WebPart de recherche fédérée configurés pour utiliser cet emplacement, sauf si la propriété XSL d'un composant WebPart individuel est personnalisée. Nous vous recommandons également d'utiliser cette méthode si vous personnalisez le XSLT pour afficher les résultats dans le composant WebPart Top Federated Results. Cela est dû au fait que vous pouvez spécifier plusieurs emplacements pour ce composant WebPart, et que le XSLT personnalisé peut être différent pour chaque emplacement.
Modification du XSLT du composant WebPart fédéré
Le XSLT d'un composant WebPart de recherche fédérée est spécifié dans la propriété Xsl de la section Propriétés d'affichage dans volet d'outils du composant WebPart. Comme indiqué à la section précédente, nous vous recommandons d'utiliser cette méthode pour le composant WebPart Federated Results uniquement.
Accéder à la propriété XSL du composant WebPart Federated Results
Dans votre navigateur, accédez à l'URL de la page des résultats. Par exemple :
http://<ServerName>/results.aspx
Cliquez sur le lien Actions du site, puis sur Modifier la page.
Pour l'instance du composant WebPart Federated Results que vous voulez modifier, cliquez sur la flèche modifier pour afficher le menu du composant WebPart, puis sur Modifier le composant WebPart partagé. Cela permet d'ouvrir le volet d'outils du composant WebPart Federated Results.
Cliquez sur la flèche Display Properties.
Désactivez la case à cocher Use Location Visualization, puis cliquez sur Éditeur XSL.
Cela entraîne l'ouverture de la fenêtre Entrée de texte pour la propriété XSL du composant WebPart. Vous pouvez modifier le XSLT directement dans cette fenêtre ou le copier dans un fichier. Vous pouvez ensuite modifier ce fichier dans une application telle que Visual Studio 2008. Après avoir modifié le fichier, vous pouvez recopier le code modifié dans la fenêtre Entrée de texte.
Cliquez sur Enregistrer pour fermer la fenêtre Entrée de texte, puis cliquez sur OK pour mettre à jour l'instance du composant WebPart Federated Results.
Vous pouvez annuler vos modifications du XSLT, et revenir au XSLT spécifié par défaut pour l'emplacement en activant la case à cocher Use Location Visualization spécifiée à l'étape 6.
Vous pouvez maintenant examiner le XSLT utilisé pour afficher les résultats de recherche fédérés.
XSLT du composant WebPart fédéré
Recherche de contenu d'entreprise dans Microsoft Office SharePoint Server 2007 prend en charge deux types d'emplacements fédérés :
Index de recherche local Sites SharePoint locaux pour le serveur de recherche.
OpenSearch 1.0/1 Le flux RSS de toute page de résultat d'un serveur de recherche distant, ou tout flux pouvant faire l'objet d'une recherche prenant en charge le standard OpenSearch, qui retourne les résultats de la recherche dans un format XML structuré (par exemple, les résultats RSS ou Atom).
Lorsque les résultats d'un type d'emplacement ou de l'autre sont affichés dans les composants WebPart de recherche fédérée, ils apparaissent mis en forme de la même manière. Il existe toutefois des différences dans les données XML retournées pour chaque type d'emplacement, ce qui signifie qu'il existe également des différences dans le XSLT spécifié par défaut pour chaque type d'emplacement. Cette section fournit une vue d'ensemble du code XML des résultats et du XSLT utilisé pour le transformer pour les deux types d'emplacements.
Emplacements de l'index de recherche local
Vous utilisez le type d'emplacement Index de recherche local pour afficher les résultats fédérés depuis l'index de recherche local sur ce serveur de recherche. Avant de commencer à modifier le XSLT appliqué au code XML des résultats pour ce type d'emplacement, vous devez savoir ce qui figure dans les données XML des résultats pour les types emplacement d'index de recherche local. Vous pouvez afficher les données XML brutes des résultats pour ce type d'emplacement à l'aide d'une version personnalisée du XSLT. Pour des informations sur le XSLT personnalisé pour cette tâche ainsi que sur la méthode de modification du XSLT, consultez Procédure : afficher les données XML retournées par votre emplacement fédéré.
Données XML des résultats de l'index de recherche local
L'exemple de code suivant présente une portion des données XML des résultats fédérés pour un emplacement d'index de recherche local.
<All_Results>
<Result>
<id>1</id>
<title>Local Site</title>
<hithighlightedsummary>
Get Started with Windows <c0>SharePoint</c0> Services!
</hithighlightedsummary>
<hithighlightedproperties>
<HHTitle>My Local Site</HHTitle>
<HHUrl>http://MyLocalSite</HHUrl>
</hithighlightedproperties>
<url>http://MyLocalSite</url>
<urlEncoded>http%3A%2F%2FMyLocalSite</urlEncoded>
<description>This is a local site.</description>
<contentclass>STS_Site</contentclass>
<imageurl imageurldescription="Result of type:document">
/_layouts/images/STS_Site16.gif
</imageurl>
</Result>
…
</All_Results>
Si vous êtes familiarisé avec les données XML retournées pour le composant WebPart Résultats principaux de la recherche, notez que les données XML des résultats pour le type d'emplacement d'index de recherche local sont très similaires, et que certaines des personnalisations du XSLT pour les deux sont similaires, notamment pour les éléments de mise en surbrillance d'accès, qui sont :
hithighlightedsummary
hithighlightedproperties
HHTitle
HHUrl
Pour plus d'informations sur la personnalisation du XSLT du composant WebPart Résultats principaux de la recherche, voir Transformation XSLT des résultats principaux de la recherche de contenu d'entreprise et Chapter 3: Customizing and Extending the Microsoft Office SharePoint 2007 Search (Part 1 of 2).
Un autre similarité réside dans le fait que le nœud de niveau supérieur (racine) est associé à un modèle XSL, qui est l'endroit où commence la transformation. Voici le XSLT des emplacements d'index de recherche local pour cela :
<xsl:template match="/">
<xsl:call-template name="MainTemplate"/>
</xsl:template>
Dans le XSLT des emplacements OpenSearch, l'élément racine est associé un modèle, suivant le format XML dans lequel sont retournés les résultats de l'emplacement. Pour plus d'informations à ce sujet, consultez la section Modèles plus loin dans cette rubrique. Cela est dû au fait qu'il existe plusieurs formats XML pour les résultats OpenSearch, et que le XSLT doit donc inclure différentes instructions de traitement pour les formats différents. Dans la mesure où les résultats de l'index de recherche local sont toujours retournés dans le même format XML, le XSLT doit uniquement inclure des instructions de traitement pour un format XML.
Toutefois, hormis les différences signalées ici, le XSLT pour les deux types d'emplacement est similaire, ce qui signifie que la plupart des informations fournies dans la prochaine section pour les emplacements OpenSearch s'applique également au XSLT pour les emplacements d'index de recherche local.
Emplacements OpenSearch
Vous utilisez le type d'emplacement OpenSearch pour afficher les résultats fédérés depuis le flux RSS pour les index de recherche sur les serveurs de recherche à distance. Ou utilisez-le pour afficher les résultats fédérés depuis des sites Web qui permettent de retourner les résultats dans un format XML structuré, tel que RSS ou Atom.
Données XML de résultats OpenSearch
Comme nous l'avons mentionné précédemment, il est utile de savoir ce qui se trouve dans les données XML des résultats. Vous pouvez afficher les données XML brutes des résultats provenant de l'emplacement OpenSearch à l'aide d'une version personnalisée du XSLT. Pour plus d'informations sur le XSLT personnalisé et la modification du XSLT, voir Procédure : afficher les données XML retournées par votre emplacement fédéré.
L'exemple de code suivant présente une portion des données XML des résultats fédérés pour le flux RSS d'un emplacement d'index de recherche distant.
Données XML des résultats de flux RSS
<rss version="2.0" xmlns:srrt="https://schemas.microsoft.com/WebParts/v3/srchrss/runtime">
<channel>
<title>Search Results: sharepoint</title>
<link>
http://MyRemoteSite/pages/results.aspx?k=sharepoint
</link>
<description>
Search RSS feed for Microsoft Office SharePoint Server 2007
</description>
<language>en-US</language>
<lastBuildDate>
Mon, 28 Jan 2008 10:42:03 GMT
</lastBuildDate>
<generator>
Microsoft Office SharePoint Server 2007 RSS Generator
</generator>
<ttl>60</ttl>
<image>
<title>Search Results: sharepoint</title>
<url>
http://MyRemoteSite/pages/_layouts/images/homepage.gif
</url>
<link>
http://MyRemoteSite/pages/results.aspx?k=sharepoint
</link>
</image>
<item>
<title>
Get Started with Windows SharePoint Services!
</title>
<link>
http://MyRemoteSite/Lists/Announcements/DispForm.aspx?ID=1
</link>
<description>
<div style="margin-top:5px">
<link rel="stylesheet"type="text/css" href="http://MyRemoteSite/_layouts/1033/styles/portal.css" />
<span class="srch-Icon">
<a href="http://MyRemoteSite/Lists/Announcements/DispForm.aspx?ID=1" title="Get Started with Windows SharePoint Services!">
<img src="http://MyRemoteSite/_layouts/images/STS_ListItem16.gif" alt="Result of type: document" border="0" /></a></span>
<span class="psrch-Description">
Get Started with Windows <b>SharePoint</b> Services!
…
Windows <b>SharePoint</b> Services helps you to be more effective by connecting people, information
…
</span>
<p class="srch-Metadata">
<span class="srch-URL">
<a href="http://MyRemoteSite/Lists/Announcements/DispForm.aspx?ID=1" title="Get Started with Windows SharePoint Services!">
http://MyRemoteSite/Lists/Announcements/DispForm.aspx=ID=1
</a></span></p></div>
</description>
<author>Denise Smith</author>
<pubDate>1/28/2008</pubDate>
</item>
<item>
…
</item>
…
</channel>
</rss>
Familiarisez-vous avec les données XML de résultats avant de modifier la XSLT. En comprenant la structure de ce qui est transformé, il n'en est que plus facile d'apporter vos modifications.
Paramètres de configuration
Le premier bloc de code XSLT définit différents paramètres de configuration qui peuvent être passés à la transformation au moment de l'exécution.
<xsl:param name="ResultsPerPage">3</xsl:param>
<xsl:param name="IsDesignMode">True</xsl:param>
<xsl:param name="UrlMaxLength">50</xsl:param>
<xsl:param name="SummaryMaxLength">300</xsl:param>
<xsl:param name="ShowMoreLink">true</xsl:param>
<xsl:param name="MoreLink"></xsl:param>
<xsl:param name="MoreLinkLabel"></xsl:param>
<xsl:param name="IdPrefix"></xsl:param>
<xsl:param name="WebpartTitle"></xsl:param>
<xsl:param name="DefaultIconDescription"></xsl:param>
<xsl:param name="BrandingIcon"></xsl:param>
<xsl:param name="IsFirstPage">true</xsl:param>
Pour plus d'informations sur les paramètres dans XSLT, voir <xsl:param> Element. À titre d'exemple d'une personnalisation que vous pouvez effectuer, vous pouvez spécifier un lien vers une image à afficher en tant qu'image de personnalisation dans la barre de titre du composant WebPart. Pour ce faire, modifiez le paramètre BrandingIcon, comme suit :
<xsl:param name="BrandingIcon">http://MyRemoteServer/_layouts/images/customBrandingImage.gif</xsl:param>
Pour plus d'informations sur la modification ce qui est affiché dans la barre de titre, consultez Procédure : personnaliser l'icône de titre et de personnalisation des résultats de la recherche fédérée.
Modèles
Examinez maintenant la section du code où l'élément XML de niveau supérieur (racine) est associé à un modèle XSL. (Pour plus d'informations sur les modèles XSL, consultez xsl:template element.)
L'élément racine des données XML des résultats est basé sur le format XML dans lequel sont retournés les résultats de l'emplacement. Dans l'exemple de données XML des résultats du flux RSS, le format est RSS, de sorte que l'élément de niveau supérieur est <rss>
.
Ci-dessous un bloc de code du XSLT par défaut où l'élément racine est associé un modèle, basé sur le format spécifié dans l'attribut de correspondance de l'élément xsl:template.
<xsl:template match="rss">
<xsl:call-template name="MainTemplate">
<xsl:with-param name="Type" select="'rss'"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="rdf:RDF">
<xsl:call-template name="MainTemplate">
<xsl:with-param name="Type" select="'rdf'"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="atom:feed">
<xsl:call-template name="MainTemplate">
<xsl:with-param name="Type" select="'atom'"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="atom2:feed">
<xsl:call-template name="MainTemplate">
<xsl:with-param name="Type" select="'atom2'"/>
</xsl:call-template>
</xsl:template>
Lorsque l'élément racine correspond à la valeur spécifiée dans l'attribut match, le modèle spécifié dans xsl:call-template element est appliqué. Dans cet exemple, le même modèle, MainTemplate, est associé à tous les formats. Toutefois la valeur spécifiée pour le paramètre Type passé à MainTemplate à l'aide de xsl:with-param element, est différente pour chaque format.
MainTemplate
Vous pouvez trouver le modèle MainTemplate en recherchant le fragment XSLT suivant.
<xsl:template name="MainTemplate"
Si vous examinez le XSLT contenu dans MainTemplate, vous constatez qu'il inclut les instructions de traitement suivantes :
Définit les variables suivantes, à l'aide de xls:variable elements :
« Rows », qui contient la collection de résultats.
« RowCount », qui contient le nombre de résultats, calculé à l'aide de la count function.
« ChannelTitle », qui contient le titre de l'emplacement fédéré, récupéré à partir du XML à l'aide de xsl:value-of element. Étant donné que le nœud XML qui contient le titre de l'emplacement fédéré est basé sur le type de format, le nom du nœud est sélectionné de manière conditionnelle sélectionné à l'aide de l'xsl:choose element conjointement à l'xsl:when element, et la valeur du paramètre Type est transmise dans MainTemplate.
Vérifie la présence de résultats. Cette étape est incluse dans le composant WebPart Top Federated Results uniquement, car ce composant WebPart apparaît uniquement sur la première page de résultats.
Récupère le titre de l'emplacement fédéré, comme spécifié dans les données XML, et lui affecte une variable nommée ChannelTitle.
Vérifie si au moins une ligne de résultats a été retournée à l'aide de xsl:if element et, le cas échéant :
Spécifie le code HTML permettant d'afficher les données pour la barre de titre du composant WebPart, y compris le titre et l'image de personnalisation. L'image de personnalisation est récupérée avec le modèle GetBrandingImage spécifié dans l'élément xsl:call-template ici. Le modèle GetBrandingImage vérifie uniquement qu'une valeur est spécifiée pour le paramètre BrandingIcon et, le cas échéant, la retourne.
Appelle le modèle MainTemplate.body, transmettant au passage plusieurs paramètres, tels que Rows, RowCount et Type. La section suivante fournit des informations supplémentaires sur MainTemplate.body.
Appelle le modèle MoreLinkTemplate, qui spécifie le code HTML permettant d'afficher le lien Autres résultats.
MainTemplate.body
Le code XSLT de ce modèle parcourt chaque résultat et effectue les opérations suivantes :
Appelle différents modèles pour récupérer les données XML des images, du lien et du titre du résultat. Vous pouvez personnaliser l'image affichée pour un résultat dans le modèle GetItemIcon.
Spécifie le code HTML permettant d'afficher le titre, le lien et l'image. Le modèle GetSafeHtml est ici appelé pour le titre pour garantir qu'aucun HTML non fiable n'est utilisé.
Appelle MainTemplate.description, décrite dans la section suivante.
MainTemplate.description
Le XSLT de ce modèle met en forme le XML de description d'un résultat et spécifie le code HTML pour l'afficher. Il comprend les instructions de traitement suivantes :
Appelle le modèle GetDescription permettant de récupérer le XML de description du résultat.
Vérifie que le résultat contient une valeur pour la description et, le cas échant :
Appelle le modèle GetPlainTextFromHtml pour supprimer tout XML de la description. Pour retourner du HTML au sein de la description, vous pouvez personnaliser le XSLT de manière à supprimer cette étape.
Appelle le modèle TrimIfGreaterThanMax pour réduire le nombre de caractères contenus dans la description à la limite autorisée, s'il en est spécifiée une.
Spécifie le code HTML permettant d'afficher la description. Vous pouvez personnaliser la manière avec laquelle la description est affichée dans cette section du modèle.
Personnalisation du XSLT
Il existe plusieurs scénarios dans lesquels vous pouvez souhaiter de personnaliser le XSLT, tels que :
Vous souhaitez apporter des modifications mineures à l'affichage des résultats de recherche fédérés en modifiant les modèles existants du XSLT par défaut.
Vous souhaitez apporter des modifications plus complexes à l'affichage des résultats de recherche fédérés en ajoutant de nouveaux modèles au XSLT.
Vous devez modifier le XSLT pour afficher une propriété que vous avez ajoutée à l'ensemble de propriétés par défaut renvoyé dans les résultats de recherche fédérés.
Vous souhaitez modifier l'affichage de certains résultats fédérés de manière conditionnelle, en fonction d'une des valeurs de propriété renvoyées.
Vous souhaitez modifier les modèles d'affichage pour utiliser une classe CSS personnalisée à la place des classes CSS par défaut.
Les rubriques suivantes vous guideront dans la procédure de modification du XSLT des résultats fédérés en fonction de différents scénarios de personnalisation :
Procédure : afficher les données XML retournées par votre emplacement fédéré
Activation du rendu HTML pour le composant WebPart Federated Results
Exemple de connecteur de HTML en RSS de la recherche fédérée