 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Validating an XML Document (written by Mauro Cicio) | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'rubygems'
require 'libxml'
dtd = XML::Dtd.new(%{<!ELEMENT rubycookbook (recipe+)>
<!ELEMENT recipe (title?, problem, solution, discussion, seealso?)+>
<!ELEMENT title (#PCDATA)>
<!ELEMENT problem (#PCDATA)>
<!ELEMENT solution (#PCDATA)>
<!ELEMENT discussion (#PCDATA)>
<!ELEMENT seealso (#PCDATA)>})
open('cookbook.xml', 'w') do |f|
  f.write %{<?xml version="1.0"?>
<rubycookbook>
 <recipe>
   <title>A recipe</title>
   <problem>A difficult/common problem</problem>
   <solution>A smart solution</solution>
   <discussion>A deep solution</discussion>
   <seealso>Pointers</seealso>
 </recipe>
</rubycookbook>
}
end
document = XML::Document.file('cookbook.xml')
document.validate(dtd) | true | true | 
| schema = XML::Schema.from_string %{<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="recipe" type="recipeType"/>
  <xsd:element name="rubycookbook" type="rubycookbookType"/>
  <xsd:element name="title"      type="xsd:string"/>
  <xsd:element name="problem"    type="xsd:string"/>
  <xsd:element name="solution"   type="xsd:string"/>
  <xsd:element name="discussion" type="xsd:string"/>
  <xsd:element name="seealso"    type="xsd:string"/>
  <xsd:complexType name="rubycookbookType">
   <xsd:sequence>
      <xsd:element ref="recipe"/>
    </xsd:sequence>
 </xsd:complexType>
  <xsd:complexType name="recipeType">
    <xsd:sequence>
      <xsd:element ref="title"/>
      <xsd:element ref="problem"/>
      <xsd:element ref="solution"/>
      <xsd:element ref="discussion"/>
      <xsd:element ref="seealso"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
}
document.validate(schema) | true | true |