문제

내가 있는 응용 프로그램을 저장한 문서(생각한 단어 문서)를 Xml 기반 형식으로-현재 C#클래스에서 생성되는 xsd 파일은 사용되는 읽기/쓰기 문서 형식만 최근까지 했을 때 변화를 만들의 형식 문서입니다.나의 관심사는 거꾸로 호환성으로 향후 버전의 내 응용 프로그램 를 읽을 수 있도록 문서를 저장하여 모든 이전 버전과 이상적인 나는 또 이전 버전의 내 응용 프로그램을 할 수 있을 처리하기 위해 독서 문서를 저장하여 향후 버전을 표시합니다.

예를 들어,내가 변경 스키마의 문서를 추가하(선택사항)추가 요소이 어딘가에,다음 더 오래된 버전의 애플리케이션이 단순히 무시하는 추가 elemnt 과 아무런 문제가 없을 것입니다:

<doc>
    <!-- Existing document -->
    <myElement>Hello World!</myElement>
</doc>

그러나는 경우를 깨는 변경(속성으로 바뀌는 요소 예를 들어,다음의 요소),그 이전 버전의 내용해야 하나 이 요소를 무시하는 경우 그것은 선택사항 또는 사용자에게 알려 그들을 읽으려고 시도하는 문서를 저장 새로운 버전의 내 응용 프로그램지 않습니다.또한 이것은 현재 일으키는 두통으로 모든 미래전 버전의 내 응용 프로그램이 필요 완전히 분리된 코드를 읽는 데 필요한 두 개의 서로 다른 문서입니다.

예를 들어,이러한 변경은 다음과 같습니다 xml:

<doc>
    <!-- Existing document -->
    <someElement contents="12" />
</doc>

변경:

<doc>
    <!-- Existing document -->
    <someElement>
        <contents>12</contents>
        <contents>13</contents>
    </someElement>
</doc>

을 방지하기 위해서는 두통 지원이 미래에 나오고 싶어와 함께 전략에 대한 변경 사항을 처리가 만들이 미래는 버전의 내 응용 프로그램 릴리스 지금은 수있을거야 이러한 변화에 대응하기 위해서 미래:

  • 해야"버전 번호의"문서에 저장할 문서 자체,그리고 만약 그렇다면 무엇 버전 관리 전략을 사용되어야 하는가?어야 문서 버전에 맞.exe 어셈블리 버전에,또는 더 복잡한 전략을 사용할(예를 들어 주요 개정 변경을 나타내 주요 변경 내용 wheras 부 개정 단위로 표시하지 않는 변화-예를 들어 추가 선택적 요소)
  • 어떤 방법을 사용해야 하는 문서를 읽을 자체를 피하려면 어떻게 해야 하 복제 막대한 양의 코드의 다른 버전에 대한 문서입니까?
    • 지만 XPath 은 분명히 대부분의 유연한,그것은 더 많은 작업을 구현하는 것보다 단순히 클래스를 생성하기로 xsd.
    • 다른 한편으로는 경우 DOM 분석이 사용되는 새로운 문서의 사본 xsd 것에 필요한 소스로 제어 각 주요 변경 문제를 일으키는 경우 수정이 이제까지 적용해야 합는 이전 스키마(오래된 버전의 앱에서는 여전히 지원).

또한,나는 일이 모든 매우 loosly 가정에는 모든 변경 사항으로 분할할 수 있습니다 이 두 가지 종류의"내요 변경 사항"과"하지 않는 변경",그러나 나는지 확신하지 못하는 안전한 가정을 만들.

참고 사용하는 용어"문서"는 매우 느슨하게 내용을달을 닮은 모든 문서!

감사에 대한 조언을 제공할 수 있다.

도움이 되었습니까?

해결책

당신은 확실히 필요에 버전 번호를 XML 파일을 것이 좋지 않을 묶는 그것을 응용 프로그램의 버전하기 때문에 그것은 정말니다.할 수 있습을 통해 두 개 또는 세 가지 버전의 앱없이 변화하는 XML 형식으로 또는 당신은 수 있습니다 바람을 변화 형식으로 여러 시간 동안의 개발 단일 릴리스입니다.

당신이 원하는 경우 이전 버전의 응용 프로그램을 읽을 수 있는 최신 버전의 XML 파일을 다음할 수 있습지,지금까지 요소를 제거하거나 자신의 이름을 변경.당신은 항상 추가 요소 및 오래된 코드를 행복하게 그들을 무시(하나의 좋은 기능을 XML)지만 제거하면 그들은 기존의 코드 없는 작동할 수 있습니다.

이스마엘처럼 말했다,XSLT 은 변환하는 좋은 방법이 XML 형식에서 하나의 버전을 다른 버전지 않도록 당신은 바람으로 온-더 구문 분석하는 루틴에서의 소스 코드입니다.

다른 팁

XSLT 분명한 선택을 여기에.주어진 식별할 수 있는 버젼 문서의 각 버전의 사용자 스키마,creat XSLT 변환하는 이전 버전의 새로운 버전입니다.

에 적용할 수 있습니다 에서 변환 시퀀스에 도달할 때까지는 현재 버전입니다.따라서 당신은 이제까지 편집 문서 최신 버전입니다.물론 당신은 할 수 없습니다 저장전과 함께 사용할 수 있습니 break 문서에 대한 이전 버전은,그러나 이것은 전형적인 여러 애플리케이션에 적합합니다.절대적으로 필요한 경우에 저장하는 오래된 버전성을 변환하는 다른 방법이다.

다음과 같@앤디는 말을 사용하는 주요 수를 구축합니다.

가할 수 있는 특성을 뿌리 요소를 지정하는 버전입니까?

는 방법 이전 버전은 늘 깨고 새로운 버전의 소프트웨어 볼 것이 특성 및 스위치를 다른 로딩 방법입니다.

버전 번호 매기기 자체에 따라 달라하의 주파수를 놓습니다.나 개인적으로 이동으로 주요 구축 번호에서 소프트웨어,지 않는 한 당신이 예견의 형식을 변경하는 것보다 더 자주니다.

편집:목에 대한 비트 코드를 복제:

내가 사용하는 것이 공장 패턴,무언가 이것을 좋아한다:

LoadDocument
DoNonVersionDependingLoading
VersionSpecificLoaderFactory(VersionNumber)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top