/* * Copyright (c) 2013, University of Toronto. * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may obtain * a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package edu.toronto.cs.xcurator.rdf; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ResIterator; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.tdb.TDBFactory; import com.hp.hpl.jena.vocabulary.RDF; import edu.toronto.cs.xcurator.common.DataDocument; import edu.toronto.cs.xcurator.TestConfigs; import edu.toronto.cs.xcurator.discoverer.BasicEntityDiscoveryTest; import edu.toronto.cs.xcurator.mapping.XmlBasedMapping; import edu.toronto.cs.xcurator.common.XmlParser; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.parsers.ParserConfigurationException; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.w3c.dom.Document; import org.xml.sax.SAXException; /** * * @author zhuerkan */ public class RdfGeneratorTest { private RdfGenerator rdfGenerator; private RdfGeneration rdfGeneration; private XmlBasedMappingDeserialization mappingDeserialization; private String testTdbDir; private XmlParser parser; @Rule public TemporaryFolder testTdbFolder = new TemporaryFolder(); @Before public void setup() { // Use temporary directory for setting up testing TDB File testTdb = null; try { testTdb = testTdbFolder.newFolder("testTdb"); } catch (IOException ex) { Logger.getLogger(RdfGeneratorTest.class.getName()).log(Level.SEVERE, null, ex); } testTdbDir = testTdb.getAbsolutePath(); rdfGeneration = new RdfGeneration(testTdbDir, TestConfigs.testRdfUriConfig()); parser = new XmlParser(); } /** * Run the RDF generator pipeline for clinical trial data Before running * this, run the Mapping Discovery Test first to generate the mapping file * for clinical trials. * * @throws SAXException * @throws IOException * @throws ParserConfigurationException */ @Test public void test_generateRdfs_clinical_trials() throws SAXException, IOException, ParserConfigurationException { // Setup deserializer mappingDeserialization = new XmlBasedMappingDeserialization( new FileInputStream("output/clinicaltrials-mapping.xml"), parser); Document dataDocument = parser.parse(RdfGeneratorTest.class.getResourceAsStream( "/clinicaltrials/data/content.xml"), 10); rdfGenerator = new RdfGenerator(new DataDocument(dataDocument), new XmlBasedMapping()); // Add steps rdfGenerator.addStep(mappingDeserialization); rdfGenerator.addStep(rdfGeneration); // Generate rdfGenerator.generateRdfs(); // Verify Model model = TDBFactory.createModel(testTdbDir); Assert.assertFalse("No RDF was generated. TDB directory: " + testTdbDir, model.isEmpty()); ResIterator iter = model.listResourcesWithProperty(RDF.type); while (iter.hasNext()) { Resource resource = iter.nextResource(); System.out.println(resource.getLocalName()); StmtIterator iterStm = resource.listProperties(); while (iterStm.hasNext()) { System.out.println(iterStm.nextStatement().toString()); } } } @Test // Run test_discoverMapping_fb_XBRL to generate the mapping file before running // this test. public void test_generateRdfs_fb_XBRL() throws SAXException, IOException, ParserConfigurationException { // Setup deserializer mappingDeserialization = new XmlBasedMappingDeserialization( new FileInputStream("output/fb-20121231-mapping.xml"), parser); Document dataDocument = parser.parse(RdfGeneratorTest.class.getResourceAsStream( "/secxbrls/data/fb-20121231.xml"), -1); rdfGenerator = new RdfGenerator(new DataDocument(dataDocument), new XmlBasedMapping()); // Add steps rdfGenerator.addStep(mappingDeserialization); rdfGenerator.addStep(rdfGeneration); // Generate rdfGenerator.generateRdfs(); // Verify Model model = TDBFactory.createModel(testTdbDir); Assert.assertFalse("No RDF was generated. TDB directory: " + testTdbDir, model.isEmpty()); Resource r = model.getResource("http://example.org/resource/class/unitNumerator"); // Failing, investigate Assert.assertTrue(r.hasProperty(model.getProperty("http://example.org/resource/property/measure"))); // ResIterator iter = model.listResourcesWithProperty(RDF.type); // while (iter.hasNext()) { // Resource resource = iter.nextResource(); // System.out.println(resource.getLocalName()); // StmtIterator iterStm = resource.listProperties(); // while (iterStm.hasNext()) { // System.out.println(iterStm.nextStatement().toString()); // } // } } @Test // Run test_discoverMapping_XBRL_msft to generate the mapping file before running // this test. public void test_generateRdfs_msft_XBRL() throws SAXException, IOException, ParserConfigurationException { // Setup deserializer mappingDeserialization = new XmlBasedMappingDeserialization( new FileInputStream("output/msft-20130630-mapping.xml"), parser); Document dataDocument = parser.parse(RdfGeneratorTest.class.getResourceAsStream( "/secxbrls/data/msft-20130630.xml"), -1); rdfGenerator = new RdfGenerator(new DataDocument(dataDocument), new XmlBasedMapping()); // Add steps rdfGenerator.addStep(mappingDeserialization); rdfGenerator.addStep(rdfGeneration); // Generate rdfGenerator.generateRdfs(); // Verify Model model = TDBFactory.createModel(testTdbDir); Assert.assertFalse("No RDF was generated. TDB directory: " + testTdbDir, model.isEmpty()); Resource r = model.getResource("http://example.org/resource/class/unitNumerator"); // Failing, investigate Assert.assertTrue(r.hasProperty(model.getProperty("http://example.org/resource/property/measure"))); // ResIterator iter = model.listResourcesWithProperty(RDF.type); // while (iter.hasNext()) { // Resource resource = iter.nextResource(); // System.out.println(resource.getLocalName()); // StmtIterator iterStm = resource.listProperties(); // while (iterStm.hasNext()) { // System.out.println(iterStm.nextStatement().toString()); // } // } } @Test // Run test_discoverMapping_multiple_XBRLs to generate the mapping file before running // this test. public void test_generateRdfs_multiple_XBRLs() throws SAXException, IOException, ParserConfigurationException { // Setup deserializer mappingDeserialization = new XmlBasedMappingDeserialization( new FileInputStream("output/xbrl-mapping.xml"), parser); Document fb2013 = parser.parse(BasicEntityDiscoveryTest.class.getResourceAsStream( "/secxbrls/data/fb-20131231.xml"), -1); Document msft2013 = parser.parse(BasicEntityDiscoveryTest.class.getResourceAsStream( "/secxbrls/data/msft-20130630.xml"), -1); Document goog2013 = parser.parse(BasicEntityDiscoveryTest.class.getResourceAsStream( "/secxbrls/data/goog-20131231.xml"), -1); rdfGenerator = new RdfGenerator(new XmlBasedMapping()); // Add document and steps rdfGenerator.addDataDocument(new DataDocument(fb2013, "http://example.org/resource/fb-20131231")) .addDataDocument(new DataDocument(msft2013, "http://example.org/resource/msft-20130630")) .addDataDocument(new DataDocument(goog2013, "http://example.org/resource/goog-20131231")) .addStep(mappingDeserialization) .addStep(rdfGeneration); // Generate rdfGenerator.generateRdfs(); // Verify Model model = TDBFactory.createModel(testTdbDir); Assert.assertFalse("No RDF was generated. TDB directory: " + testTdbDir, model.isEmpty()); ResIterator iter = model.listResourcesWithProperty(RDF.type); while (iter.hasNext()) { Resource resource = iter.nextResource(); System.out.println(resource.getLocalName()); StmtIterator iterStm = resource.listProperties(); while (iterStm.hasNext()) { System.out.println(iterStm.nextStatement().toString()); } } } }