Marco de trabajo de etiquetado de AEM aem-tagging-framework
Para etiquetar contenido y aprovechar la infraestructura de etiquetado de AEM :
- La etiqueta debe existir como nodo de tipo
cq:Tag
en el nodo raíz de taxonomía. - El nodo de contenido etiquetado
NodeType
debe incluir elcq:Taggable
mixin. - La variable TagID se agrega al nodo de contenido
cq:tags
y se resuelve en un nodo de tipocq:Tag
.
Etiquetas : cq:Tag Node Type tags-cq-tag-node-type
La declaración de una etiqueta se captura en el repositorio en un nodo de tipo cq:Tag.
Una etiqueta puede ser una palabra simple (p. ej. fruit
) o representan una taxonomía jerárquica (p. ej. fruit/apple
, es decir, frutas en general y la manzana más específica).
Las etiquetas se identifican mediante un TagID único.
Una etiqueta tiene información meta opcional, como un título, títulos localizados y una descripción. El título debe mostrarse en las interfaces de usuario en lugar del TagID
, cuando esté presente.
El marco de etiquetado también permite restringir el uso de etiquetas predefinidas específicas por parte de los autores y visitantes del sitio.
Características de las etiquetas tag-characteristics
- El tipo de nodo es
cq:Tag
. - El nombre del nodo es un componente de la variable
TagID
. - La variable
TagID
siempre incluye un espacio de nombres. - Opcional
jcr:title
propiedad (el título que se mostrará en la interfaz de usuario) - Opcional
jcr:description
property - Cuando contiene nodos secundarios, se denomina contenedor .
- Se almacena en el repositorio debajo de una ruta base denominada nodo raíz de taxonomía.
ID de etiqueta tagid
A TagID
identifica una ruta que se resuelve en un nodo de etiqueta en el repositorio.
Normalmente, la variable TagID
es un método abreviado que comienza con el área de nombres o puede ser absoluto a partir del nodo raíz de taxonomía.
Cuando el contenido está etiquetado, si aún no existe, la variable cq:tags
se añade al nodo de contenido y a la variable TagID
se agrega al valor de matriz de cadenas de la propiedad.
La variable TagID
consiste en un namespace seguido por el TagID
. Etiquetas de contenedor tienen subetiquetas que representan un orden jerárquico en la taxonomía. Las subetiquetas se pueden usar para hacer referencia a las etiquetas del mismo modo que cualquier etiqueta local TagID
. Por ejemplo, etiquetar contenido con fruit
está permitido, incluso si es una etiqueta contenedora con subetiquetas, como fruit/apple
y fruit/banana
.
Nodo raíz de taxonomía taxonomy-root-node
El nodo raíz de taxonomía es la ruta base para todas las etiquetas del repositorio. El nodo raíz de taxonomía no debe ser de tipo cq:Tag
.
En AEM, la ruta base es /content/cq:tags
y el nodo raíz es del tipo cq:Folder
.
Área de nombres de la etiqueta tag-namespace
Los espacios de nombres permiten agrupar elementos. El caso de uso más típico es tener un área de nombres por sitio (por ejemplo, pública, interna y portal) o por aplicación más grande (por ejemplo, Sitios, Recursos, Forms), pero las áreas de nombres se pueden usar para otras necesidades. Los espacios de nombres se utilizan en la interfaz de usuario para mostrar solo el subconjunto de etiquetas (es decir, etiquetas de un determinado espacio de nombres) que se aplica al contenido actual.
El espacio de nombres de la etiqueta es el primer nivel del subárbol de taxonomía, que es el nodo inmediatamente inferior al nodo raíz de taxonomía. Un área de nombres es un nodo de tipo cq:Tag
cuyo padre no es un cq:Tag
tipo de nodo.
Todas las etiquetas tienen un espacio de nombres. Si no se especifica ningún espacio de nombres, la etiqueta se asigna al espacio de nombres predeterminado, que es TagID
default
(el título es Standard Tags
) que es /content/cq:tags/default
.
Etiquetas de contenedor container-tags
Una etiqueta contenedora es un nodo de tipo cq:Tag
que contenga cualquier número y tipo de nodos secundarios, lo que permite mejorar el modelo de etiquetas con metadatos personalizados.
Además, las etiquetas de contenedor (o superetiquetas) de una taxonomía sirven como subsuma de todas las subetiquetas. Por ejemplo, contenido etiquetado con fruit/apple
se considera que está etiquetado con fruit
también. Esto significa que la búsqueda de contenido solo está etiquetada con fruit
también encontrará el contenido etiquetado con fruit/apple
.
Resolución de TagID resolving-tagids
Si el ID de etiqueta contiene dos puntos :
, los dos puntos separan el área de nombres de la etiqueta o subtaxonomía, que luego se separan con barras inclinadas normales /
. Si el ID de etiqueta no tiene dos puntos, se da a entender el espacio de nombres predeterminado.
La ubicación estándar y única de las etiquetas es inferior a /content/cq:tags
.
Etiquetado que hace referencia a rutas o rutas no existentes que no apuntan a una cq:Tag
se consideran no válidos y se ignoran.
La siguiente tabla muestra algunos ejemplos TagIDs
, sus elementos y cómo TagID
responde a una ruta absoluta en el repositorio.
TagID
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
Localización del título de la etiqueta localization-of-tag-title
Cuando la etiqueta incluye la cadena de título opcional (jcr:title
) es posible localizar el título para mostrar añadiendo la propiedad jcr:title.<locale>
.
Para obtener más información, consulte:
- Etiquetas en diferentes idiomas, que describe el uso de las API.
- Administración de etiquetas en diferentes idiomas, que describe el uso de la consola Etiquetado .
Control de acceso access-control
Las etiquetas existen como nodos en el repositorio en el nodo raíz de taxonomía. Permitir o denegar a los autores y visitantes del sitio la capacidad de crear etiquetas en un espacio de nombres determinado se puede lograr estableciendo las ACL adecuadas en el repositorio.
Además, negar permisos de lectura para ciertas etiquetas o áreas de nombres controlará la capacidad de aplicar etiquetas a contenido específico.
Una configuración típica incluye:
- Permitiendo el
tag-administrators
acceso de escritura de grupo/función a todas las áreas de nombres (añadir/modificar en/content/cq:tags
).- Este grupo viene con AEM listo para usar.
- Permitir que los usuarios/autores lean acceso a todas las áreas de nombres que deberían ser legibles para ellos (en su mayoría, todas).
- Permitir que los usuarios/autores escriban acceso a las áreas de nombres en las que los usuarios/autores deben definir las etiquetas libremente (
add_node
under/content/cq:tags/some_namespace
)
Contenido etiquetable : cq:Mezcla etiquetable taggable-content-cq-taggable-mixin
Para que los desarrolladores de aplicaciones puedan adjuntar etiquetas a un tipo de contenido, el registro del nodo (CND) debe incluir el cq:Taggable
mezcla o cq:OwnerTaggable
mixin.
La variable cq:OwnerTaggable
mixin, que hereda de cq:Taggable
, está pensado para indicar que el contenido puede ser clasificado por el propietario/autor. En AEM, solo es un atributo de la variable cq:PageContent
nodo . La variable cq:OwnerTaggable
la mezcla no es necesaria para el marco de etiquetado.
jcr:content
nodo ). Algunos ejemplos son:- Páginas (
cq:Page
) donde la variablejcr:content
el nodo es de tipocq:PageContent
que incluye elcq:Taggable
mixin. - Recursos (
cq:Asset
) donde la variablejcr:content/metadata
el nodo siempre tiene la variablecq:Taggable
mixin.
Anotación de tipo de nodo (CND) node-type-notation-cnd
Las definiciones de Tipo de nodo existen en el repositorio como archivos CND. La notación CND se define como parte de la documentación de JCR here.
Las definiciones esenciales para los tipos de nodo incluidos en AEM son las siguientes:
[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
Contenido etiquetado: cq:tags (propiedad) tagged-content-cq-tags-property
La variable cq:tags
es una matriz de cadenas que se utiliza para almacenar una o más TagID
s cuando los autores o los visitantes del sitio los aplican al contenido. La propiedad solo tiene significado cuando se agrega a un nodo que se define con la variable cq:Taggable
mixin.
cq:tags
.Mover y combinar etiquetas moving-and-merging-tags
A continuación, se muestra una descripción de los efectos que se producen en el repositorio al mover o combinar etiquetas utilizando la variable Consola de etiquetado:
-
Cuando una etiqueta A se mueve o combina en la etiqueta B debajo de
/content/cq:tags
:- La etiqueta A no se elimina y obtiene un
cq:movedTo
propiedad. - La etiqueta B se crea (en caso de un movimiento) y obtiene un
cq:backlinks
propiedad.
- La etiqueta A no se elimina y obtiene un
-
cq:movedTo
apunta a la etiqueta B.-
Esta propiedad significa que la etiqueta A se ha movido o combinado en la etiqueta B.
-
Al mover la etiqueta B se actualizará esta propiedad según corresponda. Por lo tanto, la etiqueta A está oculta y solo se mantiene en el repositorio para resolver los ID de etiqueta en los nodos de contenido que apuntan a la etiqueta A.
-
El recolector de residuos de etiquetas elimina etiquetas como la etiqueta A una vez que más nodos de contenido no señalan a ellas.
-
Un valor especial para la variable
cq:movedTo
la propiedad esnirvana
: se aplica cuando se elimina la etiqueta, pero no se puede eliminar del repositorio porque hay subetiquetas con uncq:movedTo
eso debe mantenerse.note note NOTE La variable cq:movedTo
solo se agrega a la etiqueta movida o combinada si se cumple cualquiera de estas condiciones:- La etiqueta se utiliza en el contenido (lo que significa que tiene una referencia).
- La etiqueta tiene elementos secundarios que ya se han movido.
-
-
cq:backlinks
mantiene las referencias en la otra dirección, es decir, mantiene una lista de todas las etiquetas que se han movido a la etiqueta B o que se han combinado con ella.- Esto es necesario principalmente para mantener
cq:movedTo
propiedades actualizadas cuando la etiqueta B también se mueve, combina o elimina, o cuando la etiqueta B está activada, en cuyo caso todas sus etiquetas backlinks también deben activarse.
- Esto es necesario principalmente para mantener
cq:backlinks
solo se agrega a la etiqueta movida o combinada si se cumple cualquiera de estas condiciones:- La etiqueta se utiliza en el contenido (lo que significa que tiene una referencia).
- La etiqueta tiene elementos secundarios que ya se han movido.
-
Leer un
cq:tags
la propiedad de un nodo de contenido implica la siguiente resolución:-
Si no hay coincidencia en
/content/cq:tags
, no devuelve ninguna etiqueta. -
Si la etiqueta tiene un
cq:movedTo
conjunto de propiedades, se sigue el ID de etiqueta al que se hace referencia.- Este paso se repite siempre y cuando la etiqueta siguiente tenga una
cq:movedTo
propiedad.
- Este paso se repite siempre y cuando la etiqueta siguiente tenga una
-
Si la etiqueta siguiente no tiene un valor
cq:movedTo
, se lee la etiqueta .
-
-
Para publicar el cambio cuando una etiqueta se ha movido o combinado, la variable
cq:Tag
y todos sus vínculos secundarios deben replicarse.- Esto se realiza automáticamente cuando la etiqueta está activada en la consola de administración de etiquetas.
-
Actualizaciones posteriores en el informe
cq:tags
limpie automáticamente las referencias "antiguas".- Esto se activa porque la resolución de una etiqueta movida a través de la API devuelve la etiqueta de destino, proporcionando así el ID de etiqueta de destino.
Migración de etiquetas tags-migration
A partir de Adobe Experience Manager 6.4, las etiquetas se almacenan en /content/cq:tags
. Sin embargo, en los casos en que Adobe Experience Manager se haya actualizado desde la versión anterior, las etiquetas siguen presentes en la ubicación antigua /etc/tags
. En sistemas actualizados, es necesario migrar las etiquetas a /content/cq:tags
.
geometrixx-outdoors:activity/biking
) en lugar de codificar la ruta de base de etiquetas (por ejemplo, /etc/tags/geometrixx-outdoors/activity/biking
).com.day.cq.tagging.servlets.TagListServlet
se puede usar.Si la instancia de AEM actualizada es compatible con la API de TagManager**
-
Al principio del componente, la API de TagManager detecta si se trata de una instancia de AEM actualizada. En el sistema actualizado, las etiquetas se almacenan en
/etc/tags
. -
A continuación, la API de TagManager se ejecuta en modo de compatibilidad con versiones anteriores, lo que significa que la API utiliza
/etc/tags
como ruta base. Si no es así, utiliza una nueva ubicación/content/cq:tags
. -
Actualice la ubicación de las etiquetas.
-
Después de migrar las etiquetas a la nueva ubicación, ejecute la siguiente secuencia de comandos.
import org.apache.sling.api.resource.*
import javax.jcr.*
ResourceResolverFactory resourceResolverFactory = osgi.getService(ResourceResolverFactory.class);
ResourceResolver resolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
Session session = resolver.adaptTo(Session.class);
def queryManager = session.workspace.queryManager;
def statement = "/jcr:root/content/cq:tags//element(*, cq:Tag)[jcr:contains(@cq:movedTo,\'/etc/tags\') or jcr:contains(@cq:backlinks,\'/etc/tags\')]";
def query = queryManager.createQuery(statement, "xpath");
println "query = ${query.statement}\n";
def tags = query.execute().getNodes();
tags.each { node ->
def tagPath = node.path;
println "tag = ${tagPath}";
if(node.hasProperty("cq:movedTo") && node.getProperty("cq:movedTo").getValue().toString().startsWith("/etc/tags")){
def movedTo = node.getProperty("cq:movedTo").getValue().toString();
println "cq:movedTo = ${movedTo} \n";
movedTo = movedTo.replace("/etc/tags","/content/cq:tags");
node.setProperty("cq:movedTo",movedTo);
} else if(node.hasProperty("cq:backlinks")){
String[] backLinks = node.getProperty("cq:backlinks").getValues();
int count = 0;
backLinks.each { value ->
if(value.startsWith("/etc/tags")){
println "cq:backlinks = ${value}\n";
backLinks[count] = value.replace("/etc/tags","/content/cq:tags");
}
count++;
}
node.setProperty("cq:backlinks",backLinks);
}
}
session.save();
println "---------------------------------Success-------------------------------------"
La secuencia de comandos recupera todas las etiquetas que tienen /etc/tags
en el valor de cq:movedTo/cq:backLinks
propiedad. A continuación, se repite a través del conjunto de resultados recuperados y resuelve el cq:movedTo
y cq:backlinks
valores de propiedad a /content/cq:tags
rutas (en caso de que /etc/tags
se detecta en el valor ).
Si la instancia de AEM actualizada se ejecuta en la IU clásica**
/etc/tags
debe crearse seguido de cq-tagging
reiniciar el componente.En caso de que las instancias de AEM actualizadas sean compatibles con la API de TagManager y se ejecuten en la IU clásica:
-
Una vez hace referencia a la ruta de base de etiquetas antigua
/etc/tags
se reemplazan utilizando tagId o una nueva ubicación de etiqueta/content/cq:tags
, puede migrar etiquetas a la nueva ubicación/content/cq:tags
en CRX DE seguido del reinicio de componentes. -
Después de migrar las etiquetas a la nueva ubicación, ejecute el script mencionado anteriormente.