
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.sax.*;
import org.xml.sax.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
import org.apache.jena.rdf.arp.*;
import org.apache.jena.rdf.model.*;

/**
 * @author Jeremy J. Carroll
 *  
 */
public class DOM2Jena {

	public static void main(String args[]) throws Exception {
		
		// Create DOM:
		
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	    // DOM must have namespace information inside it!
		factory.setNamespaceAware(true);
		DocumentBuilder domParser = factory.newDocumentBuilder();
		Document document = domParser
				.parse(new File("testing/wg/Manifest.rdf"));
		// Make DOM into transformer input
		Source input = new DOMSource(document);
		
		// Make SAX2Model SAX event handler
		Model m = ModelFactory.createDefaultModel();
		SAX2Model handler = SAX2Model.create(
				"http://www.w3.org/2000/10/rdf-tests/rdfcore/Manifest.rdf", m);

		
		// Make a SAXResult object using this handler
		SAXResult output = new SAXResult(handler);
		output.setLexicalHandler(handler);
		
		// Run transform
		TransformerFactory xformFactory = TransformerFactory.newInstance();
		Transformer idTransform = xformFactory.newTransformer();
		idTransform.transform(input, output);

		// Use Model
		m.write(System.out, "N-TRIPLE");
	}

}

