Xmlベースの形式でドキュメント(Wordドキュメントを考える)を保存するアプリケーションがあります-現在、xsdファイルから生成されたC#クラスは、ドキュメント形式の読み取り/書き込みに使用されており、最近まで形式を変更する必要がありました。ドキュメント。アプリケーションの将来のバージョンは、以前のすべてのバージョンで保存されたドキュメントを読み取ることができる必要があり、理想的には、アプリの古いバージョンでも、アプリの将来のバージョンによって保存されたドキュメントの読み取りを適切に処理できるようにする必要があるため、私の懸念は下位互換 性です。
たとえば、ドキュメントのスキーマを変更して (オプションの) 余分な要素をどこかに追加すると、古いバージョンのアプリケーションは余分な要素を単純に無視し、問題は発生しません。
<doc>
<!-- Existing document -->
<myElement>Hello World!</myElement>
</doc>
ただし、重大な変更が行われた場合 (たとえば、属性が要素または要素のコレクションに変更された場合)、アプリの過去のバージョンでは、オプションの場合はこの要素を無視するか、ユーザーにしようとしていることを通知する必要があります。それ以外の場合は、アプリの新しいバージョンで保存されたドキュメントを読みます。また、これは現在、私のアプリのすべての将来のバージョンで、2 つの異なるドキュメントを読み取るために完全に別のコードが必要になるため、頭痛の種になっています。
このような変更の例は、次の xml です。
<doc>
<!-- Existing document -->
<someElement contents="12" />
</doc>
変更:
<doc>
<!-- Existing document -->
<someElement>
<contents>12</contents>
<contents>13</contents>
</someElement>
</doc>
将来のサポートの問題を回避するために、将来行う可能性のある変更を処理するための適切な戦略を考え出したかったので、現在リリースしているアプリのバージョンがこれらの変更に対処できるようになります将来:
- ドキュメントの「バージョン番号」をドキュメント自体に保存する必要がありますか? もしそうなら、どのバージョン管理戦略を使用する必要がありますか? ドキュメントのバージョンが .exe アセンブリのバージョンと一致する必要があるか、またはより複雑な戦略を使用する必要があります (たとえば、メジャー リビジョンの変更は破壊的変更を示し、マイナー リビジョンの増分は破壊的でない変更を示します。たとえば、追加のオプション要素など)。
- ドキュメント自体を読むにはどのような方法を使用すればよいですか? また、ドキュメントの異なるバージョンで大量のコードを複製しないようにするにはどうすればよいですか?
- XPath が最も柔軟であることは明らかですが、単純に xsd でクラスを生成するよりも、実装に多くの作業が必要です。
- 一方、DOM 解析が使用されている場合、重大な変更ごとにソース管理でドキュメント xsd の新しいコピーが必要になり、古いスキーマに修正を適用する必要がある場合に問題が発生します (アプリの古いバージョンは引き続きサポートされます)。 .
また、私が行うすべての変更は、これらすべての変更が「ビーキング変更」と「非破壊的変更」の 2 つのカテゴリに分割できるという仮定に基づいて、これらすべてを非常に大まかに作業しましたが、これが安全な仮定であると完全に確信しているわけではありません作る。
私が「ドキュメント」という用語を大まかに使用していることに注意してください。内容はドキュメントとはまったく似ていません。
あなたが私に提供できるアドバイスをありがとう。