package gr.ntua.ivml.mint.rdf.edm;
import gr.ntua.ivml.mint.rdf.edm.types.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.datatype.XMLGregorianCalendar;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.DC;
import com.hp.hpl.jena.vocabulary.DCTerms;
public class EDM2RDF {
InputStream inputXML;
Properties props;
int physicalThingCnt,aggregationCnt,proxyCnt,eventCnt;
public static void main(String[] args)
{
try {
String path="/media/sda1/Documents/Education/NTUA/Projects/AceMedia/Reasoning/EDMXML2RDF2/";
//Nikos Tests
// File inputFile=new File("XMLs/EDMSchemaV9/MonaLisaLouvreObj3.xml");
// File outputFile=new File("RDFs/EDMSchemaV9/MonaLisaLouvreObj3.rdf");
// File inputFile=new File("XMLs/EDMSchemaV9/MonaLisaLouvreEventRel3.xml");
// File outputFile=new File("RDFs/EDMSchemaV9/MonaLisaLouvreEventRel3.rdf");
// File inputFile=new File(path+"XMLs/EDMSchemaV9/ToTestURI.xml");
// File outputFile=new File(path+"RDFs/EDMSchemaV9/ToTestURI.rdf");
// File inputFile=new File(path+"XMLs/EDMSchemaV9/ToTestString.xml");
// File outputFile=new File(path+"RDFs/EDMSchemaV9/ToTestString.rdf");
File inputFile=new File(path+"XMLs/EDMSchemaV9/Output_1.xml");
File outputFile=new File(path+"RDFs/EDMSchemaV9/Output_1.rdf");
FileInputStream inputXML = new FileInputStream(inputFile);
FileOutputStream outputRDFJena = new FileOutputStream(outputFile);
EDM2RDF converter=new EDM2RDF(inputXML);
ByteArrayOutputStream out = converter.convertToRDF();
out.writeTo(outputRDFJena);
System.out.println(inputFile.getName() + " converted to " + outputFile.getName());
} catch(Exception e) {
e.printStackTrace();
}
}
public EDM2RDF(InputStream inputXML) {
this.inputXML=inputXML;
}
private void storeProperties() {
props.setProperty("PhysicalThing", String.valueOf(physicalThingCnt));
props.setProperty("Aggregation", String.valueOf(aggregationCnt));
props.setProperty("Proxy", String.valueOf(proxyCnt));
props.setProperty("Event", String.valueOf(eventCnt));
FileOutputStream out;
try {
out = new FileOutputStream("Properties");
props.store(out, "");
//props.load(in);
out.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
private void loadProperties() {
try {
props = new Properties();
FileInputStream in = new FileInputStream("Properties");
props.load(in);
in.close();
physicalThingCnt=Integer.parseInt(props.getProperty("PhysicalThing"));
aggregationCnt=Integer.parseInt(props.getProperty("Aggregation"));
proxyCnt=Integer.parseInt(props.getProperty("Proxy"));
eventCnt=Integer.parseInt(props.getProperty("Event"));
} catch (Exception e1) {
// TODO Auto-generated catch block
createProperties();
}
}
private void createProperties() {
props = new Properties();
props.setProperty("PhysicalThing", "1");
props.setProperty("Aggregation", "1");
props.setProperty("Proxy", "1");
props.setProperty("Event", "1");
physicalThingCnt=1;
aggregationCnt=1;
proxyCnt=1;
eventCnt=1;
FileOutputStream out;
try {
out = new FileOutputStream("Properties");
props.store(out, "");
//props.load(in);
out.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
private String urlEncoding(String urlStr, String element) throws Exception
{
boolean exception= false;
try {
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), null);
return uri.toASCIIString();
} catch (Exception e) {
e.printStackTrace();
exception = true;
}
if(exception)throw new Exception("Invalid value '"+urlStr+"' for element "+element+". Check your mapping or the data entered. A valid URL is required.");
return urlStr;
}
public ByteArrayOutputStream convertToRDF() throws Exception
{
loadProperties();
JAXBContext jc = null;
Unmarshaller u = null;
AggregationType aggregation=null;
AggregationWrapType aggregationWrap=null;
try {
jc = JAXBContext.newInstance("gr.ntua.ivml.mint.rdf.edm.types");
} catch (JAXBException e) {
e.printStackTrace();
}
try {
u = jc.createUnmarshaller();
} catch (JAXBException e) {
e.printStackTrace();
}
try {
JAXBElement jaxBElement=(JAXBElement)u.unmarshal(inputXML);
// aggregation = (AggregationType)jaxBElement.getValue();
aggregationWrap= (AggregationWrapType)jaxBElement.getValue();
} catch (JAXBException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//The ontology URIs
String baseURI="http://baseURI/";
String ore="http://www.openarchives.org/ore/terms/";
String ese="http://www.europeana.eu/schemas/ese/";
String skos="http://www.w3.org/2004/02/skos/core#";
String edm="http://www.europeana.eu/schemas/edm/";
//Create the model
Model model = ModelFactory.createDefaultModel();
model.setNsPrefix( "baseURI", baseURI );
model.setNsPrefix( "ore", ore );
model.setNsPrefix( "ese", ese );
model.setNsPrefix( "skos", skos );
model.setNsPrefix( "ens", edm );
model.setNsPrefix( "dcterms", DCTerms.getURI() );
for(Iterator<AggregationType> aggrIt = aggregationWrap.getAggregation().iterator(); aggrIt.hasNext();)
{
aggregation = aggrIt.next();
//*********************************************************************************************************
//Create the physical thing
PhysicalThingType phyThing=aggregation.getAggregatedCHO();
Resource phyThingRes;
String phyThingResource;
if(phyThing.getIdentifier()!=null)
{
if(phyThing.getIdentifier().getResType().equals("HTTP URI"))
{
phyThingResource=phyThing.getIdentifier().getValue();
phyThingRes=model.createResource(urlEncoding(phyThingResource,"Aggregated CHO > identifier"));
}
else
{
phyThingResource="PhysicalThing/"+phyThing.getIdentifier().getResType().replace(" ","")+"/"+phyThing.getIdentifier().getValue().replace(" ","")+physicalThingCnt++;
// phyThingRes=model.createResource(baseURI+phyThingResource);
URI uri = new URI(baseURI+phyThingResource);
phyThingRes=model.createResource(uri.toASCIIString());
}
}else
{
phyThingResource="PhysicalThing/ID/"+physicalThingCnt++;
phyThingRes=model.createResource(baseURI+phyThingResource);
}
phyThingRes.addProperty(RDF.type,model.createResource(edm+"PhysicalThing"));
if(phyThing.getType()!=null)
{
phyThingRes.addProperty(RDF.type,phyThing.getType().getValue(),phyThing.getType().getLang());
}
List<String> webResources=phyThing.getRealizes();
for(Iterator<String> it=webResources.iterator();it.hasNext();)
{
phyThingRes.addProperty(model.createProperty(edm,"realizes"), model.createResource(urlEncoding(it.next(), "Aggregated CHO > realizes")));
//TODO Are these URIs going to be mapped as WebResources?In ESE to EDM they are not.
}
//*********************************************************************************************************
//Create the aggregation
Resource aggrRes=model.createResource(baseURI+"Aggregation/"+"AggregationRes"+aggregationCnt++);
aggrRes.addProperty(RDF.type, model.createResource(ore+"Aggregation"));
aggrRes.addProperty(model.createProperty(edm,"aggregatedCHO"),phyThingRes);
List<SimpleLiteral> creators=aggregation.getCreator();
for(Iterator<SimpleLiteral> it=creators.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
aggrRes.addProperty(DC.creator,temp.getValue(),temp.getLang());
}
WebWrapperType webWrapper=aggregation.getWebResources();
aggrRes.addProperty(model.createProperty(edm,"landingPage"),model.createResource(urlEncoding(webWrapper.getLandingPage(),"WebResources > landingPage")));
List<String> views=webWrapper.getHasView();
for(Iterator<String> it=views.iterator();it.hasNext();)
{
String view=it.next();
if(!view.equals(""))
{
aggrRes.addProperty(model.createProperty(edm,"hasView"),model.createResource(urlEncoding(view,"WebResources > hasView")));
}
}
//*********************************************************************************************************
//Create the proxy
ProxyType proxy=aggregation.getProxy();
Resource proxyRes=model.createResource(baseURI+"Proxy/"+"ProxyRes"+proxyCnt++);
proxyRes.addProperty(RDF.type,model.createResource(ore+"Proxy"));
//*********************************************************************************************************
//Add Current Location
List<PlaceType> currentLocation=phyThing.getCurrentLocation();
for(Iterator<PlaceType> it=currentLocation.iterator();it.hasNext();)
{
PlaceType place=it.next();
proxyRes.addProperty(model.createProperty(edm,"currentLocation"),place.getPlace().getValue(),place.getPlace().getLang());
List<String> placeUri=place.getPlaceResource();
for(Iterator<String> it1=placeUri.iterator();it1.hasNext();)
{
//TODO this time we map the URI to Place
Resource placeRes=model.createResource(urlEncoding(it1.next(),"Aggregated CHO > currentLocation > placeResource"));
placeRes.addProperty(RDF.type,model.createResource(edm+"Place"));
proxyRes.addProperty(model.createProperty(edm,"currentLocation"),placeRes);
}
}
//*********************************************************************************************************
//Add Europeana Metadata
EuropeanaType europeana=proxy.getEuropeana();
//1-Country
proxyRes.addProperty(model.createProperty(edm,"country"),europeana.getCountry().getValue(),europeana.getCountry().getLang());
//2-DataProvider
if(europeana.getDataProvider()!=null)
proxyRes.addProperty(model.createProperty(edm,"dataProvider"),europeana.getDataProvider());
//3-HasMet
List<SimpleLiteral> hasMet=europeana.getHasMet();
for(Iterator<SimpleLiteral> it=hasMet.iterator();it.hasNext();)
{
SimpleLiteral lit=it.next();
proxyRes.addProperty(model.createProperty(edm,"hasMet"),lit.getValue(),lit.getLang());
}
//4-HasType
List<SimpleLiteral> hasType=europeana.getHasType();
for(Iterator<SimpleLiteral> it=hasType.iterator();it.hasNext();)
{
SimpleLiteral lit=it.next();
proxyRes.addProperty(model.createProperty(edm,"hasType"),lit.getValue(),lit.getLang());
}
//5-Language
proxyRes.addProperty(model.createProperty(edm,"language"),europeana.getLanguage().getValue(),europeana.getLanguage().getLang());
//6-Object
if(europeana.getObject()!=null)
//TODO is this a WebResource???
proxyRes.addProperty(model.createProperty(edm,"object"),model.createResource(urlEncoding(europeana.getObject(),"Europeana > object")));
//7-Provider
proxyRes.addProperty(model.createProperty(edm,"provider"),europeana.getProvider());
//8-Rights
if(europeana.getRights()!=null)
//TODO is this a WebResource?
proxyRes.addProperty(model.createProperty(edm,"rights"),model.createResource(urlEncoding(europeana.getRights(),"Europeana > rights")));
//9-Type
proxyRes.addProperty(model.createProperty(edm,"type"),europeana.getType().value());
//10-Unstored
List<String> unstored=europeana.getUnstored();
for(Iterator<String> it=unstored.iterator();it.hasNext();)
{
proxyRes.addProperty(model.createProperty(edm,"unstored"),it.next());
}
//11-Uri
if(europeana.getUri()!=null)
{
proxyRes.addProperty(model.createProperty(edm,"uri"),europeana.getUri().getValue(),europeana.getUri().getLang());
}
//12-User Tag
List<SimpleLiteral> userTag=europeana.getUserTag();
for(Iterator<SimpleLiteral> it=userTag.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(model.createProperty(edm,"userTag"),temp.getValue(),temp.getLang());
}
//13-Year
List<XMLGregorianCalendar> year=europeana.getYear();
for(Iterator<XMLGregorianCalendar> it=year.iterator();it.hasNext();)
{
XMLGregorianCalendar date = it.next();
if(date == null) throw new Exception("Invalid date for element Europeana > Year. Correct date format is YYYY-mm-dd.");
else proxyRes.addProperty(model.createProperty(edm,"year"),date.toXMLFormat());
}
//*********************************************************************************************************
//Add DC Metadata
if(proxy.getDC()!=null)
{
DCType dc=proxy.getDC();
//1-Contributor
List<SimpleLiteral> contributors=dc.getContributor();
for(Iterator<SimpleLiteral> it=contributors.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.contributor,temp.getValue(),temp.getLang() );
}
//2-Coverage
List<SimpleLiteral> coverage=dc.getCoverage();
for(Iterator<SimpleLiteral> it=coverage.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.coverage,temp.getValue(),temp.getLang() );
}
//3-Creator
if(dc.getCreator()!=null)
proxyRes.addProperty(DC.creator,dc.getCreator().getValue(),dc.getCreator().getLang());
//4-Date
List<SimpleLiteral> date=dc.getDate();
for(Iterator<SimpleLiteral> it=date.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.date,temp.getValue(),temp.getLang());
}
//5-Description
List<SimpleLiteral> description=dc.getDescription();
for(Iterator<SimpleLiteral> it=description.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.description,temp.getValue(),temp.getLang());
}
//6-Format
List<SimpleLiteral> format=dc.getFormat();
for(Iterator<SimpleLiteral> it=format.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.format,temp.getValue(),temp.getLang());
}
//7-Identifier
List<SimpleLiteral> identifier=dc.getIdentifier();
for(Iterator<SimpleLiteral> it=identifier.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.identifier,temp.getValue(),temp.getLang());
}
//8-Language
List<SimpleLiteral> dcLang=dc.getLanguage();
for(Iterator<SimpleLiteral> it=dcLang.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.language,temp.getValue(),temp.getLang());
}
//9-Publisher
List<SimpleLiteral> publisher=dc.getPublisher();
for(Iterator<SimpleLiteral> it=publisher.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.publisher,temp.getValue(),temp.getLang());
}
//10-Relation
List<SimpleLiteral> relation=dc.getRelation();
for(Iterator<SimpleLiteral> it=relation.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.relation,temp.getValue(),temp.getLang());
}
//11-Rights
List<SimpleLiteral> dcrights=dc.getRights();
for(Iterator<SimpleLiteral> it=dcrights.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.rights,temp.getValue(),temp.getLang());
}
//12-Source
List<SimpleLiteral> source=dc.getSource();
for(Iterator<SimpleLiteral> it=source.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.source,temp.getValue(),temp.getLang());
}
//13-Subject
List<SimpleLiteral> subject=dc.getSubject();
for(Iterator<SimpleLiteral> it=subject.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.subject,temp.getValue(),temp.getLang());
}
//14-Title
List<SimpleLiteral> title=dc.getTitle();
for(Iterator<SimpleLiteral> it=title.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.title,temp.getValue(),temp.getLang());
}
//15-Type
List<SimpleLiteral> type=dc.getType();
for(Iterator<SimpleLiteral> it=type.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DC.type,temp.getValue(),temp.getLang());
}
}
//*********************************************************************************************************
//Add DCTerms Metadata
if(proxy.getDCTerms()!=null)
{
DCTermsType dcTerms=proxy.getDCTerms();
//1-Alternative
List<SimpleLiteral> altTitles=dcTerms.getAlternative();
for(Iterator<SimpleLiteral> it=altTitles.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.alternative,temp.getValue(),temp.getLang() );
}
//2-ConformsTo
List<SimpleLiteral> conformsTo=dcTerms.getConformsTo();
for(Iterator<SimpleLiteral> it=conformsTo.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.conformsTo,temp.getValue(),temp.getLang() );
}
//3-Created
List<SimpleLiteral> created=dcTerms.getCreated();
for(Iterator<SimpleLiteral> it=created.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.created,temp.getValue(),temp.getLang() );
}
//4-Extent
List<SimpleLiteral> extent=dcTerms.getExtent();
for(Iterator<SimpleLiteral> it=extent.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.extent,temp.getValue(),temp.getLang());
}
//5-HasFormat
List<SimpleLiteral> hasFormat=dcTerms.getHasFormat();
for(Iterator<SimpleLiteral> it=hasFormat.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.hasFormat,temp.getValue(),temp.getLang());
}
//6-HasVersion
List<SimpleLiteral> hasVersion=dcTerms.getHasVersion();
for(Iterator<SimpleLiteral> it=hasVersion.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.hasVersion,temp.getValue(),temp.getLang());
}
//7-IsFormatOf
List<SimpleLiteral> isFormat=dcTerms.getIsFormatOf();
for(Iterator<SimpleLiteral> it=isFormat.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.isFormatOf,temp.getValue(),temp.getLang());
}
//8-IsReferencedBy
List<SimpleLiteral> isReferencedBy=dcTerms.getIsReferencedBy();
for(Iterator<SimpleLiteral> it=isReferencedBy.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.isReferencedBy,temp.getValue(),temp.getLang());
}
//9-IsReplacedBy
List<SimpleLiteral> isReplacedBy=dcTerms.getIsReplacedBy();
for(Iterator<SimpleLiteral> it=isReplacedBy.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.isReplacedBy,temp.getValue(),temp.getLang());
}
//10-IsRequiredBy
List<SimpleLiteral> isRequiredBy=dcTerms.getIsRequiredBy();
for(Iterator<SimpleLiteral> it=isRequiredBy.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.isRequiredBy,temp.getValue(),temp.getLang());
}
//11-Issued
List<SimpleLiteral> issued=dcTerms.getIssued();
for(Iterator<SimpleLiteral> it=issued.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.issued,temp.getValue(),temp.getLang());
}
//12-IsVersionOf
List<SimpleLiteral> isVersionOf=dcTerms.getIsVersionOf();
for(Iterator<SimpleLiteral> it=isVersionOf.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.isVersionOf,temp.getValue(),temp.getLang());
}
//13-Medium
List<SimpleLiteral> medium=dcTerms.getMedium();
for(Iterator<SimpleLiteral> it=medium.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.medium,temp.getValue(),temp.getLang());
}
//14-Provenance
List<SimpleLiteral> provenance=dcTerms.getProvenance();
for(Iterator<SimpleLiteral> it=provenance.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.provenance,temp.getValue(),temp.getLang());
}
//15-References
List<SimpleLiteral> references=dcTerms.getReferences();
for(Iterator<SimpleLiteral> it=references.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.references,temp.getValue(),temp.getLang());
}
//16-Replaces
List<SimpleLiteral> replaces=dcTerms.getReplaces();
for(Iterator<SimpleLiteral> it=replaces.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.replaces,temp.getValue(),temp.getLang());
}
//17-Requires
List<SimpleLiteral> requires=dcTerms.getRequires();
for(Iterator<SimpleLiteral> it=requires.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.requires,temp.getValue(),temp.getLang());
}
//18-Spatial
List<SimpleLiteral> spatial=dcTerms.getSpatial();
for(Iterator<SimpleLiteral> it=spatial.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.spatial,temp.getValue(),temp.getLang());
}
//19-Table of Contents
List<SimpleLiteral> tableOfContents=dcTerms.getTableOfContents();
for(Iterator<SimpleLiteral> it=tableOfContents.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.tableOfContents,temp.getValue(),temp.getLang());
}
//20-Temporal
List<SimpleLiteral> temporal=dcTerms.getTemporal();
for(Iterator<SimpleLiteral> it=temporal.iterator();it.hasNext();)
{
SimpleLiteral temp=it.next();
proxyRes.addProperty(DCTerms.temporal,temp.getValue(),temp.getLang());
}
}
//*********************************************************************************************************
EventWrapType eventWrap=proxy.getEventWrap();
if(eventWrap!=null)
{
List<EventType> events=eventWrap.getWasPresentAt();
for(Iterator<EventType> it=events.iterator();it.hasNext();)
{
//Event
Resource eventRes=model.createResource(baseURI+"Event/"+"EventRes"+eventCnt++);
eventRes.addProperty(RDF.type, model.createResource(edm+"Event"));
EventType event=it.next();
//Place
PlaceType place=event.getHappenedAt();
eventRes.addProperty(model.createProperty(edm,"happenedAt"),place.getPlace().getValue(),place.getPlace().getLang());
List<String> placeUri=place.getPlaceResource();
for(Iterator<String> it1=placeUri.iterator();it1.hasNext();)
{
//TODO this thime we map the URI to Place
Resource placeRes=model.createResource(urlEncoding(it1.next(),"Events > wasPresentAt > happenedAt > placeResource"));
placeRes.addProperty(RDF.type,model.createResource(edm+"Place"));
eventRes.addProperty(model.createProperty(edm,"happenedAt"),placeRes);
}
//TimeSpan
TimeSpanType timeSpan=event.getOccuredAt();
if(timeSpan.getStartDate()!=null)eventRes.addProperty(model.createProperty(edm,"occurredAt"), timeSpan.getStartDate().toXMLFormat());
if(timeSpan.getEndDate()!=null)eventRes.addProperty(model.createProperty(edm,"occurredAt"), timeSpan.getEndDate().toXMLFormat());
List<String> timSpanRes=timeSpan.getTimeSpanResource();
for(Iterator<String> it1=timSpanRes.iterator();it1.hasNext();)
{
Resource timeSpanRes=model.createResource(urlEncoding(it1.next(),"Events > wasPresentAt > occuredAt > timeSpanResource"));
timeSpanRes.addProperty(RDF.type, model.createResource(edm+"TimeSpan"));
eventRes.addProperty(model.createProperty(edm,"occurredAt"), timeSpanRes);
}
//Agent
List<AgentType> agents=event.getAgentWasPresentAt();
for(Iterator<AgentType> it1=agents.iterator();it1.hasNext();)
{
AgentType tempAgent=it1.next();
// Literal agentLit=model.createLiteral(tempAgent.getAgentName().getValue(),tempAgent.getAgentName().getLang());
// agentLit.asResource().addProperty(model.createProperty(edm,"wasPresentAt"),eventRes);
List<String> agentsList=tempAgent.getAgentResource();
for(Iterator<String> it2=agentsList.iterator();it2.hasNext();)
{
//TODO This time we map URI to agent
Resource agentRes=model.createResource(urlEncoding(it2.next(),"Events > wasPresentAt > agentWasPresentAt > agentResource"));
agentRes.addProperty(RDF.type, model.createResource(edm+"Agent"));
agentRes.addProperty(model.createProperty(edm,"wasPresentAt"),eventRes);
List<SimpleLiteral> label=tempAgent.getSkosLabel();
for(Iterator<SimpleLiteral> it3=label.iterator();it3.hasNext();)
{
SimpleLiteral temp=it3.next();
agentRes.addProperty(model.createProperty(skos,"label"),temp.getValue(),temp.getLang());
}
}
}
//InfromationResource
List<InformationResourceType> infResource=event.getInfResWasPresentAt();
for(Iterator<InformationResourceType> it1=infResource.iterator();it1.hasNext();)
{
InformationResourceType tempInfRes=it1.next();
// Literal infResLit=model.createLiteral(tempInfRes.getDescription().getValue(),tempInfRes.getDescription().getLang());
// infResLit.asResource().addProperty(model.createProperty(edm,"wasPresentAt"),eventRes);
//TODO this time we map the given URI to information resource
Resource infResRes=model.createResource(urlEncoding(tempInfRes.getResource(),"Events > wasPresentAt > infResWasPresentAt > resource"));
infResRes.addProperty(RDF.type, model.createResource(edm+"InformationResource"));
infResRes.addProperty(model.createProperty(edm,"wasPresentAt"),eventRes);
}
//PhysicalThing
List<PhysicalThingType> physThing=event.getPhysThWasPresentAt();
for(Iterator<PhysicalThingType> it1=physThing.iterator();it1.hasNext();)
{
PhysicalThingType tempPhyThing=it1.next();
String phyThingString;
Resource phyThingRes1;
if(phyThing.getIdentifier()!=null)
{
if(phyThing.getIdentifier().getResType().equals("HTTP URI"))
{
phyThingString=phyThing.getIdentifier().getValue();
phyThingRes1=model.createResource(urlEncoding(phyThingString,"Event > wasPresentAt > physThWasPresentAt > identifier"));
}
else
{
phyThingString="PhysicalThing/"+phyThing.getIdentifier().getResType()+"/"+phyThing.getIdentifier().getValue()+physicalThingCnt++;
URI uri = new URI(baseURI+phyThingString);
phyThingRes1=model.createResource(uri.toASCIIString());
// phyThingRes1=model.createResource(baseURI+phyThingString);
}
}else
{
phyThingString="PhysicalThing/ID/"+physicalThingCnt++;
phyThingRes1=model.createResource(baseURI+phyThingResource);
}
phyThingRes1.addProperty(RDF.type,model.createResource(edm+"PhysicalThing"));
//TODO Is this necessary
if(tempPhyThing.getType()!=null)
{
phyThingRes1.addProperty(RDF.type,tempPhyThing.getType().getLang(),tempPhyThing.getType().getValue());
}
List<String> webResources2=tempPhyThing.getRealizes();
for(Iterator<String> it2=webResources2.iterator();it2.hasNext();)
{
//TODO Are these URIs going to be mapped as WebResources?In ESE to EDM they are not.
phyThingRes1.addProperty(model.createProperty(edm,"realizes"), model.createResource(urlEncoding(it2.next(),"Event > wasPresentAt > physThWasPresentAt > realizes")));
}
//TODO Current location is added to proxy but what about this case
// List<PlaceType> currentLocation1 = tempPhyThing.getCurrentLocation();
phyThingRes1.asResource().addProperty(model.createProperty(edm,"wasPresentAt"),eventRes);
}
//Add to Proxy
proxyRes.addProperty(model.createProperty(edm,"wasPresentAt"),eventRes);
}
}
proxyRes.addProperty(model.createProperty(edm,"proxyFor"),phyThingRes);
proxyRes.addProperty(model.createProperty(edm,"proxyIn"),aggrRes);
RelatedProxiesWrapType relatProxiesWrap=proxy.getRelatedWrap();
if(relatProxiesWrap!=null)
{
List<RelatedProxiesType> relatedProxies=relatProxiesWrap.getRelatedProxies();
for(Iterator<RelatedProxiesType> it=relatedProxies.iterator();it.hasNext();)
{
RelatedProxiesType temp=it.next();
String relType=temp.getRelationType();
Resource proxy2Res=model.createResource(urlEncoding(temp.getProxyUri(),"Related > relatedProxies > ProxyUri"));
//TODO This is not necessary however we map it to proxy just to demonstrate the example
proxy2Res.addProperty(RDF.type, model.createResource(ore+"Proxy"));
if(relType.equals("hasPart"))proxyRes.addProperty(DCTerms.hasPart,proxy2Res);
else proxyRes.addProperty(model.createProperty(edm,relType),proxy2Res);
}
}
}
//*********************************************************************************************************
storeProperties();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
model.write(outStream,"RDF/XML");
return outStream;
}
}