Enterprise の主要な検索結果の XSLT 変換
主要な検索結果 Web パーツ XSLT 変換 (XSLT) を修正して、検索結果ページでの検索結果の表示方法を変更できます。ここでは、主要な検索結果 Web パーツ XSLT およびそのカスタマイズ方法について説明します。
以下のシナリオで、このコードを修正する際に役立つ例を提供します。
既定 XLST の既存のテンプレートを修正して、検索結果の表示の細部を変更する。
XSLT に新規テンプレートを追加して、検索結果の表示に複雑な変更を加える。
返されたいずれかのプロパティ値に従って、特定の結果の表示を条件付きで変更する。
XSLT を修正して、検索結果で返されたプロパティの既定のセットに追加したプロパティを表示する必要がある。
表示テンプレートを修正して、既定のカスケード スタイル シート クラスの代わりにカスタム カスケード スタイル シート クラスを使用する。
主要な検索結果 Web パーツ XSLT を修正する
主要な検索結果 Web パーツ XLST は Web パーツの XSL プロパティで指定されます。このプロパティは、主要な検索結果 Web パーツ ツール ウィンドウのデータ フォーム Web パーツのツール パーツから表示および変更することができます。詳細については、「[方法] 検索結果の XSLT 変換を表示して編集する」を参照してください。
検索結果 XML データを確認する
主要な検索結果 Web パーツの XLST の修正を開始する前に、結果 XML データに何が含まれているかを理解することは有益です。
以下のコード サンプルは、検索結果 XML データのスニペットです。
注意
このデータを表示するには、「[方法] 検索結果 XML データを表示する」で説明されている手順に従います。
<All_Results>
<Result>
<id>1</id>
<rank>713</rank>
<title>Microsoft.SharePoint Namespace</title>
<author />
<size>39058</size>
<url>https://msdn.microsoft.com/library/default.asp?url=/library/en- us/spptsdk/html/tsnsMicrosoftSharePoint_SV01017995.asp</url>
<description>Microsoft.SharePoint Namespace</description>
<sitename> https://msdn.microsoft.com/library</sitename>
<collapsingstatus>0</collapsingstatus>
<hithighlightedsummary>
<…>
</hithighlightedsummary>
<hithighlightedproperties>
<…>
</hithighlightedproperties>
<…>
</Result>
<Result>
<…>
<…>
</Result>
</All_Results>
検索結果 XML データに含められる要素は、以下によって決まります。
Search Core Results Web パーツの表示プロパティ。
Results Query Options - Selected Columns 設定で指定された管理プロパティ。
注意
検索結果に含められる管理プロパティの変更方法の詳細については、「[方法] 主要な検索結果で返されるプロパティを変更する」を参照してください。
XLST を修正する前に、結果 XML データについて精通しておく必要があります。変換対象の構造を理解することで、変更がより容易になります。
XSL テンプレートを使用する
ここでは、主要な検索結果 XSLT で定義および使用されるテンプレートについて説明します。
ルート テンプレート
主要な検索結果 XSLT の確認を開始するために、変換を開始するコード内のセクションを確認します。このセクションは、コードの末尾にあります。以下のタグを検索すると見つかります。
<xsl:template match="/">
以下の構文はテンプレートを定義し、XML のルート ノードに関連付けます。
<All_Results>
…
</All_Results>
このテンプレートの完全な XSLT は以下のとおりです。
<xsl:template match="/">
<xsl:variable name="Rows" select="/All_Results/Result" />
<xsl:variable name="RowCount" select="count($Rows)" />
<xsl:variable name="IsEmpty" select="$RowCount = 0" />
<xsl:if test="$AlertMeLink">
<input type="hidden" name="P_Query" />
<input type="hidden" name="P_LastNotificationTime" />
</xsl:if>
<xsl:choose>
<xsl:when test="$IsNoKeyword = 'True'" >
<xsl:call-template name="dvt_1.noKeyword" />
</xsl:when>
<xsl:when test="$IsEmpty">
<xsl:call-template name="dvt_1.empty" />
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="dvt_1.body"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
ルート テンプレートは結果 XML データを変換しません。その主な機能は、検索結果 XML データの条件テストに基づいて、次に適用するテンプレートを決定することです。
XSLT の条件テストでは、次のどの検索結果 Web パーツ シナリオを適用するかを決定しようとします。
主要な検索結果 Web パーツに検索結果を含める。
以下のどちらかが真なので、主要な検索結果 Web パーツに検索結果を含めない。
検索クエリが発行されなかった。
検索クエリに対して関連結果が返されなかった。
検索結果テンプレートなし
XSLT はまず、以下の条件をテストします。
検索クエリが存在するか。
検索結果は空白に設定されているか。
検索語を指定せずに結果ページに直接移動した場合、または Web パーツが固定のキーワード クエリを使用するように構成されているがキーワードが指定されていない場合、最初の条件は true を返します。条件が true を返した場合、主要な検索結果 Web パーツの本文に適用される XSL テンプレートは dvt_1.noKeyword テンプレートです。以下の図は、このテンプレートが結果ページにどのように表示されるかを示しています。
主要な検索結果 Web パーツ XSLT での表示を修正するには、このテンプレートの開始タグを検索します。
<xsl:template name="dvt_1.noKeyword">
次に、内容を変更します。
ユーザーが入力した検索クエリが何も結果を返さない場合、2 つめの条件は true を返します。この場合、主要な検索結果 Web パーツの本文に適用されるテンプレートは dvt_1.empty テンプレートです。以下の図は、このテンプレートが結果ページにどのように表示されるかを示しています。
表示されるテストまたはアクション リンクを変更するには、XLST でこのテンプレートの開始タグを検索します。
<xsl:template name="dvt_1.empty">
次に、コンテンツを変更します。
検索結果テンプレート
前のセクションで説明したいずれの条件も true を返さないため、検索結果が返された場合は、このテンプレートの XLST の <xsl:otherwise> タグで指定されたテンプレートが主要な検索結果 Web パーツの本文に適用されます。
このテンプレートの XSLT を表示するには、以下のコードを検索します。
<xls:template name="dvt_1.body">
このテンプレートの変換コードは、主として検索結果に表示されるヘッダーに使用されます。ヘッダーに変更を加える場合は、このテンプレートを修正します。以下の図は、既定のヘッダーを示しています。
検索結果ヘッダー変換コードの後、このテンプレートのコードの末尾付近に、以下の XSLT 行があります。
<xsl:apply-templates />
このコード行は XSL 変換を続行する必要があることを示し、一致が見つかった子ノードにテンプレートを適用します。dvt_1.body テンプレートの終了タグを確認すると、XSLT の次の行は以下のようになっています。
<xsl:template match="Result">
このコードは、テンプレートを定義して結果ノードと関連付けます。またこのコードには、検索結果の表示を作成する XLST が含まれ、各結果に以下の要素を含めます。
アイコン/イメージ
タイトル
説明
メタデータ
検索結果メタデータの既定 XSLT には Path、Size、Author、および LastModified プロパティの値が含まれます。
これらのセクションでは、XSLT は追加テンプレートを呼び出します。これについては、以下で詳しく説明します。
HitHighlighting テンプレート
HitHighlighting テンプレートは、以下の結果セクションに表示される検索語を強調表示します。
タイトル
URL
説明
この XSLT の機能を理解するには、検索結果 XML データの <Result></Result> タグの強調表示に関連する子要素を確認する必要があります。以下の例は、ユーザーが検索語 "SharePoint"、"Namespace"、および "Class" を入力したケースを示しています。
<hithighlightedsummary>
<c0>SharePoint</c0> <c1>namespace</c1> provides types and members that can be used for working with a <c0>SharePoint</c0> site <ddd /> a top-level <c2>class</c2> that represents a <c0>SharePoint</c0> site and provides access to its collection of subsites <ddd /> <c0>SharePoint</c0> <c1>namespace</c1> and a brief description of each.
</hithighlightedsummary>
<hithighlightedproperties>
<HHTitle>Microsoft.<c0>SharePoint</c0> <c1>Namespace</c1></HHTitle>
<HHUrl>https://msdn.microsoft.com/library/default.asp?url=/library/en- us/spptsdk/html/tsnsMicrosoft<c0>SharePoint</c0>_SV01017995.asp</HHUrl>
</hithighlightedproperties>
<hithighlightedsummary></hithighlightedsummary>、<HHtitle></HHtitle> および <HHUrl></HHUrl> 要素の子要素は XML データに埋め込まれており、XML データで見つかった各検索語のラッパーとして機能します。
検索語が複数ある場合、各単語は異なる要素に含められます。ただし、同じ検索語の異なるインスタンスには同じ要素が使用されます。
前の例に示したように、<c0></c0> タグには最初の検索語が含められ、<c1></c1> 要素には次の検索語が含められ、以下同様に続きます。
HitHighlighting テンプレートを修正すると、検索語が結果に強調表示される方法をカスタマイズできます。たとえば、強調表示したテキストの色を変更し、別の色で別の検索語を表すことができます。
以下の XSLT コード サンプルでこの処理を行う方法を示します。
<xsl:template match="c0">
<b style="color: #ff0033">
<xsl:value-of select="."/>
</b>
</xsl:template>
<xsl:template match="c1">
<b style="color: #990066">
<xsl:value-of select="."/>
</b>
</xsl:template>
サンプル内の強調表示されたセクションは、検索語を強調表示するために使用した色を変更するために、既定の XSLT コードに追加されたコードを示します。このコードのセクションは、HitHighlighting テンプレートにあります。このテンプレートを見つけるには、以下を検索します。
<xsl:template name="Hithightlighting">
(XSLT 内で)
DisplaySize テンプレート
DisplaySize テンプレートは、結果で返された Size プロパティを表示します。このテンプレートの XSLT は使用する最適な単位 (バイト、KB、MB から選択) を計算して、それに応じて表示サイズの値を調整します。
DisplayString テンプレート
DisplayString テンプレートは結果の XML データで返された文字列の値を表示する一般的なテンプレートです。既定の XLST はこのテンプレートを使用して、Author および LastModified プロパティを表示します。