2013-01-10 3 views
2

Java에서 진화하는 XML 스키마를 처리하는 방법은 무엇입니까? 자바 애플리케이션에서 오래된 XML 스키마 (예 : Foo v1, v2, v3, v4, v5 지원)를 지원해야하는 유스 케이스가 있습니다. 푸 XML 스키마 의 다른 버전에 대해 기록 된 모든 푸 XML 내용 읽기 - -Java에서 진화하는 XML 스키마를 처리하는 방법

내 사용 사례 포함 OVAL XML 스키마의 다른 버전을 사용에 대해 서로 다른 기록 될 수있는 통합 푸 XML 컨텐츠를 (즉 푸 (V1)을 병합 Foo v5와 함께).

Foo XML 스키마는 상당히 복잡하며 이전 버전과의 호환성 문제가 있으므로 Foo v1 XML 콘텐츠가 Foo v3 XML 스키마를 사용하여 XML 스키마 유효성 검사를 실패 할 수 있습니다.

나는 2 가지 접근법을 생각했다. 1) JAXB와 같은 Java XML 데이터 바인딩을 사용하고 XML 스키마의 각 버전에 대한 바인딩 집합을 생성한다. 예를 들어 Foo XML 스키마를 사용하면 Foo XML 스키마 v1에서 v5에 5 세트의 바인딩을 생성합니다. 문제는 Foo XML 컨텐트 버전을 다른 XML 컨텐트 버전과 병합하는 방법입니다.

2) Java 데이터 모델 한 세트를 만들고 SAX, DOM, JDOM을 사용하여 수동으로 구문 분석하고 이전 버전과의 호환성 문제를 모두 해결하십시오. 도전 과제는 이제 JAXB의 도움없이 XML을 직접 파싱해야합니다.

진화하는 XML 스키마를 처리하는 가장 좋은 방법에 대해 조언을 듣고 싶습니다. Java XML 데이터가 올바른 경로로 전달되는지 또는 자체 Java 데이터 모델을 생성하고 수동으로 구문 분석합니까?

+0

'XSLT '가 여기서 작동하는지 알고 싶지 않습니다. 그렇지 않다면, 아마도 여러 가지 바인딩 세트를 사용하여 접근법을 조합 한 다음 자신이 직접 작성하는 하나의 추가 공통 세트를 사용하게 될 것입니다. xml 데이터를 사용할 때마다 공통 세트로 이동합니다. – atomman

+0

BTW Java는 (는) 단어입니다. –

답변

3

내 경험상 가장 중요한 것은 데이터 모델이고 입력 형식이 아닙니다. 깨끗한 모델을 제공하고 다양한 입력의 모든 불필요한 부분을 추상화 할 수 있다면 훨씬 깨끗하고 관리하기 쉬운 코드 라인이 완성 될 것입니다.

단일 문서의 버전이 증가하는 경향이있는 경우 파서를 직접 작성하는 경우 상당한 양의 코드 재사용이 가능하거나 다른 클래스와 페어링 된 각 형식을 처리하기 위해 병렬 JAXB 패키지를 만들 수 있습니다 해당 버전 특정 모델을 최상위 모델로 변환하십시오.

+0

의견에 감사드립니다.특히 최상위 모델을 만들 것을 권장하는 부분에서는 JAXB를 사용하여 스키마의 각 버전에 대한 바인딩을 생성 한 다음 JAXB 모델 데이터를 최상위 데이터 모델로 변환하는 변환기를 만듭니다. 나는 그것을 고려할 것이다. 다시 한번 감사드립니다. – beyonddc

1

새로운 버전마다 Java 변환기가 있습니다. 그들은 각각의 이전 버전에서 변환 할 수 있습니다. v1을 XML로 변환하고 JAXB를 사용하여 Java로 변환 한 다음 데이터 모델 v2, v3, v4, v5로 변환합니다. 변환기는 릴리스 된 모든 아티팩트의 일부인 버전 제어하에 있습니다.

또한 우리는 v2-1, v2-2와 같은 분기를 지원합니다. 이를 위해서는 분기 n에서 다음 n + 1 (예 : v2-2 -> v3)까지의 변환기가 있어야합니다. 특정 간격으로 "매우 오래된"지점에 대한 지원을 중단합니다.

+0

귀하의 의견에 감사드립니다. – beyonddc

1

스키마 진화는 데이터 바인딩 방식의 큰 단점입니다. 스키마가 안정적이지 않으면 데이터 바인딩은 사용자가 발견 한 것처럼 번거롭 게됩니다. 여기에는 기본적인 충돌이 있습니다. XML은 처리하는 데이터 구조에서 유연하게 ("반 구조화") 설계되었으며 Java는 그렇지 않습니다. 데이터 바인딩이 올바른 접근 방식이라고 확신합니까? XSLT 또는 XQuery와 같이 XML 용으로 설계된 프로그래밍 언어를 사용하는 것이 좋지 않을까요?

+0

제안에 개방적이지만 내 요구 사항 중 하나는 XML의 내용을 수정할 수 있어야하므로 전체 XML 컨텐츠를 일종의 모델에로드해야 요소 또는 속성을 XML에 삽입 할 수 있다는 것입니다. . 내 데이터 모델을 만든 다음 수동으로 XML을 구문 분석하거나 데이터 바인딩 방식을 사용하는 것으로 생각할 수 있습니다. – beyonddc

+0

XSLT 또는 XQuery를 사용해야한다고 생각합니다. 아마도 XQuery 업데이트와 함께 사용하는 것이 좋습니다. –

관련 문제