학습 및 예제

일반 일치 대 ID 맵핑 체계:
비교 결과를 개선하도록 ID 맵핑 체계를 작성하는 방법

약간 다른 두 버전(왼쪽 및 오른쪽)의 예제 XML 파일을 고려하십시오. 요소 extension-pointid 속성으로 고유하게 식별된다고 가정합니다. 텍스트 차이점은 굵게 표시됩니다.

<?xml version="1.0" encoding="UTF-8"?>

<plugin
   name="%Plugin.name"
   id="org.eclipse.ui"
   version="1.0"
   provider-name="Object Technology International, Inc."
   class="org.eclipse.ui.internal.WorkbenchPlugin">

<extension-point name="%ExtPoint.editorMenus " id="editorActions"/>
<extension-point name="%ExtPoint.popupMenus " id="popupMenus"/>
<extension-point name="%ExtPoint.importWizards" id="importWizards"/>

</plugin>

  

<?xml version="1.0" encoding="UTF-8"?>

<plugin
   name="%Plugin.name"
   id="org.eclipse.ui"
   version="1.0"
   provider-name="Object Technology International, Inc."
   class="org.eclipse.ui.internal.WorkbenchPlugin">

<extension-point name="%ExtPoint.editorMenus " id="editorActions"/>
<extension-point name="%ExtPoint.popupMenus " id="popupMenus"/>
<extension-point name="%ExtPoint.exportWizards" id="exportWizards"/>

</plugin>


요소 순서는 무시해야 한다고 가정합니다. 두 문서 사이의 구조적 차이점은 오른쪽에 있는 id="exportWizards"의 새 extension-point로 바뀌는 왼쪽에 있는 id="importWizards"extension-point 요소로 구성됩니다. 비순서화라고 하는 일반적인 일치 알고리즘을 사용할 경우(XML 요소가 문서에 표시되는 순서를 무시하므로) 다음과 같은 차이점 트리가 생성됩니다.

일반적인 일치 알고리즘을 사용할 경우의 차이점 트리

처음 두 extension-point 요소는 같으므로 일치하여 차이점 트리에 표시되지 않습니다. 요소 이름이 같은 양측의 세 번째 extension-point 요소도 일치 상태로 유지됩니다. 차이점 트리는 세 번째 extension-point 요소 왼쪽과 세 번째 extension-point 요소 오른쪽 사이의 차이점을 표시합니다. 이 차이점은 idname 속성 값으로 구성됩니다.
하지만 이것이 보려고 하는 것은 아닙니다. 원하는 것은 차이점 트리가 왼쪽에서 extension-point 요소가 제거되고 새 extension-point 요소가 오른쪽에 추가되었음을 표시하는 것입니다.
이렇게 하려면 새 ID 맵핑 체계를 작성해야 합니다. 도구 모음에서 해당 단추를 사용하여 수행할 수 있습니다.

ID 맵핑 체계 새로 작성

ID 맵핑 체계 MyPlugin을 호출한다고 가정합니다. 이제 도구 모음의 드롭 다운 목록에서 ID 맵핑 체계 MyPlugin을 선택합니다.

MyPlugin ID 맵 체계 선택

그런 다음 다음 맵핑에 추가합니다.

환경 설정 페이지에서 맵핑 새로 작성     컨텍스트 메뉴를 사용하여 맵핑 새로 작성

이는 환경 설정 페이지(왼쪽)나 구조 보기의 컨텍스트 메뉴(오른쪽)를 통해 수행할 수 있습니다.
이제 차이점 트리는 다음과 같이 됩니다.
(구조 보기를 새로 고치려면 도구 모음에 있는 드롭 다운 목록의 보기 갱신 단추 단추를 클릭하십시오.)

MyPlugin  ID 맵핑 체계를 사용할 경우의 차이점 트리

이는 ID 맵핑 체계를 작성하여 완성한 원했던 비교 결과입니다.

XML 비교 플러그인은 이미 플러그인 파일용 ID 맵핑 체계와 함께 제공되어 있으므로, 특정 플러그인 파일에 맞게 사용자 정의할 수 있습니다.

경고:
ID 맵핑을 작성할 경우, ID는 고유합니다. 즉, 동일 이름 및 동일 ID의 경로를 가지고 있는 두 XML 요소가 없습니다. 그렇지 않으면 ID 맵핑 체계는 민감한 차이점 트리를 전달할 수 없습니다.
ID가 두 번 이상 표시될 수 있을 경우 하나의 ID는 일반 알고리즘에 의존해야 합니다.

또한 ID 맵핑 체계를 사용하는데 지정된 ID 맵핑을 가지고 있지 않은 요소가 있을 경우, 비순서화 비교 메소드가 사용됩니다. 즉, 요소는 문서에 표시되는 순서가 아니라 유사성을 기준으로 일치됩니다. 요소의 하위 요소가 표시 순서대로 비교되도록 하려면 순서화 항목에서 다음 절을 참조하십시오.

순서화 항목 추가

순서화된 항목은 기본값인 순서화되지 않은 방식 대신 순서화된 방식으로 경로에 의해 식별되는 xml 요소의 인접 하위 요소(속성 제외)를 비교해야 함을 지정할 수 있습니다.
예제와 같이 약간 다른 두 버전의 다음 ANT 파일을 고려해 보십시오.

<?xml version="1.0" encoding="UTF-8"?>

<project name="org.junit.wizards" default="export" basedir="..">
   <target name="export" depends="build">
      <mkdir dir="${destdir}" />
      <delete dir="${dest}" />
      <mkdir dir="${dest}" />
      <jar
         jarfile="${dest}/JUnitWizard.jar"
         basedir="bin"
      />
</project>

  

<?xml version="1.0" encoding="UTF-8"?>

<project name="org.junit.wizards" default="export" basedir="..">
   <target name="export" depends="build">
      <mkdir dir="${destdir}"/>
      <mkdir dir="${dest}"/>
      <delete dir="${dest}"/>
      <jar
         jarfile="${dest}/JUnitWizard.jar"
         basedir="bin"
      />
      <copy file="plugin.xml" todir="${dest}"/>
</project>


두 문서 사이의 차이점은 굵게 표시되어 있습니다. 두 요소가 스왑되고(<mkdir dir="${dest}"/><delete dir="${dest}"/>) 새 요소(<copy .../>)가 대상 요소에 추가되었습니다.
순서화되지 않은 비교를 수행하면 다음과 같은 차이점 트리가 생성됩니다.

순서화되지 않은 일치를 사용할 경우의 차이점 트리

요소 순서가 무시되므로 두 요소가 스왑되었다는 사실은 표시되지 않습니다.
하지만 ANT 관점에서는 두 문서가 아주 다른 동작을 유발합니다. target 내에서의 요소 순서가 중요하기 때문입니다. 따라서 대상이 비교 엔진에 대상의 인접 하위 요소를 순서화된 형태로 비교하도록 지시하기 위해 순서화된 항목을 작성하려고 합니다.
이렇게 하려면 먼저 새 ID 맵핑 체계를 작성합니다. 새 ID 맵핑 체계 작성은 도구 모음에서 해당 단추를 사용하여 수행할 수 있습니다.

ID 맵핑 체계 새로 작성

ID 맵핑 체계 MyANT를 호출한다고 가정합니다.
이제 도구 모음의 드롭 다운 목록에서 ID 맵핑 체계 MyANT를 선택하여 다음 순서화 항목에 추가합니다.

환경 설정 페이지에서 순서화된 항목 새로 작성     컨텍스트 메뉴를 사용하여 순서화된 항목 새로 작성

이는 환경 설정 페이지(왼쪽)나 구조 보기의 컨텍스트 메뉴(오른쪽)를 통해 수행할 수 있습니다.
이제 차이점 트리는 다음과 같이 됩니다.
(구조 보기를 새로 고치려면 도구 모음에 있는 드롭 다운 목록의 보기 갱신 단추 단추를 클릭하십시오.)

MyANT ID 맵핑 체계를 사용할 경우의 차이점 트리

이는 순서화된 항목을 작성하여 완성한 원했던 비교 결과입니다.

또한 ID 맵핑(이전 절 참조))을 사용하여 순서화된 하위 요소를 고유하게 식별할 수 있습니다. 특히 많은 변경사항이 있을 경우 비교 결과가 개선됩니다.

XML 비교 플러그인은 이미 ANT 파일용 ID 맵핑 체계와 함께 제공되어 있으므로, 특정 ANT 파일에 맞게 사용자 정의할 수 있습니다.