9.메타데이터 패키지
📌 GeoAPI의 메타데이터 패키지 개요
GeoAPI의 메타데이터 패키지는 org.opengis.metadata 네임스페이스를 사용하여
ISO 19115:2003 (Geographic Information – Metadata) 및
**ISO 19115-2:2007 (Extensions for imagery and gridded data)**의 내용을 구현
📌 기반 표준 및 수정 사항
✔ ISO 19115:2003 → 원본 표준
✔ Technical Corrigendum 1 (2006년 개정판) → 표준 보완
✔ ISO 19115-2:2007 → 이미지 및 격자 데이터 확장
1. 메타데이터 패키지의 역할
📌 주요 기능
✔ 데이터 세트 또는 구성 요소에 대한 설명 요소를 담는 컨테이너 역할
✔ 대부분 문자열(String) 또는 문자열 컨테이너를 다루는 메서드로 구성
✔ 데이터 구조를 조작(변경)하는 기능은 포함하지 않음
📌 활용 예시
✔ 지리 참조(geodetic referencing) 시스템과 연계하여 주로 읽기(read) 전용으로 사용됨
2. 메타데이터 수정 제한 사항
📌 읽기 전용(Read-Only) 제한
✔ GeoAPI 메타데이터 인터페이스는 기본적으로 값 설정(set)을 지원하지 않음
✔ Java Generics에서 와일드카드(? extends Type)를 사용하여 컬렉션을 읽기 전용으로 제한
📌 수정이 필요한 경우
✔ 구현체에서 GeoAPI 인터페이스를 확장하여 변경 가능
✔ 그러나, 사용자가 GeoAPI 인터페이스를 직접 수정하려면 구현 클래스로 캐스팅 필요
3. 메서드 반환값 규칙 변경
📌 GeoAPI의 일반적인 규칙
✔ 필수(mandatory) 의무가 있는 메서드는 null을 반환할 수 없음
✔ 항상 반환 타입의 인스턴스를 반환해야 함
📌 메타데이터 패키지에서의 예외 사항
✔ 메타데이터에서는 해당 규칙을 완화하여 모든 메서드를 선택적(optional) 의무 수준으로 간주
✔ 즉, 필수 속성이더라도 다음과 같은 방식으로 반환 가능
- 값이 있으면 해당 객체 반환
- 값이 없으면
null반환 가능 - 컬렉션 타입이면 빈 컬렉션(empty collection) 반환 가능
📌 이유
✔ 현실적으로 많은 데이터 세트가 ISO 19115 명세를 정확히 준수하지 않음
✔ 유연한 데이터 처리를 지원하기 위해 해당 변경 사항을 채택
📌 규격 준수 여부 확인 방법
✔ 고급 구현체는 런타임에서 어노테이션을 검사하여 메타데이터가 규격을 준수하는지 판단 가능
📌 결론
✔ GeoAPI 메타데이터 패키지는 ISO 19115 표준을 기반으로 하지만 일부 수정 사항을 적용
✔ 데이터 변경 기능을 제공하지 않으며, 기본적으로 읽기 전용
✔ 데이터가 표준을 완전히 준수하지 않아도 유연하게 처리할 수 있도록 null 및 빈 컬렉션 반환을 허용
✔ 구현체는 필요에 따라 수정 가능하지만, 사용자 코드에서는 직접 인터페이스를 변경할 수 없음
9.1 패키지 매핑 (Package Mapping)
📌 ISO 19115 패키지와 GeoAPI 패키지 매핑
ISO 19115 패키지와 GeoAPI 패키지는 거의 동일한 명명 규칙을 따름.
일부 소규모 패키지는 상위 수준 패키지로 통합되었으며,
데이터 품질 관련 패키지는 DQ_* 타입과 LI_* 타입을 분리하여 두 개의 패키지로 구성됨.
또한, 참조 시스템 정보(Reference system information)는 GeoAPI의 referencing 패키지로 대체됨.
ISO 19115 패키지와 GeoAPI 패키지 매핑 표
| ISO 19115 Package | GeoAPI Package |
|---|---|
| Metadata entity set information | org.opengis.metadata |
| Identification information | org.opengis.metadata.identification |
| Constraint information | org.opengis.metadata.constraint |
| Data quality information | org.opengis.metadata.quality |
org.opengis.metadata.lineage | |
| Maintenance information | org.opengis.metadata.maintenance |
| Spatial representation information | org.opengis.metadata.spatial |
| Reference system information | org.opengis.referencing.* |
org.opengis.parameter (see below) | |
| Content information | org.opengis.metadata.content |
| Portrayal catalogue reference | org.opengis.metadata |
| Distribution information | org.opengis.metadata.distribution |
| Metadata extension information | org.opengis.metadata |
| Application schema information | org.opengis.metadata |
| Extent information | org.opengis.metadata.extent |
| Citation and responsible party information | org.opengis.metadata.citation |
📌 추가 설명
✔ 데이터 품질 정보(Data quality information)
DQ_*타입과LI_*타입을 분리하여 각각quality및lineage패키지에서 관리
✔ 참조 시스템 정보(Reference system information)
org.opengis.referencing.*및org.opengis.parameter패키지로 대체됨
9.2 GeoAPI 메타데이터 패키지 사용법 (Use of the GeoAPI Metadata Packages)
📌 GeoAPI 메타데이터 패키지의 역할
✔ GeoAPI 메타데이터 패키지는 주로 문자열(String), 기본 타입(primitive types), 기타 메타데이터 타입을 포함하는 컨테이너 역할
✔ 데이터를 읽기 전용(read-only)으로 접근할 수 있도록 설계됨
✔ 참조 시스템(referencing) 패키지에서 제공하는 데이터 타입에서 메타데이터 요소를 가져올 수 있음
1. 메타데이터 요소 접근 예제
📌 시나리오
✔ org.opengis.metadata.citation.Citation 요소에서 문서의 모든 저자(author) 목록을 출력
📌 코드 예제
Citation citation = ...; // 이미 사용 가능한 Citation 인스턴스가 있다고 가정
for (ResponsibleParty rp : citation.getCitedResponsibleParties()) {
if (rp.getRole() == Role.AUTHOR) {
String author = rp.getIndividualName();
System.out.println(author);
}
} 📌 설명
✔ citation.getCitedResponsibleParties()를 호출하여 관련된 모든 담당자(ResponsibleParty) 가져오기
✔ 각 ResponsibleParty 객체에서 역할(Role)을 확인하고, AUTHOR인 경우 이름을 출력
2. 기타 메타데이터 패키지의 활용 방식
📌 기본 원칙
✔ GeoAPI의 메타데이터 인터페이스는 위 예제와 유사한 방식으로 작동
✔ 클라이언트 코드가 개별 메타데이터 요소를 가져오기 위해 객체를 분해(disaggregate)하는 방식으로 활용
📌 결론
✔ GeoAPI 메타데이터 패키지는 데이터 요소를 저장하고 읽어오는 기능을 제공하지만 직접 수정할 수 없음
✔ 메타데이터 정보를 읽어오는 방식은 위 예제처럼 특정 메서드를 사용하여 개별 요소를 추출하는 방식으로 진행
9.3 표준과의 차이점 (Departures from Standard)
📌 GeoAPI 메타데이터 패키지의 주요 변경 사항
✔ ISO 19115의 MD_CRS 타입을 ISO 19111의 타입으로 대체
✔ ISO 19111의 참조 시스템(Referencing System) 타입은 보다 풍부하고 완전한 의미를 제공
✔ 일부 ISO 19115 클래스를 GeoAPI에서 직접 구현하지 않고, 참조 패키지에서 적절한 대체 클래스를 제공
Table 8: Mapping of types from the reference system information package
| ISO 19115 Type | GeoAPI Replacement |
|---|---|
| MD_ReferenceSystem | org.opengis.referencing.ReferenceSystem |
| MD_CRS | org.opengis.referencing.crs.CoordinateReferenceSystem |
| MD_EllipsoidParameters | org.opengis.referencing.datum.Ellipsoid |
| MD_ProjectionParameters | org.opengis.parameter.ParameterValueGroup |
| MD_ObliqueLineAzimuth | org.opengis.parameter.ParameterValue |
| MD_ObliqueLinePoint | org.opengis.parameter.ParameterValue |
📌 GeoAPI의 파라미터(parameter) 패키지와 ISO 19111의 차이점
✔ ISO 19115에서는 특정 명명된 데이터 타입을 정의
✔ GeoAPI는 ISO 19111을 따라 보다 일반적인 방식으로 참조 시스템을 처리
✔ 즉, 개별 데이터 타입이 아닌, 지도(Map) 같은 구조로 참조 요소를 관리
📌 ISO 19115-2의 확장 요소 통합 방식 변경
✔ ISO 19115-2 (이미지 및 격자 데이터 확장)에서는 새로운 타입을 생성하여 기존 요소를 보완
✔ GeoAPI는 이러한 요소들을 별도의 새로운 타입으로 만들지 않고, 기존 타입에 직접 통합
✔ 이러한 방식은 API의 복잡성을 줄이고, 기존 모델과 자연스럽게 통합될 수 있도록 하기 위함
📌 결론
✔ GeoAPI는 ISO 19115보다 ISO 19111을 따르는 방향으로 참조 시스템을 처리
✔ ISO 19115-2의 일부 요소들은 별도 클래스를 만들지 않고 기존 클래스에 통합
✔ API의 구조를 간결하게 유지하면서도, 보다 유연하고 강력한 참조 시스템 구현 가능
9.4 향후 작업 (Future Work)
📌 GeoAPI 메타데이터 패키지의 향후 계획
✔ 향후 개정에서 팩토리(factory) 인터페이스 추가 가능성
✔ 이를 통해 현재 정의된 메타데이터 타입을 보다 쉽게 인스턴스화할 수 있도록 지원
📌 현재 상태
✔ 팩토리 시스템의 구체적인 설계는 아직 GeoAPI 기여자들 간에 합의되지 않음
✔ 따라서, 향후 개정에서 논의 및 조정될 예정
📌 결론
✔ 향후 GeoAPI 메타데이터 패키지에 팩토리 패턴 적용 가능성 있음
✔ 그러나 현재로서는 이에 대한 명확한 설계 방향이 정해지지 않음
✔ 추후 논의와 표준화 과정을 거쳐 결정될 예정