2009-08-17 35 views
12

nokogiri gemを使ってXHTMLをそのDTDに対して検証できるという事実を暗示するいくつかの投稿を見つけました。私はそれを使ってXHTMLを正常に解析することができましたが(私は 'タグ'などを探していました)、ドキュメントの検証に苦労しています。私にとって nokogiriでXHTMLを検証するにはどうすればよいですか?

、この:全体のヒープ内の

doc = Nokogiri::XML(Net::HTTP.get(URI.parse("http://www.w3.org"))) 
puts doc.validate 

結果:

[ 
#<Nokogiri::XML::SyntaxError: No declaration for element html>, 
#<Nokogiri::XML::SyntaxError: No declaration for attribute xmlns of element html>, 
#<Nokogiri::XML::SyntaxError: No declaration for attribute lang of element html>, 
#<Nokogiri::XML::SyntaxError: No declaration for attribute lang of element html>, 
#<Nokogiri::XML::SyntaxError: No declaration for element head>, 
#<Nokogiri::XML::SyntaxError: No declaration for attribute profile of element head 
[repeat for every tag in the document.] 
] 

だから私はそれが正しいアプローチではないと仮定しています。私は良い例を見つけることができないようだ - 誰かが私が間違っていることを示唆することができますか?

Mac OSX 10.5.8でruby 1.8.6を実行しています。鋸山は私に語った:

nokogiri: 1.3.3 
warnings: [] 

libxml: 
    compiled: 2.6.23 
    loaded: 2.6.23 
    binding: extension 

答えて

14

それはあなただけではありません。あなたがやっていることは、それを行う正しい方法であるはずですが、私は決してそれに運がありませんでした。私が知る限り、Nokogiriとlibxmlの間には、SYSTEM DTDをロードしないように、またはPUBLIC DTDを認識させるための接続があります。 XMLファイル内でDTDを定義すると、になりますが、XHTML DTDでDTDを定義するとうまくいきます。

私はお勧めできる最善のことは、代わりにschemas for XHTMLを使用することです:

require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::XML(open('http://www.w3.org')) 
xsd = Nokogiri::XML::Schema(open('http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd')) 

#this is a true/false validation 
xsd.valid?(doc) # => true 

#this gives a listing of errors 
xsd.validate(doc) # => [] 
+0

- それは確かに私は合理的に見える生産の業績を(一目で!)。 奇妙なことに、私が検証しているいくつかのページでは、 "Unimplemented block at at xmlschemas.c:27443"という警告が表示されますが、エラーなしで有効であることを報告するように進みます。私はこの時点でどちらのパターンが存在していないかのパターンの底には達していません。 – NeilS

1

DTDは、XMLに埋め込まれている場合それはOKに動作します。したがって、データを1つのファイルにリストアするのが一般的な方法として、または一時的な使用のためにのみ問題が解決した場合は、問題は解決します。

は私がで鋸山プロジェクトで問題を提起:

https://github.com/sparklemotion/nokogiri/issues/440

ヨーコ原田、JRubyのNokigiriの主著者は、言った:

「masterブランチ上だけFYIピュアJavaの鋸山(ではありません。まだリリースされていない)にはこの問題はありません。

私が提出した問題には、問題を説明する最小限のサンプルファイルとirb呼び出しへのリンクが含まれています。素晴らしいことだ

  • キース
関連する問題