6

SAMLプロトコルスキーマ(具体的にはhttps://www.oasis-open.org/committees/download.php/3407/oasis-sstc-saml-schema-protocol-1.1.xsd)を読み込もうとしていますが、これを行う:

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.

エラーをグーグルで検索しようとしましたが、何が起こっているのかについての手がかりがありません。誰かが光を当てることができますか?

注:Ruby1.8.7-p370でのRVMの使用

4

2 に答える 2

16

リモートスキーマを参照する場合は、それらをダウンロードして、すべて1つのディレクトリにまとめます。マシンにすでにxsdファイルがある場合は、それらを同じディレクトリにまとめるだけです。次に、相対パスを使用するようにxsdを変更します。例えば:

これを変える

<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>

<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="xml.xsd"/>

次に、検証コードをDir.chdir呼び出し内にラップします。このような:

Dir.chdir(somewhere) do
schema = Nokogiri::XML::Schema(IO.read('your-schema.xsd'))
doc = Nokogiri::XML(IO.read(doc_path))
schema.validate(doc)
end
于 2012-08-17T01:36:55.093 に答える
16

すべての.xsdファイルが同じ場所にあり、すべての名前空間が次のように宣言されている場合

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

File.readの代わりにFile.openを使用して、.xsdファイルを読み取ります。

Nokogiriは、依存するすべてのスキーマを開くために処理します。

于 2014-04-09T18:49:43.170 に答える