- ベストアンサー
妥当なXML(Valid XML)のチェックについて
妥当な文書にするためにチェックを行っているのですが http://validator.w3.org/ ここれでやるとThis page is not Valid (no Doctype found)!といわれ omitted tag minimization parameter can be omitted only if OMITTAG NO is specified. などとエラーがでてしまいます。 しかし、http://www.stg.brown.edu/service/xmlvalid/でやるときちんとValidになります。 先生からはhttp://validator.w3.org/でチェックをするときいたのですがどうしてもエラーがでるので やはりhttp://validator.w3.org/はXHTMLだけでXMLのチェックというものはできないのでしょうか? XMLのValidかどうかのチェックはhttp://www.stg.brown.edu/service/xmlvalid/でやればいいのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>ファイルをアップロードしてチェックした場合だとSorry! This document can not be checked. 再現した(笑) [原因] どうやらファイルアップロードはXML宣言にShift_JISって書いてあっても us-ascii扱いになってしまうようだ。 で、そのために「ごめんね、マルチバイトの文字は読めないの」って謝られるの。 [回避策] Extended File Upload Interfaceって奴にアクセスすると 色々指定できる。チェックする時にアップロードして Encoding:の欄を(detect automatically) [自動的に検出する→us-asciiと検出される]からshift_jisを明示してあげると検証が行われる。 俺は大抵BOM付UTF-8で文書を作ってきちんと自動認識されていたと思う。(BOMなしだとus-asciiとかその他のエンコードだと思われかねないから) ======================= >This page is not Valid (no Doctype found)! [原因] テキスト入力だと「DOCTYPE宣言書け」って書いてあるくせに、 内部サブセットだとDOCTYPE宣言だと認識できず 要素型宣言等をタグだと思い込みやがるらしい。 (当然終了タグに該当するものがないので「きちんと閉じやがれ」って言ってる) [回避策] なし。多分仕様。
その他の回答 (4)
- himajin100000
- ベストアンサー率54% (1660/3060)
>と真っ赤な文字が出ていましたが まぁ、とりあえず解らなければ飛ばしてもいいかな。 気にするほどのことは書いてないから。 >しかしテキスト入力ではやはりできないので、やはりhttp://validator.w3.org/でXMLのチェックはむいてないということなんでしょうか?他のサイトのほうがいいんでしょうか? テキスト入力でやろうとするなら向かないんだろうね。 ま、URL版やアップロード版使うか、他のサービスを使うかは 別にどれだっていいと思う。好みの問題だし、お好きにどうぞ。 (特に質問なければ締め切りで)
お礼
なるほど! いろいろとありがとうございました^^
- himajin100000
- ベストアンサー率54% (1660/3060)
>どうやれば後者で正しく認識されてくれるのだろう? UTF-8N(BOMなしUTF-8)で 外部サブセット、内部サブセット共に 正しく検証されました。(汗 ということで再現できないので こちらでの実験のためにソースを掲示してほしいのは相変わらずです。
- himajin100000
- ベストアンサー率54% (1660/3060)
FirefoxやIEには「整合性(well-formedness)検証」機能しかありません。 Operaはopera:config見るとXML Validateという項目があって出来そうな気がするのですが、当方環境では再現できませんでした。 ================== 以下のサンプルソースはBOM付きのUTF-8、改行コードCRLFとして作成してある XMLEDITOR.NET http://www.xmleditor.jp/ を用いて「妥当性(validity)検証」を済ませた。 話によると.NETでDOMを用いているので ファイルが大きくなると反応が遅くなるらしい。 ============Q3160421-1.dtd=============== <!ELEMENT hoge (#PCDATA|fuga)*> <!ELEMENT fuga (#PCDATA)*> ==========Q3160421-1.xml (SYSTEM識別子を用いた妥当なXML)================ <?xml version="1.0"?> <!DOCTYPE hoge SYSTEM "Q3160421-1.dtd"> <hoge> <fuga></fuga> </hoge> ==========Q3160421-1.xml (SYSTEM識別子を用いた妥当でないXML)================ <?xml version="1.0"?> <!DOCTYPE hoge SYSTEM "Q3160421-1.dtd"> <hoge> <fuga><hoge></hoge></fuga> </hoge> ==========Q3160421-3.xml (内部サブセットにDTDを記述した妥当なXML)================ <?xml version="1.0"?> <!DOCTYPE hoge [ <!ELEMENT hoge (#PCDATA|fuga)*> <!ELEMENT fuga (#PCDATA)*> ] > <hoge> <fuga></fuga> </hoge> ==========Q3160421-4.xml (内部サブセットにDTDを記述した妥当でないXML)================ <?xml version="1.0"?> <!DOCTYPE hoge [ <!ELEMENT hoge (#PCDATA|fuga)*> <!ELEMENT fuga (#PCDATA)*> ] > <hoge> <fuga><hoge></hoge></fuga> </hoge> ========== SYSTEM識別子を利用したXML、及び使われているDTDについて ファイルアップロードや直接記述では対応できないため、 自分で立てたWebサーバ(ANHTTPD)を利用した。 ========== 結果、 W3C Markup Validatorを用いたものは SYSTEM識別子を利用したものは、W3C Markup Validatorでは検証できない、と英語で言われてしまった。 尚、サンプルには出さないが、http://www.geocities.co.jp/Hollywood-Studio/8691/ に見られるように 独自のPUBLIC識別子を記述してみても無駄であった。 一方、内部サブセットにDTDを記述した利用したXMLは 正しく検証が行われて、Valid XML, Not Valid XMLを正しく判別してくれた。 しかし、 http://www.stg.brown.edu/service/xmlvalid/ ではどちらのXMLに関しても error (1104): document body starts with CharData: といわれてしまった。 どうやれば後者で正しく認識されてくれるのだろう? ========== >これでやるとThis page is not Valid (no Doctype found)!といわれ omitted tag minimization parameter can be omitted only if OMITTAG NO is specified エラーが出たXMLのソースを見せて欲しい。
補足
Operaではもしかしたらできるかもですか、、、 以下判定したソースです。 <?xml version="1.0" encoding="shift_jis"?> <?xml-stylesheet type="text/xsl" href="report4.xsl"?> <!DOCTYPE uta[ <!ELEMENT uta (poem*)> <!ELEMENT poem (kami*,simo*)> <!ELEMENT kami (#PCDATA)> <!ELEMENT simo (#PCDATA)> <!ATTLIST poem sex CDATA #REQUIRED name CDATA #REQUIRED syoku CDATA #REQUIRED> ]> <uta> <poem sex="man" name="天智天皇" syoku="天皇"> <kami>秋の田の かりほの庵の 苫をあらみ</kami> <simo> わが衣手は 露にぬれつつ</simo> </poem> <poem sex="man" name="柿本人麻呂" syoku="一般人"> <kami>あしびきの 山鳥の尾の しだり尾の</kami> <simo> ながながし夜を ひとりかも寝む</simo> </poem> <poem sex="woman" name="持統天皇" syoku="天皇"> <kami>春すぎて 夏来にけらし 白妙の</kami> <simo> 衣ほすてふ 天の香具山</simo> </poem> <poem sex="woman" name="小野小町" syoku="一般人"> <kami>花の色は 移りにけりな いたづらに</kami> <simo> 我身世にふる ながめせしまに</simo> </poem> </uta> http://validator.w3.org/で、テキスト欄にいれてチェックしたばあいはThis page is not Valid (no Doctype found)!とえらーがでて、ファイルをアップロードしてチェックした場合だとSorry! This document can not be checked.とでてきて結果がちがうのですが、やはりXMLは対応してないということなんでしょうか?
dtdに対してっていうならちょっと判らないけどXMLの書式としてだけチェックしたいならgecko系のブラウザに放り込むと簡単にだけどチェックできるよ。 具体的にはfirefox辺り。
補足
ご解答ありがとうございます。 firefoxに書式チェックの機能がついてるのでしょうか? ひととおりみたかんじではみあたらないのですが。。 また、DTDでチェックするにはどうしたらいいのでしょうか
補足
ファイルアップロードでShift_Jis指定したら Missing "charset" attribute for "text/xml" document. The HTTP Content-Type header (text/xml) sent by your web browser (Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1) Sleipnir/2.5.12) did not contain a "charset" parameter, but the Content-Type was one of the XML text/* sub-types. The relevant specification (RFC 3023) specifies a strong default of "us-ascii" for such documents so we will use this value regardless of any encoding you may have indicated elsewhere. If you would like to use a different encoding, you should arrange to have your browser send this new encoding information. Character Encoding Override in effect! The detected character encoding "us-ascii" has been suppressed and "shift_jis" used instead. Note: The Validator XML support has some limitations. と真っ赤な文字が出ていましたがそのしたのほうにはThis Page Is Tentatively Valid XMLとうまくいってるようでした。 しかしテキスト入力ではやはりできないので、やはりhttp://validator.w3.org/でXMLのチェックはむいてないということなんでしょうか? 他のサイトのほうがいいんでしょうか? うーむ、よくわからないですね@@;