2009-11-20 6 views
8

많은 XMPP 스탠자를 생성하고 있으며 단위 테스트에서 here의 사용 가능한 사양에 대해 유효성을 검사하려고합니다. 순간 Ruby에서 여러 XSD를 사용하여 XML 유효성 확인

나는 그것을 무효로보고됩니다 제외하고 각 스키마는 하나의 네임 스페이스를 포함, 내 XMPP 스탠자 여러 네임 스페이스를 가지고 있기 때문에 지금이 잘 작동

xml = Nokogiri::XML(xmpp_stanza) 
schema = Nokogiri::XML::Schema(xmpp_schema) 

assert schema.valid?(xml) 

같은 것을 이것을 달성하기 위해 노코 기리를 사용하고 있습니다. 예 :

Invalid XML: Element '{http://jabber.org/protocol/pubsub}pubsub': No matching global element declaration available, but demanded by the strict wildcard. 

단일 스팬의 유효성을 검사하기 위해 여러 스키마를 처리해야합니까? 처음에 네임 스페이스로 분리하고 각각을 독립적으로 검증하겠습니까?

답변

1

나는 이것을 다른 스키마에 importing 스키마로 달성 할 수있었습니다.

<xs:import namespace="http://base.google.com/ns/1.0" schemaLocation="public/xsd/google_base.xsd"/> 
0

사용 가능한 다른 네임 스페이스가없는 경우, 당신은 또한, 스키마의 관련 "모든"노드에서 processContents = "느슨한"지시문을 포함하는 스키마를 변경할 수 괜찮아하지 말 할 수있다 스키마가없는 네임 스페이스의 유효성을 검사합니다. 나는 그렇게했다 :

schema_xml  = Nokogiri::XML(File.read(path)) 
schema_xml.xpath("//xs:any[@namespace='##other']", 
    {"xs" => "http://www.w3.org/2001/XMLSchema"}).each do |node| 
    node["processContents"] = "lax" 
end 
schema = Nokogiri::XML::Schema.from_document(schema_xml) 

물론 이것은 외부 네임 스페이스가 유효하지 않음을 의미한다.

관련 문제