assert XSD validity

Hi.

I am working on a webservice producing xml content, In my rails functional test I would like to assert that this generated xml (@reponse.body) conforms to a specific XSD.

What is the best approach to do this?

Jarl

Dunno about best approach but I recently did something along those lines (in this particular case I was generating xml to send to a webservice rather than your way round, but I don't think that's relevant) in the end I just popened xmllint and piped my xml in. The ruby libxml bindings might allow you do stuff like that, I didn't look very closely at that.

Fred

Thanks for the reply.

Frederick Cheung <frederick.cheung@gmail.com> writes:

Thanks for the reply.

Frederick Cheung <frederick.cheung@gmail.com> writes:

Hi.

I am working on a webservice producing xml content, In my rails functional test I would like to assert that this generated xml (@reponse.body) conforms to a specific XSD.

What is the best approach to do this?

Dunno about best approach but I recently did something along those lines (in this particular case I was generating xml to send to a webservice rather than your way round, but I don't think that's relevant) in the end I just popened xmllint and piped my xml in.

Cool, but xmllint only validates against a DTD, right? I am interested in (a more strict) validation against a XSD.

Does both as far as I know ( I only had an xsd anyway)

Fred

Frederick Cheung <frederick.cheung@gmail.com> writes:

Does both as far as I know ( I only had an xsd anyway)

Thanks. the xmllint help says --schema schema : do validation against the WXS schema

I have never seen "WXS" as an abreviation for XML Schema Definition files.

I now made a small rails test helper like this:

require 'open3' class ActionController::TestCase   def assert_xsd_validity(xsd, xml = @response.body )     assert test(?e, xsd), "#{xsd} does not exist"     xml_temp_file = Tempfile.new("xsd_helper_tempfile")     xml_temp_file.write xml     xml_temp_file.close     command_line = "/usr/bin/env xmllint -noout --schema #{xsd} #{xml_temp_file.path}"     err = ""     Open3.popen3(command_line){|stdin, stdout, stderr|       stdin.close       out = stdout.read       err = stderr.read     }     assert_equal "#{xml_temp_file.path} validates\n", err   end end

Jarl

Frederick Cheung <frederick.cheung@gmail.com> writes:

Does both as far as I know ( I only had an xsd anyway)

Thanks. the xmllint help says --schema schema : do validation against the WXS schema

I have never seen "WXS" as an abreviation for XML Schema Definition files.

stands for W3C XML schema apparently :slight_smile:

Fred