さらに、ドキュメント自体の形成はクライアント側で発生する可能性があります。 XSLテンプレートへのリンクを含むXMLデータ構造をブラウザに渡すだけで十分です。ブラウザ自体は、設計者が意図したとおりにフォームにページを「描画」します。 サイトの各ページのコンテンツはさまざまですが、このコンテンツを送信するためのフォームは通常、少数のテンプレートに制限されています。 したがって、XSLTを使用すると、Webサイトで記述されたデータプレゼンテーションテンプレートを1回使用できます。 ここでは、CMSにとって理想的なテクノロジーのようです。 ただし、この技術の普及は多くの要因によって制限されています。 これらのうち、心理的慣性は支配的な要因ではありません。 XSLTを使用してサイトの機能を記述することは、非常に時間のかかるタスクです。 さらに、XSLテンプレートはXMLデータドキュメントに依存しすぎるため、このテクノロジに基づくソリューションの柔軟性が制限されます。
したがって、XSLTは概念的には問題ありませんが、実際には時間のかかるソリューションです。 この状況により、開発者は、承認されたオープン標準の利点を含むと同時に比較的使いやすい新しいソリューションを探すように求められます。 そのようなソリューションの1つは、宣言型XML言語Sapiens(www.xmlsapiens.org)です。
XML Sapiensの仕組み
XSLTと同様に、特定のテンプレートを各サイトドキュメントに関連付ける必要があります。 テンプレートには、任意のプレゼンテーションコード(HTMLなど)およびXML Sapiens命令を含めることができます。 いくつかのファイルがテンプレートに含まれている場合があります。 これを行うには、sapi:include命令を使用します。これは、オープン標準のxIncludeの類似物に近いものです。
<sapi:include href="__" parse="template" />
他のXML Sapiens命令は、コンテンツと機能ブロックをドキュメントに配信します。
この決定の目的は、コンテンツと機能の構造の説明を共有することです。 これにより、コンテンツと機能の構造のワイヤーフレームの特定のセットを一度作成し、将来、サイトを構築するときにコンストラクターとして使用できます。
XMLサピエンスとデータ
XML Sapiensには、インターフェイス状態などの概念が含まれています。 これにより、外部または指定された条件に応じて、サイト上の同じページに異なるデータセットを定義できます。 ユーザーがサイトで承認されている場合、他のユーザーが承認されていない場合、ページにいくつかのコンテンツフィールドが含まれていると仮定します。 ページコンテンツフィールドセットの状態は、個別のXMLドキュメントで定義されます。 セットを適用するには、指定された状態のセットを有効にするだけで十分です。
<sapi:include href="___" parse="fieldset" state="a2" />
フィールドのセットには、データ配信指示が含まれています。 これらの命令は、指定されたデータ識別子を外部XMLドキュメントに記述されているフィールドタイプに関連付けます。
<sapi:適用名= "qc.identifier.value"タイプ= "タイプ" href = "type_description_address" />
フィールドセットの場合のように、フィールドタイプのXMLドキュメントには、さまざまなインターフェイス状態のタイプの説明を含めることができます。 「管理」および「コンテンツ配信」の状態がシステムで定義されている場合、最初のケースではデータをコンテンツリクエストの形式で、2番目のケースでは「現状のまま」提示できます。

XMLサピエンスと機能
ページテンプレートには、機能のスクリプトを要求するための指示も含まれる場合があります。 このシナリオのアルゴリズムは、指定されたXMLファイルに記述されています。
<sapi:apply name="ddc.menu.value" href="_" />
Functional Algorithm Description(DDC)ドキュメントには、XSLTと同様に、条件を分析するための指示が含まれています。 DDC構文では、CMSアプリケーションを参照することもできます。CMSアプリケーションは、渡されたパラメーターに従って、条件をさらに分析するためにデータストリームを返します。
<sapi version="2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd">
<sapi:ddc name="sample">
<sapi:choose>
<sapi:when exp="eq(this_record_id.value,0)">
<sapi:for-each select="cms_application()" name="enum">
<sapi:params>
<sapi:param name="param1">value1</sapi:param>
<sapi:param name="param2">value2</sapi:param>
</sapi:params>
<sapi:ifempty>Records not found</sapi:ifempty>
<sapi:fallback>CMS-application error</sapi:fallback>
<sapi:choose>
<sapi:when exp="gt(this.this.___.value,0)">
<sapi:code>
Sample code, &this.this.___.value;
</sapi:code>
</sapi:when>
</sapi:choose>
</sapi:when>
</sapi:choose>
</sapi:ddc>
</sapi>
機能スクリプトをリクエストする場合、リクエストパラメータを指定することができ、機能シナリオを複数回使用できます。
<sapi:apply name="ddc.menu.value" href="http://site.com/ddc/menu.xml">
<sapi:param name="param1">value1</sapi:param>
<sapi:param name="param2">value2</sapi:param>
</sapi:apply>

ご覧のとおり、XML Sapiensを使用すると、データ構造、コンテンツフィールドの種類、機能の一連の説明を準備し、後でサイトの構築で使用できます。 これらのコンポーネントを再利用する機能により、Webプロジェクトの開発時間が短縮され、システムプログラミングが回避されます。 さらに、XML Sapiensは普遍的です。 任意のプログラミング言語で記述されたCMSで使用できます。
この言語は1年以上存在しており、最近2番目のバージョンが公開されました。 これは、この言語が引き続き開発され、使用されることを願っています。 現在、この言語に基づいて動作するCMSはわずかです。 ただし、この数が増えると、異なるCMSを使用する開発者間での機能ソリューションの交換が一般的になる可能性があります。