AEM 태깅 프레임워크

컨텐츠에 태그를 지정하고 AEM 태깅 인프라를 활용하려면 다음과 같이 하십시오.

  • The tag must exist as a node of type [cq:Tag](#tags-cq-tag-node-type) under the taxonomy root node

  • 태그가 지정된 콘텐츠 노드의 NodeType에는 cq:Taggable 혼합

  • 다음 TagID 컨텐츠 노드의 cq:tags 속성 및 가 유형의 노드로 확인됨 [cq:Tag](#tags-cq-tag-node-type)

태그 : cq:태그 노드 유형

태그의 선언은 유형 노드의 저장소에 캡처됩니다 cq:Tag.

태그는 단순한 단어(예: 하늘)이거나 계층적 분류법(예: 과일/apple, 일반 과일 및 보다 구체적인 apple)을 나타낼 수 있습니다.

태그는 고유한 TagID로 식별됩니다.

태그에는 제목, 현지화된 제목 및 설명과 같은 선택적 메타 정보가 있습니다. 제목이 있으면 TagID 대신 사용자 인터페이스에 표시되어야 합니다.

또한 태깅 프레임워크는 작성자와 사이트 방문자가 사전 정의된 특정 태그만 사용하도록 제한하는 기능을 제공합니다.

태그 특성

  • 노드 유형은 cq:Tag

  • 노드 이름은 의 구성 요소입니다 [TagID](#tagid)

  • a [TagID](#tagid) 항상 포함 namespace

  • 옵션 jcr:title 속성(UI에 표시할 제목)

  • 옵션 jcr:description 속성

  • 하위 노드를 포함할 때에는 컨테이너 태그

  • 분류 루트 노드

태그 ID

TagID는 저장소의 태그 노드로 확인되는 경로를 식별합니다.

일반적으로 TagID는 네임스페이스로 시작하는 축약형 TagID이거나 분류 루트 노드.

컨텐츠에 태그를 지정할 때 태그가 아직 없는 경우 [cq:tags](#tagged-content-cq-tags-property) 속성이 content 노드에 추가되고 TagID가 속성의 String 배열 값에 추가됩니다.

TagID는 namespace 다음에 로컬 TagID가 옵니다. 컨테이너 태그 분류에서 계층적 순서를 나타내는 하위 태그가 있습니다. 하위 태그를 사용하여 로컬 TagID와 동일한 태그를 참조할 수 있습니다. 예를 들어 "과일", "과일/apple" 및 "과일/바나나"와 같은 하위 태그가 있는 컨테이너 태그인 경우에도 "과일"을 사용하여 콘텐츠에 태그를 지정할 수 있습니다.

분류 루트 노드

분류 루트 노드는 저장소의 모든 태그에 대한 기본 경로입니다. 분류 루트 노드는 not 유형의 노드임 cq :Tag.

AEM에서 기본 경로는 입니다. /content/ cq :tags 그리고 루트 노드는 유형이 됩니다. cq :Folder.

태그 네임스페이스

네임스페이스를 통해 항목을 그룹화할 수 있습니다. The most typical use-case is to have a namespace per (web)site (for example public, internal, and portal) or per larger application (e.g. WCM, Assets, Communities) but namespaces can be used for various other needs. Namespaces are used in the user interface to only show the subset of tags (i.e. tags of a certain namespace) that is applicable to the current content.

태그의 네임스페이스는 분류법 하위 트리의 첫 번째 수준이며, 이 하위 트리는 분류 루트 노드. A namespace is a node of type cq:Tag whose parent is not a cq:Tagnode type.

모든 태그에는 네임스페이스가 있습니다. 지정된 네임스페이스가 없으면 태그가 TagID인 기본 네임스페이스에 할당됩니다 default (제목: Standard Tags),그건 /content/cq:tags/default.

컨테이너 태그

컨테이너 태그는 유형의 노드입니다 cq:Tag 에는 임의 개수의 하위 노드 및 유형이 포함되어 있으므로 사용자 지정 메타데이터로 태그 모델을 향상시킬 수 있습니다.

또한 분류법의 컨테이너 태그(또는 수퍼 태그)는 모든 하위 태그의 하위 합계로 사용됩니다. 예를 들어, 과일/apple 태그가 지정된 컨텐츠도 과일에 태그가 지정된 것으로 간주됩니다. 예를 들어, 과일로 태그가 지정된 컨텐츠의 검색도 과일/apple 태그가 지정된 내용을 찾을 수 있습니다.

TagID 해결

태그 ID에 콜론 ":"이 포함되어 있으면 콜론은 태그 또는 하위 분류에서 네임스페이스를 분리하며 이 다음 슬래시 "/"로 구분됩니다. 태그 ID에 콜론이 없는 경우 기본 네임스페이스가 암시됩니다.

태그의 표준 및 전용 위치는 /content/cq:tags 아래에 있습니다.

cq:Tag 노드를 가리키지 않는 비기존 경로 또는 경로를 참조하는 태그는 잘못된 것으로 간주되며 무시됩니다.

The following table shows some sample TagIDs, their elements, and how the TagID resolves to an absolute path in the repository:

The following table shows some sample TagIDs, their elements, and how the TagID resolves to an absolute path in the repository :

태그 ID
네임스페이스 로컬 ID 컨테이너 태그 리프 태그 저장소
절대 태그 경로
댐:과일/사과/버번 dam 과일/사과/베번 과일, 사과 브레인 /content/cq:tags/dam/fruit/apple/braeburn
color/red 기본값 color/red 컬러 red /content/cq:tags/default/color/red
sky 기본값 하늘 (없음) 하늘 /content/cq:tags/default/sky
dam: dam (없음) (없음) (없음, 네임스페이스) /content/cq:tags/dam
/content/cq:tags/category/car 카테고리 자동차 자동차 자동차 /content/cq:tags/category/car

태그 제목 현지화

태그에 선택적 제목 문자열( jcr:title) 속성을 추가하여 표시할 제목을 현지화할 수 있습니다 jcr:title.<locale>.

자세한 내용은

액세스 제어

태그는 저장소의 분류 루트 노드. 작성자 및 사이트 방문자가 주어진 네임스페이스에서 태그를 만들 수 있도록 허용 또는 거부하는 것은 리포지토리에서 적절한 ACL을 설정하여 수행할 수 있습니다.

Also, denying read permissions for certains tags or namespaces will control the ability to apply tags to specific content.

일반적인 방법은 다음과 같습니다.

  • Allowing the tag-administrators group/role write access to all namespaces (add/modify under /content/cq:tags). 이 그룹에는 기본적으로 AEM이 포함되어 있습니다.

  • 사용자/작성자가 읽을 수 있어야 하는 모든 네임스페이스에 대한 읽기 액세스 권한을 부여합니다(대부분 모두).

  • Allowing users/authors write access to those namespaces where tags should be freely definable by users/authors (add_node under /content/cq:tags/some_namespace)

타깃팅 가능한 컨텐츠 : cq:Taggable Mixin

애플리케이션 개발자가 컨텐츠 유형에 태깅을 첨부하려면 노드의 등록(CND)에는 를 포함해야 합니다. cq:Taggable mixin 또는 cq:OwnerTaggable 믹신

다음 cq:OwnerTaggable 에서 상속하는 mixin cq:Taggable은(는) 컨텐츠가 소유자/작성자에 의해 분류될 수 있음을 나타내기 위한 것입니다. AEM에서 이 속성은 cq:PageContent 노드 아래에 있어야 합니다. 다음 cq:OwnerTaggable 태깅 프레임워크에서는 mixin이 필요하지 않습니다.

노트

집계된 컨텐츠 항목의 최상위 노드(또는 jcr:content 노드)에서만 태그를 활성화하는 것이 좋습니다. 해당 예는 다음과 같습니다.

  • 페이지 ( cq:Page)에서 jcr:contentnode는 type입니다. cq:PageContent 여기에는 cq:Taggable 믹신

  • 자산 ( cq:Asset)에서 jcr:content/metadata 노드에는 항상 가 있습니다 cq:Taggable 믹신

노드 유형 표기법(CND)

노드 유형 정의는 저장소에 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 속성

The cq:tags property is a String array used to store one or more TagIDs when they are applied to content by authors or site visitors. 속성은 [cq:Taggable](#taggable-content-cq-taggable-mixin) 믹신

노트

AEM 태그 지정 기능을 활용하려면 사용자 정의 개발 애플리케이션에서 cq:tags.

태그 이동 및 병합

다음은 를 사용하여 태그를 이동하거나 병합할 때 리포지토리의 효과에 대한 설명입니다 태깅 콘솔:

  • 태그 A를 아래의 태그 B로 이동하거나 병합하는 경우 /content/cq:tags:

    • 태그 A는 삭제되지 않고 cq:movedTo 속성을 사용합니다.
    • 태그 B가 만들어져서(이동의 경우) cq:backlinks 속성을 사용합니다.
  • cq:movedTo 태그 B를 가리킵니다. 이 속성은 태그 A가 태그 B로 이동되거나 병합되었음을 의미합니다. 태그 B를 이동하면 이 속성이 그에 따라 업데이트됩니다. Tag A is thus hidden and is only kept in the repository to resolve tag IDs in content nodes pointing to tag A. The tag garbage collector removes tags like tag A once no more content nodes point to them.
    에 대한 특수 값 cq:movedTo property nirvana: 태그가 삭제될 때 적용되지만, cq:movedTo 그건 보관해야 합니다

    노트

    다음 cq:movedTo 속성은 다음 조건 중 하나가 충족되는 경우에만 이동되거나 병합된 태그에 추가됩니다.

    1. Tag is used in content (meaning it has a reference) OR
    2. 태그에 이미 이동된 하위 항목이 있습니다.
  • cq:backlinks 는 참조를 다른 방향으로 유지합니다. 즉, 태그 B로 이동하거나 병합된 모든 태그의 목록을 유지합니다. 이 작업은 주로 cq:movedTo태그 B가 이동/병합/삭제되거나 태그 B가 활성화될 때까지의 속성. 이 경우 모든 백링크 태그도 활성화해야 합니다.

    노트

    다음 cq:backlinks 속성은 다음 조건 중 하나가 충족되는 경우에만 이동되거나 병합된 태그에 추가됩니다.

    1. Tag is used in content (meaning it has a reference) OR >
    2. 태그에 이미 이동된 하위 항목이 있습니다.
  • Reading a cq:tags property of a content node involves the following resolving:

    1. If there is no match under /content/cq:tags, no tag is returned.

    2. 태그에 cq:movedTo 속성 세트, 참조된 태그 ID가 따릅니다.
      이 단계는 뒤에 오는 태그에 cq:movedTo 속성을 사용합니다.

    3. 다음에 나오는 태그에 cq:movedTo 속성, 태그를 읽습니다.

  • 태그가 이동되거나 병합될 때 변경 내용을 게시하려면 cq:Tag 노드 및 모든 백링크가 복제되어야 합니다. 이 작업은 태그가 태그 관리 콘솔에서 활성화되면 자동으로 수행됩니다.

  • 페이지의 cq:tags 속성은 "이전" 참조를 자동으로 정리합니다. API를 통해 이동한 태그를 확인하면 대상 태그가 반환되어 대상 태그 ID가 제공되므로 트리거됩니다.

노트

태그 이동은 태그 마이그레이션과 다릅니다.

태그 마이그레이션

Experience Manager 6.4 이상 태그는 /content/cq:tags: 이전에 /etc/tags. 그러나 Adobe Experience Manager이 이전 버전에서 업그레이드된 시나리오에서는 태그가 이전 위치 아래에 여전히 있습니다 /etc/tags. 업그레이드된 시스템 태그는 /content/cq:tags.

노트

In Page Properties of tags page, it is advised to use tag ID (geometrixx-outdoors:activity/biking) instead of hard coding the tag base path (for example, /etc/tags/geometrixx-outdoors/activity/biking).

태그를 나열하려면, com.day.cq.tagging.servlets.TagListServlet 사용할 수 있습니다.

노트

태그 관리자 API를 리소스로 사용하는 것이 좋습니다.

업그레이드된 AEM 인스턴스가 TagManager API를 지원하는 경우

  1. 구성 요소가 시작될 때 TagManager API는 업그레이드된 AEM 인스턴스인지 여부를 감지합니다. 업그레이드된 시스템에서 태그는 아래에 저장됩니다. /etc/tags.

  2. 그런 다음 TagManager API는 API가 를 사용함을 의미하는 이전 호환성 모드에서 실행됩니다 /etc/tags 를 기본 경로로 사용합니다. 없는 경우 새 위치를 사용합니다 /content/cq:tags.

  3. 태그 위치를 업데이트합니다.

  4. 태그를 새 위치로 마이그레이션한 후 다음 스크립트를 실행합니다.

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-------------------------------------"

스크립트는 /etc/tagscq:movedTo/cq:backLinks 속성을 사용합니다. 그런 다음 가져온 결과 세트를 반복하여 를 확인합니다. cq:movedTocq:backlinks 속성 값 /content/cq:tags 경로( /etc/tags 가 값에서 감지되었습니다.

업그레이드된 AEM 인스턴스가 클래식 UI에서 실행되는 경우

노트

클래식 UI는 다운타임 없이 사용할 수 있으며 새 태그 기본 경로를 지원하지 않습니다. 다음보다 클래식 UI를 사용하려면 /etc/tags 을(를) 만든 후 다음을 수행해야 합니다. cq-tagging 구성 요소를 다시 시작합니다.

TagManager API에서 지원되고 클래식 UI에서 실행되는 업그레이드된 AEM 인스턴스의 경우:

  1. 이전 태그 기본 경로에 대한 참조가 있으면 /etc/tags 는 tagId 또는 새 태그 위치를 사용하여 바꿉니다 /content/cq:tags, 태그를 새 위치로 마이그레이션할 수 있습니다 /content/cq:tags crx에서 구성 요소를 다시 시작합니다.

  2. 태그를 새 위치로 마이그레이션한 후 위에 언급된 스크립트를 실행합니다.

이 페이지에서는