

以下のようなXMLをパーズするプログラムがあります。
------------------------------------------------------------------
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(true);
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document doc = documentBuilder.parse(new InputSourc("a.xml"));
------------------------------------------------------------------
a.xmlに以下のようなXMLの構造をDTDで指定した場合のxmlをパーズさせると、
<!DOCTYPE a [
<!ELEMENT a (#PCDATA)>
<!ATTLIST a a1 CDATA "abc">
]>
<a/>
上記のプログラム3行目のvalidationの設定がtrue、falseに関わらす、
<a a1="abc"/>
というような形式のドキュメントオブジェクトが返ってきます。
ですが、以下のようにXMLの構造をXML Schemaで定義した場合、
a.xml
<a xsi:noNamespaceSchemaLocation="b.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
b.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="a">
<xsd:complexType>
<xsd:attribute name="a1" type="xsd:string" default="abc"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
返ってくるドキュメントオブジェクトのa要素には、validationがtrueの場合はa1属性が含まれる、falseの場合は含まれません。
これは正しい動作なのでしょうか?
また、XML Schemaの場合もvalidationがtrue、falseに関わらず、
デフォルト値が指定された属性を含めることはできないのでしょうか?
No.2ベストアンサー
- 回答日時:
XML 1.0では、validationしないプロセッサのDTDに対する動作に関して、以下のような記述があります。
(5.1 Validating and Non-Validating Processorsより)Non-validating processors are required to check only the document entity, including the entire internal DTD subset, for well-formedness.
つまり、internal DTD subsetの中ならば、validationしなくてもデフォルト値などは使わなければならず、externalの中ならば必須ではない(もしかしたらやってくれる場合もあるかもしれないのですが)、ということになります。
一方、XML Schemaの具体的な記述は見つかりませんでしたが(なにしろ量が多いので)、デフォルト値のような情報追加について、以下のような記述があります。
(2.3 Constraints and Validation Rulesの、Schema Information Set Contributionの定義より)
Augmentations to post-schema-validation infosets expressed by schema components, which follow as a consequence of validation and/or assessment.
これを読む限り、validationを行なわないとデフォルト値は追加されないように読めます。
XML Schemaを使いつつ、validationしない時にデフォルト値だけは埋めたい場合には、デフォルト値を与える宣言だけを記述したinternal DTD subsetと組み合わせるしかないかもしれません。冗長になりますが。
※載せた英文は、以下の2つのURLから引用しました。
http://www.w3.org/TR/2000/REC-xml-20001006
XML 1.0(Second Edition)
http://www.w3.org/TR/2001/REC-xmlschema-1-20010502
XML Schema Part 1: Structures
返事が遅くなって申し訳ありません。
XML Schemaについて詳しい説明があるのは英語のものばかりなので、
なかなか読む気になりません。。。
これからは英語の文書をよく読んで調べてから質問したいと思います。
ありがとうございました。
No.4
- 回答日時:
元の質問とあまり関係なくなっちゃいますが。
私の理解では、あの引用部分は、entityの解決のために読み込まないという意味ではなく、external DTD subsetを読み込むことが必須でないことを表していると思って引用しました。たぶん段落の前後でentityが盛んに出てくるからだと思いますが、external DTD subsetもentityなので。
external DTD subsetが読み込まれることが必須でないから、その結果external DTD subsetに記述されたデフォルト値は認識されないかもしれない、という意味だったのですが、分かりにくかったでしょうか。
2.9 Standalone Document Declarationのところを引用しても良かったのですが、説明が長くなりそうだったので、すみません。
ちなみに、XML SchemaをDTDと組み合わせることができることに触れたのは、DTDと組み合わせた場合にXML Schemaがexternal DTD subsetみたいに扱われるとみなせば、一応整合性がとれていると言えるかも、という意味でもあります。
参考URL:http://www.w3.org/TR/2000/REC-xml-20001006
No.3
- 回答日時:
#2の方の揚げ足を取るわけではありませんがXML1.0について引用された記述はentityについての記述であって属性の宣言についての記述ではないと思います。
まぁ、実体参照(entity)については処理しなくちゃいけないということで間違ってはいないと思いますが。
No.1
- 回答日時:
XML1.0の規格では「文書内で属性が指定されていないときにXMLプロセッサがどう処理しなければならないかまたは処理するほうがいいかの情報も与える。
」となっているようなのでDTDに記述された内容は妥当性の検証をおこなうかどうかにかかわらずdefault値が摘要されるようです。(質問では内部DTDで記述されていますが外部DTDであったばあい、妥当性の検証を行わなかったときの処理がどうなっているかは覚えていません)一方、XML Schemaでは妥当性の検証を行う際に参照されるので検証しない場合には適用されないとなっているようです。
自信がないのでURLを紹介しておきます
XML1.0
英語:
http://www.w3.org/TR/REC-xml
日本語:
http://www.fxis.co.jp/DMS/sgml/xml/rec-xml.html
XML Schema Part 0:
英語:
http://www.w3.org/TR/xmlschema-0/
日本語(ただし草案):
http://www.trl.ibm.com/projects/xml/xmlschema-0j …
返事が遅くなって申し訳ありません。
XML Schemaがそういう仕様になっているのであれば、しょうがないですね。
今自分の作っているものがそういう動作をするのはXML Schemaが
そうだから・・・と上司への言い訳ができました。(~O~)
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DTDファイルをクラスパスから読...
-
バッチファイルでテキストファ...
-
xmlファイルが上手にHTMLに変換...
-
CPUの考え方を教えてください ...
-
TreeViewで複数ノードの選択は...
-
DOSコマンドラインからxmlファ...
-
ノードとは
-
ノベルゲームを作る場合、
-
動的な構造体配列の初期化
-
Excel(2007以降)をxml形式に変...
-
複数のXMLファイルからデータを...
-
ExcelVBAで書き出した文字が化ける
-
TreeView の初期表示について
-
ツリーでのアイコンの設定
-
127.0.0.1とlocalhost
-
XMLへDOMでタグの追加
-
XMLを出力する時のエラー原因
-
昔Winnyってありましたけど、あ...
-
質問
-
XMLで要素が記述された順番に意...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBでXMLファイルを作ると xmlns...
-
このエラー、何とかなりません...
-
DTDファイルをクラスパスから読...
-
u_shortなどの省略した宣言につ...
-
縁切りするとき
-
質問
-
変数の宣言について
-
HTMLとXMLの用途の違いを教えて...
-
IE7とDOCTYPE宣言について
-
XSLT変換した際、必要のないxml...
-
XML Schemaの妥当性のチェック
-
CPUの考え方を教えてください ...
-
XMLで要素が記述された順番に意...
-
バッチファイルでテキストファ...
-
ルート要素ノードが2個ある場合?
-
東芝のDynabookなのですがアン...
-
xmlファイルが上手にHTMLに変換...
-
SNMP リンクダウンとノードダ...
-
VBSでxmlの値を書き換えたい
-
昔Winnyってありましたけど、あ...
おすすめ情報