Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not a valid (absolute) URI Exception when trying to save to File #10

Open
frostyandy2k opened this issue Apr 29, 2015 · 5 comments
Open

Comments

@frostyandy2k
Copy link

Hello,

when trying to save the resource I encounter following exception:

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid (absolute) URI: my.rdf#1
at org.openrdf.model.impl.URIImpl.setURIString(URIImpl.java:79)
at org.openrdf.model.impl.URIImpl.<init>(URIImpl.java:68)
at org.eclipselabs.emftriple.sesame.map.Extensions.toURI(Extensions.java:40)
at org.eclipselabs.emftriple.sesame.map.Extensions.toURI(Extensions.java:34)
at org.eclipselabs.emftriple.sesame.map.Serializer.createTypeStatement(Serializer.java:76)
at org.eclipselabs.emftriple.sesame.map.Serializer.to(Serializer.java:51)
at org.eclipselabs.emftriple.sesame.map.Serializer$2.apply(Serializer.java:39)
at org.eclipselabs.emftriple.sesame.map.Serializer$2.apply(Serializer.java:1)
at org.eclipse.xtext.xbase.lib.IteratorExtensions.forEach(IteratorExtensions.java:362)
at org.eclipse.xtext.xbase.lib.IterableExtensions.forEach(IterableExtensions.java:331)
at org.eclipselabs.emftriple.sesame.map.Serializer.to(Serializer.java:42)
at org.eclipselabs.emftriple.sesame.map.EObjectMapper.to(EObjectMapper.java:37)
at org.eclipselabs.emftriple.sesame.map.EObjectMapper.to(EObjectMapper.java:19)
at org.eclipselabs.emftriple.sesame.resource.RDFResource.doSave(RDFResource.java:60)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:1430)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:999)
at org.eclipselabs.emftriple.example.Main.test(Main.java:97)

The model is the one from:

emftriple/examples/org.eclipselabs.emftriple.examples.basic/model/model.ecore

This is my code (copied from the git README):

Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new RDFResourceFactory());
ResourceSet resourceSet = new ResourceSetImpl();
Resource r = resourceSet.createResource(URI.createURI("my.rdf"));
Parent b = ModelFactory.eINSTANCE.createParent();
b.setId("1");
b.setName("Parent1");
r.getContents().add(b);
r.save(null);

The import statements are:

package org.eclipselabs.emftriple.example;

import java.io.IOException;

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.XMIResource;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipselabs.emftriple.example.model.Child;
import org.eclipselabs.emftriple.example.model.ModelFactory;
import org.eclipselabs.emftriple.example.model.ModelPackage;
import org.eclipselabs.emftriple.example.model.Parent;
import org.eclipselabs.emftriple.sesame.handlers.RepositoryHandler;
import org.eclipselabs.emftriple.sesame.resource.RDFResourceFactory;
import org.eclipselabs.emftriple.sesame.resource.TTLResource;
import org.eclipselabs.emftriple.sesame.resource.TTLResourceFactory;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.memory.MemoryStore;

I tried with different URI formats and absolute paths, but I seem to have a problem when saving to a file.

@frostyandy2k
Copy link
Author

I tried on a different machine and the XMI save works. Unfortunately i still get the exact error when using an RDF ressource.

import org.eclipselabs.emftriple.sesame.resource.RDFResource;
Resource r = new RDFResource(URI.createURI("my.rdf"));

@frostyandy2k
Copy link
Author

It works !!

It seems the other computer(Mac OSX 10.9) had a problem AND you have to specify the full absolute URI:

    Resource r = new RDFResource(URI.createURI("file:/D:\\Program Files\\eclipseEmfTriple\\workspace\\org.eclipselabs.emftriple.examples.basic\\my.rdf"));

    Book b = ModelFactory.eINSTANCE.createBook();
    b.setTitle("The Book");
    b.getTags().add("SciFI");
    b.getTags().add("Fantasy");

    r.getContents().add(b);
    r.save(null);

Too bad the URI is not normalized automatically.

Could you maybe update the README of the project?

@frostyandy2k
Copy link
Author

Fixed the Mac OS X issue. I specified a wrong absolute URI, forgot a second "/".

This works now:

    String file = "file://Users/myusername/sources/emftriple/examples/org.eclipselabs.emftriple.examples.basic/model/Parent.ttl";
    Resource resRDF = new TTLResource(URI.createURI(file));

@ghillairet
Copy link
Owner

Maybe you should try with URI.createFileURI instead.

@frostyandy2k
Copy link
Author

Does not work, because an absolute URI is needed and URI.createFileURI() does not do that.

I'm now using convertToFileURL("model/entitysupermodel.ecore") from http://stackoverflow.com/questions/3631623/convert-url-to-absolutepath

Could you change the README such that it is clear one needs to input an absolute URI? I spent some hours debugging..

Anyways, awesome work with EMFTriple!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants