タグ付けにより、コンテンツを分類および整理できますタグの分類には、名前空間と分類を使用できます。タグの使用について詳しくは、以下を参照してください。
この記事では、AEM でのタグ付けをサポートしている基盤フレームワークと、それを開発者として活用する方法を重点的に取り上げます。
コンテンツにタグ付けし、AEM タグ付けインフラストラクチャを利用するには:
cq:Tag
タイプのノードとして分類階層のルートノードの下に存在する必要があります。NodeType
には、cq:Taggable
Mixin が含まれている必要があります。TagID
がコンテンツノードの cq:tags
プロパティに追加され、cq:Tag
タイプのノードに解決されます。タグの宣言は、リポジトリーにおける cq:Tag.
タイプのノードにキャプチャされます。
sky
など)や、階層的な分類(一般的な果物とより具体的にリンゴの両方を意味する fruit/apple
など)にすることができます。TagID
によって識別されます。TagID
ではなくタイトル(存在する場合)が表示されます。タグ付けフレームワークでは、作成者やサイト訪問者に、特定の事前定義されたタグだけを使用するよう制限を設けることもできます。
cq:Tag
です。TagID
の構成要素になります。TagID
には常に名前空間が含まれています。jcr:title
プロパティ(UI に表示するタイトル)は省略可能です。jcr:description
プロパティは省略可能です。TagID
は、リポジトリー内のタグノードに解決されるパスを識別します。
通常、TagID
は名前空間で始まる短縮形のTagID
ですが、分類のルートノードから始まる絶対TagID
にすることもできます。
コンテンツにタグ付けするときに、コンテンツがまだ存在しない場合は、cq:tags
プロパティがコンテンツノードに追加され、TagID
がこのプロパティの String
配列値に追加されます。
TagID
は、名前空間とそれに続くローカルTagID
で構成されます。コンテナタグにはサブタグがあり、これは分類における階層順序を表します。サブタグは、任意のローカルTagID
と同じタグを参照するのに使用できます。例えば、fruit
というタグが fruit/apple
や fruit/banana
などのサブタグを含むコンテナタグであっても、コンテンツにこのタグを付けることができます。
分類のルートノードは、リポジトリー内にあるすべてのタグの基本パスです。分類のルートノードは、cq:Tag
タイプのノードにすることができません。
AEM の基本パスは /content/cq:tags
であり、ルートノードのタイプは cq:Folder
です。
名前空間を使用するとグループ化を行うことができます。サイトごと(例:公開または社内)や大規模なアプリケーションごと(例:Sites または Assets)に名前空間を設けることが最も典型的なユースケースですが、名前空間はその他の様々なニーズにも使用できます。名前空間は、現在のコンテンツに適用されるタグのサブセット(つまり特定の名前空間のタグ)のみを表示するためにユーザーインターフェイスで使用されます。
タグの名前空間は、分類サブツリーの最初のレベルです。これは、分類のルートノードの直下のノードです。名前空間は cq:Tag
タイプのノードで、その親は cq:Tag
ノードタイプではありません。
すべてのタグには名前空間があります。名前空間を指定しない場合、タグはデフォルトの名前空間(TagID
が default
つまり /content/cq:tags/default
)に割り当てられます。この場合、タイトルはデフォルトでStandard Tags
に設定されます。
コンテナタグは、任意の数およびタイプの子ノードを含む、cq:Tag
タイプのノードです。これにより、カスタムメタデータを使用してタグモデルを強化できます。
さらに、コンテナタグ(またはスーパータグ)は分類において、すべてのサブタグの小計としての機能を果たします。例えば fruit/apple
でタグ付けされたコンテンツは、fruit
でタグ付けされたとも見なされます。つまり、fruit
でタグ付けされたコンテンツを検索すると、fruit/apple
でタグ付けされたコンテンツも検索されます。
タグ ID にコロン(:
)が含まれている場合、そのコロンによってタグやサブ分類から名前空間が区別され、その後、タグやサブ分類は通常のスラッシュ(/
)で区別されます。タグ ID にコロンが含まれていない場合は、デフォルトの名前空間が暗示されます。
タグの標準の場所は /content/cq:tags
の下のみです。
存在しないパスまたは cq:Tag
ノードを指していないパスを参照するタグは、無効と見なされて無視されます。
TagID
の例とその要素、そのTagID
がリポジトリー内の絶対パスにどのように解決されるかを次の表に示します。
TagID |
名前空間 | ローカル ID | コンテナタグ | リーフタグ | リポジトリー内の絶対パス |
---|---|---|---|---|---|
dam:fruit/apple/braeburn |
dam |
fruit/apple/braeburn |
fruit 、apple |
braeburn |
content/cq:tags/dam/fruit/apple/braeburn |
color/red |
default |
color/red |
color |
red |
/content/cq:tags/default/color/red |
sky |
default |
sky |
(なし) | sky |
/content/cq:tags/default/sky |
dam: |
dam |
(なし) | (なし) | (なし) | /content/cq:tags/dam |
content/cq:tags/category/car |
category |
car |
car |
car |
content/cq:tags/category/car |
タグにオプションのタイトル文字列 jcr:title
が含まれている場合は、jcr:title.<locale>
プロパティを追加することで、表示用のタイトルをローカライズできます。
詳しくは、以下を参照してください。
タグは、リポジトリー内で分類のルートノードの下にノードとして存在します。作成者やサイト訪問者に対し、特定の名前空間内でのタグの作成を許可または禁止するには、リポジトリーに適切な ACL を設定します。
特定のタグまたは名前空間に対する読み取り権限を拒否することで、特定のコンテンツへのタグの適用を制御できます。
一般的な方法には次のものがあります。
/content/cq:tags
下への add/modify)をtag-administrators
グループ/役割に許可する。このグループは、追加設定なしで使用できる AEM に付属しています。/content/cq:tags/some_namespace
下への add_node
)をユーザー/作成者に許可する。アプリケーション開発者がコンテンツタイプにタグ付けを付加するには、ノードの登録(CND)に cq:Taggable
Mixin または cq:OwnerTaggable
Mixin を含める必要があります。
cq:OwnerTaggable
Mixin は cq:Taggable
から継承されており、その目的は、所有者または作成者がコンテンツを分類できることを示すことです。AEM では、cq:PageContent
ノードの属性にすぎません。cq:OwnerTaggable
Mixin は、タグ付けフレームワークには必要ありません。
集約されたコンテンツアイテムの最上位ノード(またはその jcr:content
ノード)では、タグの有効化だけを行うことをお勧めします。以下に例を示します。
jcr:content
ノードのタイプが cq:PageContent
であるページ(cq:Page
)。cq:Taggable
Mixin が含まれています。jcr:content/metadata
ノードに常に cq:Taggable
Mixin があるアセット(cq:Asset
)。ノードタイプの定義は、リポジトリー内に CND ファイルとして存在します。CND 表記は、JCR ドキュメントの一部として定義されています。
AEM に含まれるノードタイプの基本的な定義は、次のようになります。
[cq:Tag] > mix:title, nt:base
orderable
- * (undefined) multiple
- * (undefined)
+ * (nt:base) = cq:Tag version
[cq:Taggable]
mixin
- cq:tags (string) multiple
[cq:OwnerTaggable] > cq:Taggable
mixin
cq:tags
プロパティは、作成者またはサイト訪問者によってコンテンツに 1 つ以上のTagID
が割り当てられたときにその ID を格納するための String
配列です。このプロパティは、cq:Taggable
Mixin で定義されているノードに追加した場合にのみ意味があります。
AEM のタグ付け機能を使用するには、カスタムで開発されたアプリケーションで cq:tags
以外のタグプロパティを定義しないでください。
次に、タグ付けコンソールを使用してタグの移動または結合を実行した場合のリポジトリーでの影響について説明します。
タグ A を /content/cq:tags
下のタグ B に移動または結合した場合:
タグ A は削除されず、cq:movedTo
プロパティを取得します。
cq:movedTo
はタグ B を指します。
このプロパティは、タグ A がタグ B に移動または結合されたことを意味します。
タグ B を移動すると、それに応じてこのプロパティが更新されます。
したがって、タグ A は非表示になり、タグ A を指すコンテンツノード内のタグ ID を解決するためだけにリポジトリーに保持されます。
タグ A のようなタグは、それを指すコンテンツノードがなくなったら、タグのガベージコレクターによって削除されます。
cq:movedTo
プロパティの特別な値に nirvana
があります。この値は、タグが削除されたにもかかわらず、保持する必要のある cq:movedTo
が含まれるサブタブが存在することが原因でそのタグをリポジトリーから削除できない場合に適用されます。
cq:movedTo
プロパティは、次のいずれかの条件を満たす場合にのみ、移動または結合されたタグに追加されます。
タグ B が作成され(移動の場合)、cq:backlinks
プロパティを取得します。
cq:backlinks
は、それ以外を指す参照を保持します。つまり、タグ B に移動または結合されたすべてのタグのリストを保持します。
これは、タグ B が移動/結合/削除されたとき、またはタグ B がアクティブになったときに、cq:movedTo
プロパティを最新の状態に保つために通常必要になります。この場合は、すべてのバックリンクタグもアクティブにする必要があります。
cq:backlinks
プロパティは、次のいずれかの条件を満たす場合にのみ、移動または結合されたタグに追加されます。
コンテンツノードの cq:tags
プロパティを読み取る場合は、次のように解決されます。
/content/cq:tags
下で一致するものが見つからない場合、タグは返されません。cq:movedTo
プロパティが設定されている場合は、参照先のタグ ID が使用されます。
cq:movedTo
プロパティがある限り繰り返されます。cq:movedTo
プロパティがない場合は、そのタグが読み取られます。タグを移動または結合したときに変更を発行するには、cq:Tag
ノードとそのすべてのバックリンクを複製する必要があります。これは、タグ管理コンソールでタグがアクティブにされたときに自動的に行われます。
後でページの cq:tags
プロパティに対して更新が行われると、以前の参照が自動的にクリーンアップされます。移動したタグを API で解決すると移動先のタグが戻され、移動先のタグ ID が提供されることから、この処理がトリガーされます。