2

まず、Xml スキーマの仕様では、の解析指定されています。そのような属性が xml ドキュメントに存在しない場合、XSD で解析すると、存在するように見え、そのデフォルト値が設定されます。optional attribute with a default value

次に、一部のツールはこの考え方をシリアライゼーションに適用して、デフォルト値を持つ属性を省略します (つまりan optional attribute with a default value、属性がその値を持つ場合、属性は省略されます)。

ただし、私が知る限り、このシリアル化の動作はXml スキーマで指定されていません。しかし、それは複雑な仕様であり、おそらく私はそれを見逃していました-仕様はのシリアライゼーションを定義していoptional attribute with a default valueますか?


そうでない場合は、事実上の標準になっている可能性があります。多くのツールがこの動作を実装していますか? Microsoft と MarkLogic がそれを行っているのを見てきました。

しかし、JAXB ではありません:


最後に、おそらくここで私は主観性の崖っぷちでよろめきますが、どのような振る舞いをすべきでしょうか?

デフォルト値を持つ属性を省略すると、特にデフォルト値が予想され、一般的である場合は、混乱が軽減されます。たとえばminOccursmaxOccursデフォルト1で XSD 自体を使用する場合 - XSD を処理してから結果をシリアル化すると、すべて<element><sequence>,<choice>などに突然表示されるため、読みにくくなります。

OTOH、オブジェクトとデータ構造では、デフォルト値がある場合、それを見るとそこにあると予想されます。したがって、上記のSOの質問が示すように、デフォルト値を持つ属性が省略されていると驚くかもしれません。

結果をデータと見なすか、データの表現と見なすかによって異なると思います。表現を使用すると、それを変更して読みやすくすると非常に便利です。しかし、データに関しては、それがまさにデータであることを期待します。考え?

4

1 に答える 1

2

最初の質問に対する答えは NO です。これは、XSD 仕様が懸念するものではありません。

第 2 に、この種のことを行うツールキットが非常に多いため、1 人の人間から回答を得るのが難しいということです…「多く」を構成するもの、関連性があると見なされるものなど。

第 3 に…私の仕事では、XSD でデフォルトを使用しないという推奨事項に (以前は) かなり頻繁にぶつかりました。XSD 対応プロセッサの使用を強制するか、消費者アプリケーションで追加のロジック/設定を強制することにより、デフォルトが XML インスタンスの正しい使用を制限するという議論がありました。そして、デフォルトを悪と見なす人々を忘れないようにしましょう。これは、テスト/本番環境の構成アイテムなど、見つけにくいバグの原因です。

そうは言っても、私にとって、デフォルトをシリアル化するツールは、「防御的プログラミング」スタイルを採用していることの良い兆候です。スキーマ言語に関係なく、XML の相互運用性を促進します。

したがって、本格的な XSD 対応の XML シリアライザーは、デフォルト値のシリアル化を有効/無効にするオプションを提供する必要があると思います。デフォルトを ON (シリアル化) に設定します。

XSD で定義された言語を理解し、準拠するように設計された特殊なプロセッサがある場合、実際には、ワイヤ上のデフォルト値がクラッタ (最小/最大オカレンス参照) として認識される場合があります。これらの値をオフにするオプションがあると、そこで役立ちます。

于 2012-11-06T15:29:37.243 に答える