@Override public Model resolve(Type type) { if (processedTypes.contains(type)) { return modelByType.get(type); } else { processedTypes.add(type); } if (LOGGER.isDebugEnabled()) { LOGGER.debug(String.format("resolve %s", type)); } Iterator<ModelConverter> converters = this.getConverters(); Model resolved = null; if (converters.hasNext()) { ModelConverter converter = converters.next(); LOGGER.debug("trying extension " + converter); resolved = converter.resolve(type, this, converters); } if (resolved != null) { modelByType.put(type, resolved); if (resolved instanceof ModelImpl) { ModelImpl impl = (ModelImpl) resolved; if (impl.getName() != null) { modelByName.put(impl.getName(), resolved); } } } return resolved; }
@Test /** * Reads from TRIG with Jena API into Dataset 1, transforms one named Model from that Dataset into * Signingframework's API GraphCollection with one NamedGraph, transforms (converts) that * NamedGraph into Jena's Model, and checks if the resulting Model is the same as original Model. */ public void namedGraphToModelTest() throws Exception { for (String resourceFile : RESOURCE_FILES) { // prepare GraphCollection with NamedGraph to be converted: InputStream is = this.getClass().getResourceAsStream(resourceFile); Dataset dataset = DatasetFactory.createMem(); RDFDataMgr.read(dataset, is, RDFFormat.TRIG.getLang()); is.close(); String modelName = dataset.listNames().next(); Model model1 = dataset.getNamedModel(modelName); // this method is not tested here and used just for input // generation and to make it easier Namedgraph<->Model comparison // (but it's tested in other method, see modelToGraphCollectionTest()) GraphCollection gc = ModelConverter.modelToGraphCollection(modelName, dataset); LinkedList<NamedGraph> graphs = gc.getGraphs(); String graphName = null; for (NamedGraph g : graphs) { if (!g.getName().isEmpty() && g.getName().contains(modelName)) { graphName = g.getName(); break; } } // use this when debugging: // File outFile0 = File.createTempFile("won", ".trig"); // System.out.println(outFile0); // OutputStream os0 = new FileOutputStream(outFile0); // TriGPlusWriter.writeFile(gc, outFile0.getAbsolutePath(), false); // os0.close(); // test convert from NamedGraph of GraphCollection into Model Model model2 = ModelConverter.namedGraphToModel(graphName, gc); Dataset dataset2 = DatasetFactory.createMem(); dataset2.addNamedModel(modelName, model2); // TODO maybe chng the API so that the prefix map is taken care of in the converter: // if it makes sense from the the usage of this in Assembler point of view dataset2.getDefaultModel().setNsPrefixes(dataset2.getNamedModel(modelName).getNsPrefixMap()); File outFile = testFolder.newFile(); // use this when debugging: // File outFile = File.createTempFile("won", ".trig"); // System.out.println(outFile); OutputStream os = new FileOutputStream(outFile); RDFDataMgr.write(os, dataset2, RDFFormat.TRIG.getLang()); os.close(); // make sure that the original Model that was used to generate test input // GraphCollection with NamedGraph is isomorphic with the Model after // conversion is applied: Assert.assertTrue(model1.listStatements().hasNext() && model2.listStatements().hasNext()); Assert.assertTrue(model1.isIsomorphicWith(model2)); } }
@Override public Property resolveProperty(Type type, Annotation[] annotations) { if (LOGGER.isDebugEnabled()) { LOGGER.debug(String.format("resolveProperty %s", type)); } Iterator<ModelConverter> converters = this.getConverters(); if (converters.hasNext()) { ModelConverter converter = converters.next(); return converter.resolveProperty(type, this, annotations, converters); } return null; }
@Override public PMML encodePMML() { RGenericVector train = getObject(); RExp finalModel = train.getValue("finalModel"); RGenericVector preProcess = (RGenericVector) train.getValue("preProcess"); ConverterFactory converterFactory = ConverterFactory.newInstance(); ModelConverter<RExp> converter = (ModelConverter<RExp>) converterFactory.newConverter(finalModel); FeatureMapper featureMapper; if (preProcess != null) { featureMapper = new PreProcessFeatureMapper(preProcess); } else { featureMapper = new FeatureMapper(); } return converter.encodePMML(featureMapper); }
public void testSimple() throws Exception { final ModelConverter mr = modelResolver(); Model model = mr.resolve(ModelWithJodaDateTime.class, new ModelConverterContextImpl(mr), null); assertNotNull(model); Map<String, Property> props = model.getProperties(); assertEquals(2, props.size()); for (Map.Entry<String, Property> entry : props.entrySet()) { String name = entry.getKey(); Property prop = entry.getValue(); if ("name".equals(name)) { assertEquals("string", prop.getType()); } else if ("createdAt".equals(name)) { assertEquals("string", prop.getType()); assertEquals("date-time", prop.getFormat()); } else { fail("Unknown property '" + name + "'"); } } }
@Test /** * Reads from TRIG with Jena API into Dataset 1, transforms one named graph from that Dataset into * Signingframework's API GraphCollection and writes it with Signingframework's API, reads the * result with Jena API into Dataset 2, and checks if the specified named graph model from Dataset * 1 is isomorphic with the same named graph model from Dataset 2. */ public void modelToGraphCollectionTest() throws Exception { for (String resourceFile : RESOURCE_FILES) { // prepare the input Dataset containg the Model to be converted InputStream is = this.getClass().getResourceAsStream(resourceFile); File outFile = testFolder.newFile(); // use this when debugging: // File outFile = File.createTempFile("won", ".trig"); // System.out.println(outFile); Dataset dataset = DatasetFactory.createMem(); RDFDataMgr.read(dataset, is, RDFFormat.TRIG.getLang()); is.close(); // test the convertion from the Model to the NamedGraph String modelName = dataset.listNames().next(); Model model = dataset.getNamedModel(modelName); // the method to be tested GraphCollection gc = ModelConverter.modelToGraphCollection(modelName, dataset); TriGPlusWriter.writeFile(gc, outFile.getAbsolutePath(), false); // check that the resulting graph collection is a representation // of the converted model. For this, read the resulting graph collection // as a Model with Jena API InputStream is2 = new FileInputStream(outFile); Dataset dataset2 = DatasetFactory.createMem(); RDFDataMgr.read(dataset2, is2, RDFFormat.TRIG.getLang()); is2.close(); Model model2 = dataset2.getNamedModel(modelName); File outFile2 = testFolder.newFile(); // use this when debugging: // File outFile2 = File.createTempFile("won", ".trig"); // System.out.println(outFile2); OutputStream os = new FileOutputStream(outFile2); RDFDataMgr.write(os, dataset2, RDFFormat.TRIG.getLang()); os.close(); // check that the model obtained from resulting graph collection is // a representation of the original converted model. Assert.assertTrue(model.listStatements().hasNext() && model2.listStatements().hasNext()); Assert.assertTrue(model.isIsomorphicWith(model2)); } }