Ruby Nokogiri::XML::架构加载时出现架构语法错误

Ruby Nokogiri::XML::架构加载时出现架构语法错误,ruby,xsd,nokogiri,saml,Ruby,Xsd,Nokogiri,Saml,我正在尝试加载SAML协议模式(具体如下:),但执行此操作后: schema = Nokogiri::XML::Schema(File.read('saml11_schema.xsd')) 我得到这个输出: Nokogiri::XML::SyntaxError Exception: Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'ref': The QName value '{urn:oasis:names:tc:

我正在尝试加载SAML协议模式(具体如下:),但执行此操作后:

schema = Nokogiri::XML::Schema(File.read('saml11_schema.xsd'))
我得到这个输出:

Nokogiri::XML::SyntaxError Exception: Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'ref': The QName value '{urn:oasis:names:tc:SAML:1.0:assertion}Assertion' does not resolve to a(n) element declaration.
尝试用谷歌搜索错误,但没有关于可能发生什么的线索,有人能透露一些信息吗

注意:将RVM与Ruby 1.8.7-p370一起使用


如果引用远程模式,请下载它们并将它们放在一个目录中。如果您的计算机中已经有xsd文件,只需将它们放在同一目录中即可。然后将xsd更改为使用相对路径。例如:

改变这个

<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
在此帖子中找到了解决方案:


如果所有.xsd文件都位于同一位置,并且所有名称空间都声明为

<import namespace="urn:...:ns:name-1.0"
      schemaLocation="name-1.0.xsd"/>

只需使用File.open而不是File.read来读取.xsd文件

Nokogiri将处理打开所有依赖模式的操作。

起初我在想:“等等,这不能工作”。结果证明效果很好:)谢谢你@ernestothorp
Dir.chdir(somewhere) do
schema = Nokogiri::XML::Schema(IO.read('your-schema.xsd'))
doc = Nokogiri::XML(IO.read(doc_path))
schema.validate(doc)
end
<import namespace="urn:...:ns:name-1.0"
      schemaLocation="name-1.0.xsd"/>