2009-08-17 10 views
12

nokogiri gem을 사용하여 DTD에 대해 XHTML의 유효성을 검사 할 수 있다는 사실을 암시하는 몇 개의 게시물을 발견했습니다. XHTML을 성공적으로 구문 분석 ('a'태그 찾기 등)하는 데 사용했지만, 문서의 유효성을 검사하는 데 어려움을 겪고 있습니다. 나를 위해 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에서 루비 1.8.6을 실행 중입니다. Nokogiri가 나를 알려줍니다.

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에서는이를 수행하는 것이 좋습니다. 내가 추천 할 수

가장 좋은 것은 대신 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에 포함되어있는 경우 그것은 확인을 작동합니다. 따라서 하나의 파일에 데이터를 재구성하는 것이 일반적인 관행으로 또는 일시적인 용도로만 이루어지면 문제가 해결됩니다.

나는에 노코 기리 프로젝트에 문제를 제기 :

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

요코 하라다, JRuby를 Nokigiri의 주요 저자는 말했다 :

"마스터 분기에 그냥 참고로 순수 자바 노코 기리 (하지. 아직 출시 된)이 문제가 없습니다. "

제가 제출 한 문제에는 문제를 설명하기위한 최소 예제 파일과 irb 호출에 대한 링크가 포함되어 있습니다. 위대한

  • 키스
관련 문제