다음을 통해 공유


메타데이터 쿼리 언어 개요

이 항목에서는 WIC(Windows 이미징 구성 요소)에 대한 메타데이터 쿼리 언어를 소개합니다. 메타데이터 쿼리 언어를 사용하여 이미지의 메타데이터 내에서 특정 데이터(메타데이터 항목) 및 위치(메타데이터 블록)를 찾는 식을 만듭니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

필수 조건

이 항목을 이해하려면 WIC 메타데이터 개요 및 액세스 메타데이터에 설명된 대로 이미지 메타데이터 읽기 및 쓰기 개요에 설명된 대로 WIC 메타데이터 시스템에 대해 잘 알고 있어야 합니다.

소개

메타데이터 플랫폼은 주로 두 개의 COM(구성 요소 개체 모델) 구성 요소인 IWICMetadataQueryReader 인터페이스로 표현되는 쿼리 판독기 및 IWICMetadataQueryWriter 인터페이스로 표현되는 쿼리 작성기를 통해 상호 작용합니다. 이러한 구성 요소를 사용하면 메타데이터 쿼리 언어를 사용하여 메타데이터를 읽거나 쓸 수 있습니다. 쿼리 언어는 경로 식의 구문을 설명하고 쿼리 구성 요소는 이 경로 식을 사용하여 원하는 메타데이터에 액세스합니다. 이 경로 식은 메타데이터 블록 또는 항목의 위치를 설명합니다.

메타데이터 블록은 특정 형식의 명명된 메타데이터 그룹입니다. 메타데이터 블록에는 작성자 또는 생성 시간 및 추가 메타데이터 블록과 같은 개별 메타데이터 항목이 포함될 수 있습니다. 메타데이터 블록의 이름은 형식에 따라 결정됩니다. 예를 들어 App1 메타데이터를 포함하는 메타데이터 블록의 이름은 "app1"입니다. 일반적인 메타데이터 형식에는 App1, Exif, IFD 및 XMP가 포함됩니다.

메타데이터 항목은 작성자, 제목 및 등급과 같은 특성을 설명하는 이름/값 쌍입니다.

경로 식에는 하나 이상의 메타데이터 블록 이름이 포함됩니다. 메타데이터 블록 내에서 메타데이터 항목을 지정할 수도 있습니다. 다음 경로 식은 메타데이터 항목을 포함하는 IFD 블록을 포함하는 App1 블록을 나타냅니다.

  • /app1/ifd/{ushort=18249}

다음 다이어그램에서는 네 개의 루트 메타데이터 블록인 App0, App1, XMP 및 알 수 없는 블록이 있는 예제 JPEG 이미지의 구성을 보여 줍니다. 강조 표시된 각 항목은 메타데이터 유형(블록 또는 항목)과 데이터를 검색하는 데 사용되는 쿼리 식을 적어 줍니다.

jpeg image with metadata callouts

참고 항목

이 다이어그램의 내용은 이 문서 전체에서 참조되며 많은 예제에서 사용됩니다.

 

경로 식 분석

WIC API를 사용하여 메타데이터에 액세스하려면 대부분의 경우 정규화된 쿼리 식을 사용해야 합니다. 이 항목에서는 메타데이터에 액세스하기 위한 정규화된 식에 대해 설명합니다. 정규화되지 않은 식이 사용되는 경우에 대한 정보가 필요한 경우 이 문서의 뒷부분에 있는 사진 메타데이터 정책 식 섹션을 참조하세요.

정규화된 쿼리 식이란? WIC에서 정규화된 식은 경로 문자 슬래시(/)로 시작하고 메타데이터 블록 또는 특정 메타데이터 항목에 대한 탐색 경로로 시작하는 문자열입니다. 탐색 경로 내의 각 단계는 슬래시로 구분되어 메타데이터 블록 또는 메타데이터 항목에 액세스하기 위한 식을 형성합니다. 예를 들어 다음은 App1 블록에 중첩된 IFD 블록의 Microsoft 사진 등급에 액세스하는 정규화된 쿼리 식입니다.

  • /app1/ifd/{ushort=18249}

WIC는 이 식을 구문 분석할 때 먼저 이미지의 메타데이터 내에서 App1 메타데이터 블록을 검색합니다. App1 블록이 발견되면 중첩된 IFD 메타데이터 블록을 찾는 검색을 계속합니다. IFD 블록이 발견되면 IFD 메타데이터 블록 내에서 특정 메타데이터 항목(이 경우 태그 18249 아래의 MicrosoftPhoto 등급)을 찾습니다. WIC에서 메타데이터 블록이나 항목을 찾지 못하면 쿼리가 중단됩니다.

블록 선택

가장 간단한 WIC 메타데이터 쿼리 식은 특정 메타데이터 블록에 대한 쿼리 판독기/기록기를 가져오는 식입니다. 쿼리 판독기/기록기를 가져오면 부모 블록을 처리하지 않고도 후속 쿼리를 중첩된 메타데이터 블록으로 직접 보낼 수 있습니다. 블록 선택 쿼리 식은 원하는 메타데이터 블록에 대한 탐색 경로입니다. 예를 들어 이전 그림에는 5개의 메타데이터 블록이 있으며, 그 중 2개는 다른 메타데이터 블록에 중첩되어 있습니다. 다음은 JPEG 예제의 각 메타데이터 블록에 대한 경로 식입니다.

  • /app0
  • /app1
  • /app1/ifd
  • /app1/ifd/exif
  • /Xmp

쿼리 판독기/기록기를 사용하여 쿼리를 실행하는 경우 지정된 메타데이터 블록 범위 내에서 쿼리를 서비스하는 새 쿼리 판독기/기록기를 반환합니다. 예를 들어 쿼리 "/app1"을 실행하는 경우 새 쿼리 판독기를 가져오고 새 판독기 쿼리는 App1 블록을 기준으로 합니다. 즉, App1 블록에 IFD 블록이 포함되어 있으므로 쿼리 "/ifd"가 새 판독기에 유효합니다. 그러나 이 App1 블록에 XMP 메타데이터 블록이 없기 때문에 "/xmp"는 작동하지 않습니다.

쿼리 언어는 인덱스 표기법도 지원합니다. 인덱스 표기법은 동일한 형식의 여러 블록이 있는 경우 특정 메타데이터 블록에 대한 액세스를 제공합니다. JPEG 예제의 경우 다음 인덱싱된 경로 식을 사용할 수 있습니다.

  • /[0]app1/[0]ifd

쿼리 언어에서 모든 인덱스는 0부터 시작합니다. 이전 식에서 첫 번째 App1 블록에 대한 첫 번째 0 쿼리와 두 번째 0은 첫 번째 중첩된 IFD 블록을 쿼리합니다. 동일한 형식의 여러 블록이 없는 경우에도 인덱스 표기법을 계속 사용할 수 있습니다. 예제 JPEG에 포함된 IFD 블록이 있는 두 번째 App1 블록이 포함된 경우 두 번째 App1 블록에 액세스하는 데 "/[1]app1/ifd" 식이 사용됩니다.

PNG 이미지에 둘 이상의 tEXt 청크가 있을 가능성이 높기 때문에 PNG tEXt 청크를 처리할 때 인덱스 표기법이 더 일반적입니다.

참고 항목

다차원 배열 인덱스는 지원되지 않습니다.

 

항목 선택

블록 선택 식을 작성하여 메타데이터 블록의 메타데이터 항목에 액세스할 수 있습니다. JPEG 예제에서 XMP 및 Microsoft 사진 등급 속성을 고려합니다. 이 메타데이터는 App1/IFD 및 XMP 블록이라는 두 개의 메타데이터 블록에 있습니다. 따라서 둘 이상의 식을 사용하여 동일한 데이터에 액세스할 수 있습니다. 다음 식은 XMP 블록의 MicrosoftPhoto 등급에 액세스합니다.

  • /xmp/xmp:Rating

식의 "xmp:" 부분은 스키마 식별자입니다. XMP는 확장 가능한 표준이며 타사 엔터티가 특정 메타데이터 항목을 저장하는 방법을 정의하는 자체 스키마를 게시할 수 있도록 합니다. XMP 스키마는 URL로 완전히 식별되지만 WIC는 잘 알려진 스키마에 대한 식별자 집합을 제공합니다. 자세한 내용은 네이 티브 이미지 형식 메타데이터 쿼리 항목을 참조하세요 .

JPEG 이미지의 경우 평가 정보를 App1 중첩 IFD 블록 내에 저장할 수도 있습니다. 그러나 XMP 등급 예제와 달리 IFD 블록은 스키마 이름을 사용하여 등급 정보에 액세스하지 않습니다. 대신 데이터 식을 사용합니다. 다음 식은 App1 중첩 IFD 블록의 MicrosoftPhoto 등급에 액세스하는 데 사용됩니다.

  • /app1/ifd/{ushort=18249}

이 식에서 식의 "/app1/ifd" 부분은 IFD 블록에 대한 탐색 경로입니다(이전에 블록 선택 섹션에서 설명한 대로). "/{ushort=18249}" 식의 두 번째 부분이 데이터에 액세스합니다. 식의 이 부분은 쿼리 파서에 태그 식별자 18249가 있는 서명되지 않은 짧은 태그에 포함된 데이터를 찾도록 지시합니다.

참고 항목

각 이미지 형식에서 지원하는 일반적인 메타데이터 형식 목록은 네이 티브 이미지 형식 메타데이터 쿼리 항목을 참조하세요 .

 

{ushort=18249}은(는) 데이터 식이며 여러 가지 형식을 사용할 수 있습니다. 데이터 식은 요청된 메타데이터 태그 또는 키(이 경우 "18249")와 키의 데이터 형식(이 경우 "ushort")을 포함하는 두 부분으로 구성된 식입니다. 두 부분은 등호(=)로 구분됩니다. WICsupports는 일반적인 C/C++ 데이터 형식의 대부분을 차지합니다. 다음 데이터 형식은 쿼리 언어에서 허용됩니다.

  • char
  • uchar
  • short
  • ushort
  • long
  • ulong
  • int
  • uint
  • longlong
  • float
  • double
  • str
  • wstr
  • guid
  • 부울

참고 항목

이 목록은 메타데이터 쿼리 언어에서 지원하는 데이터 형식만 지정합니다. {ushort=18249}와 같은 메타데이터 쿼리 데이터 식을 만들 때 이러한 데이터 형식을 사용합니다. WIC는 메타데이터 항목의 값을 고유한 형식 시스템을 정의하는 PROPVARIANT 형식으로 반환합니다.

 

예제의 "18249"는 데이터 태그입니다. 이 특정 숫자는 MicrosoftPhoto 등급을 포함하도록 Microsoft에서 정의합니다. 데이터 태그는 원하는 데이터 항목에 따라 임의의 숫자, 문자열 또는 GUID일 수 있습니다.

XMP 등급 예제와 달리 App1/IFD 블록에는 등급 값에 대한 이름 충돌이 없습니다. 이는 XMP 등급 값이 실제로 다른 ushort 태그(18246)에 저장되었기 때문입니다. 따라서 App1/IFD 블록에서 XMP 등급에 액세스하는 식은 다음과 같습니다.

  • /app1/ifd/{ushort=18246}

참고 항목

메타데이터 쿼리 언어에 대한 공식적인 설명은 이 문서의 뒷부분에 있는 메타데이터 쿼리 언어 요약 섹션을 참조하세요.

 

이스케이프 문자

쿼리 언어는 대/소문자를 구분하지 않으며 모든 문자를 소문자로 처리합니다. 그러나 일부 메타데이터 형식(예: XMP)은 대/소문자를 구분합니다. 대/소문자를 구분하는 메타데이터 형식으로 작업할 때 대문자를 지정하려면 백슬래시(\) 문자를 사용합니다.

이스케이프 문자는 언어 파서에서 사용되며 그 뒤에 있는 다음 문자는 직접 해석됩니다. 예를 들어 {char=\\} 식은 '\'로 확인되고 {char=\C}는 대문자 C로 확인됩니다. 이스케이프 문자가 없으면 {char=\}는 잘못된 식이 되고 {char=C}는 소문자 c로 해석됩니다. 대/소문자를 구분하는 메타데이터 형식의 모든 대문자 앞에 백슬래시 이스케이프 문자를 사용해야 합니다.

샘플 식

다음 표에서는 쿼리 언어 파서의 해석에 대한 몇 가지 예제 식과 설명을 제공합니다.

설명
ifd/xmp/exif:Author "Exif" 스키마의 IFD 블록 -> XMP 블록 -> "Author" 속성의 탐색 경로에 해당합니다.
/[1]ifd/[0]xmp/exif:Author [#] 접두사에서 이름이 충돌할 경우 탐색할 항목을 설명한다는 점을 제외하고 이 테이블의 첫 번째 항목과 동일합니다.
/ifd/{ushort=700}/Author 데이터 식을 사용하여 블록 이름 "xmp" 대신 XMP 블록을 참조한다는 점을 제외하고 이 테이블의 첫 번째 항목과 동일합니다(XMP 블록은 서명되지 않은 짧은 태그 식별자 700 아래에 포함됨). 또한 "Author" 속성은 스키마를 지정하지 않습니다. 쿼리 파서는 모든 스키마에서 속성을 일치시키고 첫 번째 일치 항목을 반환합니다.
/ifd/xmp 메타데이터 블록에 대한 탐색 경로를 제공합니다. 블록을 찾은 경우 새 메타데이터 판독기/기록기가 반환됩니다.
/[*]tEXt/Keyword PNG 청크의 Keyword 속성을 가져오거나 설정합니다. PNG 메타데이터 사양은 특정 형식의 여러 청크를 허용하므로 [*] 표기법은 적절한 속성으로 데이터 PNG 청크를 가져오거나 설정합니다. PNG 사양에 따라 두 청크가 동일한 속성을 가질 수 없습니다.

 

또한 각 메타데이터 블록은 친숙한 블록 이름 대신 사용할 수 있는 메타데이터 GUID로 고유하게 식별됩니다. 블록 이름을 제공하는 대신 다음 구문을 사용할 수 있습니다. "/{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier"

다음 표에서는 몇 가지 잘못된 예제와 거부 이유를 제공합니다.

잘못된 식 거부 설명
/ifd/[0][2]exif/ 다차원 배열 인덱스가 지원되지 않으므로 거부되었습니다.
/ifd/{ushort=1}/{ushort=2} IFD에 tagID=2가 있는 메타데이터 항목이 포함된 메타데이터 처리기인 tagID=1이 없는 한 거부되었습니다.
/{ushort=1} 쿼리 처리가 메타데이터 계층 구조의 최상위 수준에 상대적인 경우 거부되었습니다. 최상위 수준에는 데이터 항목이 아닌 메타데이터 블록만 포함하기 때문입니다.

 

사진 메타데이터 정책 식

앞에서 설명한 것처럼 정규화된 쿼리 식은 슬래시(/)로 시작합니다. 슬래시로 시작하지 않는 식은 정책 식으로 평가됩니다. 정책 식을 사용하면 이미지 관련 Windows 셸 속성에 대한 사진 메타데이터를 쿼리할 수 있습니다. 이 문서의 앞부분에 있는 데이터 선택 섹션에서 "/xmp/xmp:Rating" 식을 사용하여 XMP 등급 속성에 액세스했습니다. 다음 정책 식을 사용하여 이 속성을 쿼리할 수도 있습니다.

  • System.SimpleRating

MicrosoftPhoto 스키마에서 rating 속성에 액세스하려면 다음 쿼리 식을 사용할 수 있습니다.

  • System.Rating

사진 메타데이터 정책 식은 몇 가지 주목할 만한 방법으로 정규화된 메타데이터 쿼리와 다르게 동작합니다.

먼저 정책 식을 사용하여 메타데이터에 액세스할 때 WIC는 여러 메타데이터 블록에서 동일한 속성을 사용할 수 있는 경우 중재 및 충돌 해결을 수행합니다. 예를 들어 MicrosoftPhoto 및 XMP 등급 값은 모두 App1/IFD 블록과 XMP 블록 모두에 저장됩니다. 사진 메타데이터 정책은 메타데이터를 읽을 때 블록 값이 반환되는 우선 순위를 결정합니다. 메타데이터를 작성할 때 사진 메타데이터 정책은 서로 다른 블록의 동일한 속성이 일관되도록 합니다. "/xmp/xmp:Rating"과 같은 메타데이터 쿼리를 사용하는 경우 다양한 메타데이터 위치 간의 중재를 담당합니다.

참고 항목

지원되는 정책 식 및 해당 매핑 정책 목록은 사진 메타데이터 정책 항목을 참조하세요.

 

둘째, 사진 메타데이터 정책 식은 이미지 형식과 독립적이지만 정규화된 메타데이터 쿼리는 그렇지 않습니다. 예를 들어 "/xmp/xmp:Rating" 쿼리는 JPEG 형식과 관련이 있습니다. TIFF 이미지는 XMP 메타데이터도 지원하지만 JPEG에 비해 다르게 저장되므로 TIFF 쿼리는 "/ifd/xmp/xmp:Rating"입니다. 그러나 두 경우 모두 정책 식은 "System.SimpleRating"입니다.

사진 메타데이터 정책 식은 정규화된 메타데이터 쿼리와 비교할 때 더 높은 수준의 추상화 및 단순성을 제공하므로 낮은 수준의 메타데이터 액세스가 필요하지 않은 경우 선호해야 합니다. 그러나 정책 식은 제한된 이미지 메타데이터 집합에 대한 액세스만 제공하는 반면 메타데이터 쿼리 언어는 이미지 파일 내에 저장된 거의 모든 메타데이터에 대한 액세스를 제공합니다.

메타데이터 쿼리 언어 요약

다음 표는 WIC 메타데이터 쿼리 언어의 공식 정의입니다. 각 문법 기호는 다른 기호로 구성된 식을 나타냅니다. 식은 "or" 선택을 나타내는 다른 기호 또는 세로 막대(|)로 구분된 다른 기호의 시퀀스일 수 있습니다. 오른쪽의 전체 식은 왼쪽에 지정된 기호를 대체할 수 있습니다.

기호
<path> <name> | '/' <속성 경로>
<속성 경로> <메타데이터 항목> | <속성 경로> '/' <속성 경로>
<메타데이터 항목> <인덱스 이름> | <항목 이름> | <스키마 이름> ':' <항목 이름>
<스키마 이름> <항목 이름>
<항목 이름> <메타데이터 항목> | <인덱싱된 항목><인덱스>
<인덱싱된 항목> <item> | <암시적 메타데이터><항목>
<암시적 메타데이터> '<'name>'><'
<항목> <name> | < 인덱스><데이터> | <데이터>
<data> '{' <데이터 형식> '=' <값> '}'
< 인덱스> '[' <number> | <star> ']'
<데이터 형식> 'char' | 'uchar' | 'short' | 'ushort' | 'long' | 'ulong' | 'int' | 'uint' | 'longlong' | 'ulonglong' | 'float' | 'double' | 'str' | 'wstr' | 'guid' | 'bool'
<데이터 값> <number> | <name> | <Guid>
<스타> '*'
<number> 번호
<이름> string
<guid> guid

 

개념

Windows 이미징 구성 요소 개요

WIC 메타데이터 개요

이미지 메타데이터 읽기 및 쓰기 개요

메타데이터 확장성 개요

방법: 메타데이터를 사용하여 JPEG 이미지 다시 인코딩