标记允许对内容进行分类和组织。 标记可以按命名空间和分类进行分类。 有关使用标记的详细信息:
本文重点介绍支持AEM中标记的底层框架以及如何将其作为开发人员使用。
要标记内容并利用AEM Tagging基础结构:
cq:Tag
的节点存在。NodeType
必须包含cq:Taggable
混音。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
。
命名空间允许将事物分组。 最典型的用例是每个站点(例如,公共和内部)或每个较大的应用程序(例如,站点或资产)都有命名空间,但命名空间可用于各种其他需求。 命名空间在用户界面中用于仅显示适用于当前内容的标记子集(即特定命名空间的标记)。
标记的命名空间是分类子树中的第一级,该子树是紧挨分类根节点的节点。 命名空间是父代不是节 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
s、其元素,以及TagID
如何解析为存储库中的绝对路径:
TagID |
命名空间 | 本地ID | 容器标记 | Leaf标签 | 存储库绝对标记路径 |
---|---|---|---|---|---|
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。
拒绝某些标记或命名空间的读取权限将控制将标记应用于特定内容的能力。
典型做法包括:
tag-administrators
组/角色对所有命名空间进行写入访问(在/content/cq:tags
下添加/修改)。 这个组随附AEM即装即用。/content/cq:tags/some_namespace
下的add_node
)为了使应用程序开发人员将标记附加到内容类型,节点的注册(CND)必须包括cq:Taggable
混音或cq:OwnerTaggable
混音。
继承自cq:Taggable
的cq:OwnerTaggable
混音旨在指示内容可由所有者/作者分类。 在AEM中,它只是cq:PageContent
节点的属性。 标记框架不需要cq:OwnerTaggable
混音。
建议仅在聚集内容项(或其jcr:content
节点)的顶级节点上启用标记。 示例包括:
cq:Page
),其中jcr:content
节点类型为cq:PageContent
,其中包括cq:Taggable
混音。cq:Asset
),其中jcr:content/metadata
节点始终具有cq:Taggable
混音。节点类型定义作为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
属性是String
数组,当作者或站点访客将TagID
应用于内容时,它们用于存储一个或多个<a2/>。 仅当添加到使用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被移动/合并/删除或标记B被激活时,这通常要求使cq:movedTo
属性保持最新,在这种情况下,必须同时激活其所有反向链接标记。
仅当满足以下任一条件时,cq:backlinks
属性才会添加到已移动或合并的标记:
读取内容节点的cq:tags
属性涉及以下分辨率:
/content/cq:tags
下没有匹配项,则不返回标记。cq:movedTo
属性,则引用的标记ID将随后显示。
cq:movedTo
属性,就重复此步骤。cq:movedTo
属性,则读取标记。要在标记被移动或合并时发布更改,必须复制cq:Tag
节点及其所有反向链接。 在标记管理控制台中激活标记时,系统会自动执行此操作。
稍后对页面cq:tags
属性的更新会自动清除旧引用。 这是由于通过API解析移动的标记会返回目标标记,从而提供目标标记ID而触发的。