質問: 深さがあらかじめわかっていない階層メニューのコンテンツを格納するためのスキーマを定義したいとします。メニュー項目を単なるリンク/キャプションのペアにします。この構造体は自己完結型です。すなわち、ページ/構造体グループの階層に関連する*ではなく、*であるため、メニュー項目に埋め込みスキーマを使用するのが妥当と思われます。 上記の音は理論的には聞こえますが、実際は少しトリッキーです。 1. は**のMenuItem**埋め込まれたスキーマを作成し、それが多値**アイテム**フィールド参照自体です作ってみました:ここに私が試したし、持っているものですUIはこの状況を認識しており、埋め込み可能なフィールド設定で利用可能なオプションから現在のスキーマを隠すため、これは最初から機能しませんでした。 2. はMenuItemEven**としてのMenuItem****をクローン化し、それらをcrossreferenceしようとしました。 UI *は*です。しかし、コンポーネント作成フォームは壊れているように見えます。スキーマを選択しても、それは何も表示されず、「通常の」埋め込み不可能なフィールドでもありません。 (スキーマ設計UIを破ることなく、これらのスキーマを完全に消滅させるためには、頭脳的な作業が必要です。最も簡単なのは、それぞれの "不可逆的な履歴ロールバック"です)。** **- 唯一の選択肢は、レベルごとに専用の埋め込みスキーマを作成することでした。明らかに、これは、構造が無限の深さを持つことを可能にする初期条件を緩和すること(および再帰の考え方全体を捨てること)を必要とした。** **埋め込まれたスキーマの再帰が許可されていない理由を直感的に、それは明らかだ。そこでも、このようなエンティティは、コンテンツレベルの「組み込みスキーマ」としてではない、とフィールドの全階層が最低の終了まで事前にインスタンス化されなければなりません。 しかし、Tridionで再帰スキーマが不可能な「公式の」理由はありますか? UIの制限だけではないですか? XML/XSDの欠点?**
回答: XSDはこれを可能にし、非常によく使用されるパターンです。 Tridion CME/FieldBuilderはそれを理解しませんので、カスタムスキーマとそのエディタを作成する必要があります。 これまでは、コンポーネントリンクを使用してこれを行っていました。定義したのと同じように階層を作成しますが、メニューの各エントリはコンポーネントで表され、子コンポーネントへのリンクがあります。 これは明らかに視覚的に表現するのが難しいため、この実装は、編集者が作成中のメニューの完全な階層を「見る」ことができるカスタムページで行われました。パブリッシュ時に、この階層は完全なナビゲーションツリーを持つ1つのXMLファイルに「フラット化」されました。 Tridion 2009以降では、メニュー構造を表すためにカテゴリとキーワードの階層を使用する方が良いかもしれません。