1 つの Tridion スキーマに追加のフィルタリング xslt を適用したいと考えています。
「画像」という名前のフィールドがあります。これは RTF であり、書式設定機能の編集で選択することにより、画像とハイパーリンクを許可するように構成されています。
その背後にある考え方は、RTF に Image を挿入し、RTF フィールドとして作成することです。
サンプルの有効なソース:
1.<a title="google site" href="http://google.com"><img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/></a>
2.<a title="Internal link" href="tcm:202-9720"><img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/></a>
RTF ではハイパーリンクと画像が許可されているため、ユーザーがそれらを異なる形式で入力する可能性があります。無効:
1.<a title="google site" href="http://google.com"></a>
<img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/>
2.<img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/>
<a title="google site" href="http://google.com"></a>
3.<a title="google site" href="http://google.com"><img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/></a>
<a title="Internal link" href="tcm:202-9720"><img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/></a>
ルール:
1.Only one Image should be allowed and it should be hyperlink.
2.There should be one <img> tag wrapped by one <a> tag.
3. Multiple images are not allowed.
これは、イベント システムを使用して実行できることを知っています。それでも、XSLT フィルタリングを適用して実装することを考えました。
XSLT フィルタリング ソース:
<xsd:element name="image" minOccurs="0" maxOccurs="1" type="tcmi:XHTML">
<xsd:annotation>
<xsd:appinfo>
<tcm:ExtensionXml xmlns:tcm="http://www.tridion.com/ContentManager/5.0"></tcm:ExtensionXml>
<tcm:Size xmlns:tcm="http://www.tridion.com/ContentManager/5.0">2</tcm:Size>
<tcm:FilterXSLT xmlns:tcm="http://www.tridion.com/ContentManager/5.0">
<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
<output omit-xml-declaration="yes" method="xml" cdata-section-elements="script"></output>
<template match="/ | node() | @*">
<copy>
<apply-templates select="node() | @*"></apply-templates>
</copy>
</template>
<template match="*[ (self::br or self::p or self::div) and normalize-space(translate(., ' ', '')) = '' and not(@*) and not(processing-instruction()) and not(comment()) and not(*[not(self::br) or @* or * or node()]) and not(following::node()[not( (self::text() or self::br or self::p or self::div) and normalize-space(translate(., ' ', '')) = '' and not(@*) and not(processing-instruction()) and not(comment()) and not(*[not(self::br) or @* or * or node()]) )]) ]">
<!-- ignore all paragraphs and line-breaks at the end that have nothing but (non-breaking) spaces and line breaks -->
</template>
<template match="br[parent::div and not(preceding-sibling::node()) and not(following-sibling::node())]">
<!-- Chrome generates <div><br/></div>. Renders differently in different browsers. Replace it with a non-breaking space -->
<text> </text>
</template>
<template name="FormattingFeatures">
<FormattingFeatures xmlns="http://www.tridion.com/ContentManager/5.2/FormatArea" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<Doctype>Transitional</Doctype>
<AccessibilityLevel>0</AccessibilityLevel>
<DisallowedActions>
<Bold></Bold>
<Italic></Italic>
<Underline></Underline>
<Strikethrough></Strikethrough>
<Subscript></Subscript>
<Superscript></Superscript>
<AlignLeft></AlignLeft>
<Center></Center>
<AlignRight></AlignRight>
<Bullets></Bullets>
<Numbering></Numbering>
<IndentDecrease></IndentDecrease>
<IndentIncrease></IndentIncrease>
<Font></Font>
<Background></Background>
<InsertCharacter></InsertCharacter>
<Anchor></Anchor>
<Table></Table>
<TableWidth></TableWidth>
<TableHeight></TableHeight>
<TableCellSpacing></TableCellSpacing>
<TableCellPadding></TableCellPadding>
<TableHAlign></TableHAlign>
<TableBorderSize></TableBorderSize>
<TableBorderStyle></TableBorderStyle>
<TableBorderColor></TableBorderColor>
<TableBackground></TableBackground>
<TableCellWidth></TableCellWidth>
<TableCellHeight></TableCellHeight>
<TableCellHAlign></TableCellHAlign>
<TableCellVAlign></TableCellVAlign>
<TableCellBackground></TableCellBackground>
<HLine></HLine>
<SectionType></SectionType>
<H1></H1>
<H2></H2>
<H3></H3>
<H4></H4>
<H5></H5>
<H6></H6>
<Style></Style>
<Language></Language>
<Abbreviation></Abbreviation>
<CurrentElement></CurrentElement>
</DisallowedActions>
<DisallowedStyles></DisallowedStyles>
</FormattingFeatures>
</template>
</stylesheet>
</tcm:FilterXSLT>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
スキーマ ソースの tcm:FilterXSLT に xslt コードを記述して、それができるかどうかを知りたいです。
誰でもそれを行う方法を助けることができますか。
ありがとう。