まず、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 がそれを行っているのを見てきました。
- オプション属性のデフォルト値のC# XML シリアル化
- 「.net」(一般的に?)値がデフォルトと同じ場合のxml属性を含む
- marklogic MarkLogic のデフォルトのスキーマ値
しかし、JAXB ではありません:
- JAXBではないJAXBデフォルト値を保存しない
最後に、おそらくここで私は主観性の崖っぷちでよろめきますが、どのような振る舞いをすべきでしょうか?
デフォルト値を持つ属性を省略すると、特にデフォルト値が予想され、一般的である場合は、混乱が軽減されます。たとえばminOccurs
、maxOccurs
デフォルト1
で XSD 自体を使用する場合 - XSD を処理してから結果をシリアル化すると、すべて<element>
の<sequence>
,<choice>
などに突然表示されるため、読みにくくなります。
OTOH、オブジェクトとデータ構造では、デフォルト値がある場合、それを見るとそこにあると予想されます。したがって、上記のSOの質問が示すように、デフォルト値を持つ属性が省略されていると驚くかもしれません。
結果をデータと見なすか、データの表現と見なすかによって異なると思います。表現を使用すると、それを変更して読みやすくすると非常に便利です。しかし、データに関しては、それがまさにデータであることを期待します。考え?