#!/usr/bin/env tclsh
# $Id: rdfExample.xotcl,v 1.2 2006/02/18 22:17:33 neumann Exp $
#
# small Example for usage of xoXML
#
package require XOTcl 1; namespace import -force xotcl::*
package require xotcl::package
package require xotcl::trace
package require xotcl::rdf::parser
package require xotcl::rdf::recreatorVisitor
package require xotcl::xml::printVisitor

#
# instantiate parser and parser an example text into a node tree
#
RDFParser x
x parse {
  <rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:dc="http://purl.org/metadata/dublin_core#"> 
    <rdf:Description about="http://www.foo.com/cool.html"> 
      <dc:Creator>
        <rdf:Seq ID="CreatorsAlphabeticalBySurname">
          <rdf:li>Mary Andrew</rdf:li>
          <rdf:li>Jacky Crystal</rdf:li>
        </rdf:Seq>
      </dc:Creator>

      <dc:Identifier>
        <rdf:Bag ID="MirroredSites"> 
          <rdf:li rdf:resource="http://www.foo.com.au/cool.html"/>
          <rdf:li rdf:resource="http://www.foo.com.it/cool.html"/>
        </rdf:Bag>
      </dc:Identifier>

      <dc:Title>
        <rdf:Alt>
          <rdf:li xml:lang="en">The Coolest Web Page</rdf:li>
          <rdf:li xml:lang="it">Il Pagio di Web Fuba</rdf:li>
        </rdf:Alt>
      </dc:Title>
     
      <dc:xxx>
        some text
      </dc:xxx>

    </rdf:Description> 
  </rdf:RDF>
}

proc run {} {
  #
  # print the node treee to the std output
  #
  puts ************************************************************************
  puts "Node Tree:"
  puts ************************************************************************
  PrintVisitor pv
  foreach tn [x info children topNode*] {
    pv interpretNodeTree $tn
  }
  
  #
  # recreate xml text and print it to the std output
  #
  puts \n
  puts ************************************************************************
  puts "Recreated RDF Text:"
  puts ************************************************************************
  RDFRecreatorVisitor rv
  foreach tn [x info children topNode*] {
    set result [rv interpretNodeTree  $tn]
    puts $result
  }
}
run
