Package org.deri.eurostat.dsdparser

Source Code of org.deri.eurostat.dsdparser.DSDParser

package org.deri.eurostat.dsdparser;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;

import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.Options;
import org.deri.eurostat.Main;
import org.deri.eurostat.datamodel.DataStoreModel;
import org.deri.eurostat.elements.*;

import org.deri.eurostat.elements.*;
import org.deri.eurostat.toc.DiffToC;
import org.openrdf.http.webclient.repository.modify.add.AddController;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;

/**
*
* @author Aftab Iqbal
*
*/

/*
* TODO: Slovenia in french language is being written in different characters than represented in the DSD XML file. Check
* Multi-Language issue in jena
*/
public class DSDParser {

    private Document xmlDocument;
    private XPath xPath; 
    public static String xmlFilePath = "";
    public static String outputFilePath = "";
    public static String serialization = "RDF/XML";
    public static String fileExt = ".rdf";
  public static String sdmx_codeFilePath = "";
  static DataStoreModel dsModel;
  public final String base_uri = "http://purl.org/linked-data/sdmx#";
  String fileName = "";
  String baseURI = "http://eurostat.linked-statistics.org/";
  String obsValue = "";
  String freq = "";
  String timePeriod = "";
    ArrayList<Code> lstCode = new ArrayList<Code>();
    ArrayList<Concept> lstConcepts = new ArrayList<Concept>();
    ArrayList<CodeList> lstCodeLists = new ArrayList<CodeList>();
    ArrayList<Dimension> lstDimensions = new ArrayList<Dimension>();
    ArrayList<Dimension> lstTimeDimensions = new ArrayList<Dimension>();
    ArrayList<Attribute> lstAttributes = new ArrayList<Attribute>();
    ArrayList<Measure> lstMeasures = new ArrayList<Measure>();
 
 
  public void addSDMXCodeList()
  {
    dsModel = new DataStoreModel();
    dsModel.addRDFtoDataModel(sdmx_codeFilePath, base_uri, "TURTLE");
  }

  public String getCodeList(String codeList)
  {
    return dsModel.returnCodeListURI(codeList);
  }

  public void initObjects(InputStream in){       
        try {
          outputFilePath = Main.dsdDirPath;
            xmlDocument = DocumentBuilderFactory.
      newInstance().newDocumentBuilder().
      parse(in);           
            xPath =  XPathFactory.newInstance().
      newXPath();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (SAXException ex) {
            ex.printStackTrace();
        } catch (ParserConfigurationException ex) {
            ex.printStackTrace();
        }      
    }
 
    public void initObjects(){       
        try {
            xmlDocument = DocumentBuilderFactory.
      newInstance().newDocumentBuilder().
      parse(xmlFilePath);           
            xPath =  XPathFactory.newInstance().
      newXPath();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (SAXException ex) {
            ex.printStackTrace();
        } catch (ParserConfigurationException ex) {
            ex.printStackTrace();
        }      
    }

  public void parseFile()
  {
   
    addSDMXCodeList();
    Element element = xmlDocument.getDocumentElement();
    NodeList nl;
    getFileName(element);
   
    // parse CodeLists from DSD
    nl = element.getElementsByTagName("CodeLists");
   
    if(nl != null && nl.getLength() > 0)
    {
      for(int i = 0 ; i < nl.getLength();i++)
      {
        Element ele = (Element)nl.item(i);
       
        getAllCodeLists(ele);
       
      }
    }
   
    // parse KeyFamilies from DSD
    nl = element.getElementsByTagName("KeyFamilies");
    if(nl != null && nl.getLength() > 0)
    {
      for(int i = 0 ; i < nl.getLength();i++)
      {
        Element ele = (Element)nl.item(i);
       
        getKeyFamilies(ele);
       
      }
    }
   
    // parse Concepts from DSD
    nl = element.getElementsByTagName("Concepts");
    if(nl != null && nl.getLength() > 0)
    {
      for(int i = 0 ; i < nl.getLength();i++)
      {
        Element ele = (Element)nl.item(i);
       
        getConcepts(ele);
       
      }
    }
   
    produceRDF();
  }

  public void getConcepts(Element element)
  {
    NodeList nl = element.getElementsByTagName("structure:ConceptScheme");
    if(nl != null && nl.getLength() > 0)
    {
      for(int i = 0 ; i < nl.getLength();i++)
      {
        Element key = (Element)nl.item(i);
        getConceptInfo(key);
      }
    }
  }
 
  public void getConceptInfo(Element ele)
  {
    HashMap<String, String> hshName = new HashMap<String, String>();
   
    NodeList concept = ele.getElementsByTagName("structure:Concept");
   
    if(concept != null && concept.getLength() > 0)
    {
      for(int i = 0 ; i < concept.getLength();i++)
      {
        hshName = new HashMap<String, String>();
        Element con = (Element)concept.item(i);
        NodeList lst = con.getElementsByTagName("structure:Name");
       
        for(int j = 0 ; j < lst.getLength() ; j++)
        {
          Element desc = (Element)lst.item(j);
          hshName.put(desc.getAttribute("xml:lang"), desc.getTextContent());
        }
       
        if(!con.getAttribute("id").equalsIgnoreCase("obs_value") & !con.getAttribute("id").equalsIgnoreCase("freq") & !con.getAttribute("id").equalsIgnoreCase("time_period"))
        {
          Concept obj = new Concept(con.getAttribute("id"),hshName);
          lstConcepts.add(obj);
        }
       
      }
    }
  }
 
  public void getFileName(Element element)
  {
    NodeList nl = element.getElementsByTagName("Header");
    Element ele = (Element)nl.item(0);
    NodeList name = ele.getElementsByTagName("ID");
   
    fileName = name.item(0).getTextContent();

  }
 
  public void getKeyFamilies(Element ele)
  {
    NodeList nl = ele.getElementsByTagName("structure:KeyFamily");
    if(nl != null && nl.getLength() > 0)
    {
      for(int i = 0 ; i < nl.getLength();i++)
      {
        Element key = (Element)nl.item(i);
        getKeyFamilyInfo(key);
      }
    }
  }
 
  public void getKeyFamilyInfo(Element key)
  {
    NodeList name = key.getElementsByTagName("structure:Name");
   
    getComponents(key);
  }
 
  public void getComponents(Element key)
  {
    NodeList name = key.getElementsByTagName("structure:Components");
   
    Element comp = (Element)name.item(0);

    // Dimension
    NodeList dimension = comp.getElementsByTagName("structure:Dimension");
    if(dimension != null && dimension.getLength() > 0)
    {

      for(int i = 0 ; i < dimension.getLength();i++)
      {
        Element dim = (Element)dimension.item(i);
        if(dim.getAttribute("conceptRef").equalsIgnoreCase("obs_value"))
          obsValue = "obsValue";
        else if(dim.getAttribute("conceptRef").equalsIgnoreCase("freq"))
          freq = "freq";
        else if(!dim.getAttribute("conceptRef").equalsIgnoreCase("time_format"))
        {
          Dimension obj = new Dimension(dim.getAttribute("conceptRef"),dim.getAttribute("conceptSchemeRef"),dim.getAttribute("codelist"), getType(dim));
          lstDimensions.add(obj);
        }
      }
    }

    // TimeDimension
    NodeList tDimension = comp.getElementsByTagName("structure:TimeDimension");
    if(tDimension != null && tDimension.getLength() > 0)
    {
      for(int i = 0 ; i < tDimension.getLength();i++)
      {
        Element measure = (Element)tDimension.item(i);
        if(measure.getAttribute("conceptRef").equalsIgnoreCase("obs_value"))
          obsValue = "obsValue";
        else if(measure.getAttribute("conceptRef").equalsIgnoreCase("time_period"))
          timePeriod = "timePeriod";
        else if(!measure.getAttribute("conceptRef").equalsIgnoreCase("time_format"))
        {
          Dimension obj = new Dimension(measure.getAttribute("conceptRef"),measure.getAttribute("conceptSchemeRef"),measure.getAttribute("codelist"), getType(measure));
          lstTimeDimensions.add(obj);
        }
      }
    }

    // PrimaryMeasure
    NodeList pMeasure = comp.getElementsByTagName("structure:PrimaryMeasure");
    if(pMeasure != null && pMeasure.getLength() > 0)
    {
      for(int i = 0 ; i < pMeasure.getLength();i++)
      {
        Element measure = (Element)pMeasure.item(i);
       
        if(measure.getAttribute("conceptRef").equalsIgnoreCase("obs_value"))
          obsValue = "obsValue";
        else if(!measure.getAttribute("conceptRef").equalsIgnoreCase("time_format"))
        {
          Measure obj = new Measure(measure.getAttribute("conceptRef"),measure.getAttribute("conceptSchemeRef"),measure.getAttribute("codelist"),getType(measure));
          lstMeasures.add(obj);
        }
      }
    }

    // Attribute
    NodeList attribute = comp.getElementsByTagName("structure:Attribute");
    if(attribute != null && attribute.getLength() > 0)
    {
      for(int i = 0 ; i < attribute.getLength();i++)
      {
        Element att = (Element)attribute.item(i);
       
        if(att.getAttribute("conceptRef").equalsIgnoreCase("obs_value"))
          obsValue = "obsValue";
        else if(!att.getAttribute("conceptRef").equalsIgnoreCase("time_format"))
        {
          Attribute obj = new Attribute(att.getAttribute("conceptRef"),att.getAttribute("conceptSchemeRef"),att.getAttribute("codelist"),"","", getType(att));
          lstAttributes.add(obj);
        }
      }
    }
   
  }
 
  public String getType(Element ele)
  {
    NodeList lstType = ele.getElementsByTagName("structure:TextFormat");
    if(lstType != null && lstType.getLength() > 0)
    {
      Element type = (Element) lstType.item(0);
      return type.getAttribute("textType");
    }
    else
      return "";
 
  }
 
  public void getAllCodeLists(Element ele)
  {
    NodeList nl = ele.getElementsByTagName("structure:CodeList");
   
    if(nl != null && nl.getLength() > 0)
    {
      for(int i = 0 ; i < nl.getLength();i++)
      {
        Element code = (Element)nl.item(i);
        getCodeListInfo(code);
      }
    }
  }
 
  public void getCodeListInfo(Element code)
  {
    HashMap<String, String> hshName = new HashMap<String, String>();
   
    NodeList name = code.getElementsByTagName("structure:Name");
    for(int j = 0 ; j < name.getLength() ; j++)
    {
      Element desc = (Element)name.item(j);
      hshName.put(desc.getAttribute("xml:lang"), desc.getTextContent());
    }
   
    getCodes(code);
   
    CodeList obj = new CodeList(code.getAttribute("id"),code.getAttribute("agencyID"),code.getAttribute("isFinal"),hshName,lstCode);
    lstCodeLists.add(obj);
   
  }
 
  public void getCodes(Element codes)
  {
    lstCode = new ArrayList<Code>();
   
   
    NodeList name = codes.getElementsByTagName("structure:Code");
   
    if(name != null && name.getLength() > 0)
    {
      for(int i = 0 ; i < name.getLength();i++)
      {
        HashMap<String, String> hshDescription = new HashMap<String, String>();
       
        Element ele = (Element)name.item(i);
       
        NodeList code = ele.getElementsByTagName("structure:Description");
       
        for(int j = 0 ; j < code.getLength() ; j++)
        {
          Element desc = (Element)code.item(j);
          hshDescription.put(desc.getAttribute("xml:lang"), desc.getTextContent());
        }
       
        Code obj = new Code(ele.getAttribute("value"),hshDescription);
        lstCode.add(obj);
      }
    }
   
  }
 
  public void produceRDF()
  {
    Model model = ParserUtil.getModelProperties();
    Resource root = model.createResource( baseURI + "dsd/" + fileName.substring(0,fileName.indexOf("_DSD")) );
   
    model.add(root,ParserUtil.type,ParserUtil.dsd).add(root,ParserUtil.notation,fileName);
   
    for(Dimension dim:lstDimensions)
    {
      Resource component_1 = model.createResource();
      model.add(root,ParserUtil.component,component_1);
      Property prop = model.createProperty(ParserUtil.property + (dim.getConceptRef().toLowerCase().equals("time_period") ? "time" : dim.getConceptRef().toLowerCase()));
      model.add(component_1,ParserUtil.dimension,prop);
      model.add(prop,ParserUtil.type,ParserUtil.dimensionProperty);
      model.add(prop,ParserUtil.type,ParserUtil.codedProperty);
      model.add(prop,ParserUtil.rdfsDomain,ParserUtil.observation);
     
      if(!dim.getCodeList().equals(""))
      {
        for(CodeList obj:lstCodeLists)
        {
          if(obj.getId().toString().equals(dim.getCodeList().toString()))
          {
            if(obj.getAgencyID().equals("SDMX"))
            {
              // re-use the URI from sdmx-code.ttl file
              String codeList = getCodeList(obj.getId());
              Property cList = model.createProperty(ParserUtil.sdmx_code + codeList);
              model.add(prop,ParserUtil.codeList,cList);
              model.add(prop,ParserUtil.rdfsRange,ParserUtil.skosConcept);
              Property cncpt = model.createProperty(ParserUtil.sdmx_concept + codeList);
              model.add(prop,ParserUtil.concept,cncpt);
            }
            else
            {
              Property cList = model.createProperty(ParserUtil.dicURI + obj.getId().substring(obj.getId().indexOf("_")+1).toLowerCase());
              model.add(prop,ParserUtil.codeList,cList);
              model.add(prop,ParserUtil.rdfsRange,ParserUtil.skosConcept);
              Property cncpt = model.createProperty(ParserUtil.concepts + (dim.getConceptRef().toLowerCase().equals("time_period") ? "time" : dim.getConceptRef().toLowerCase()));
              model.add(prop,ParserUtil.concept,cncpt);
            }
          }
        }
      }
      else
      {
        Property type = model.createProperty(ParserUtil.xsd + dim.getDataType().toLowerCase());
        model.add(prop,ParserUtil.rdfsRange,type);
      }
    }
   
    if(!obsValue.equals(""))
    {
      Resource component_1 = model.createResource();
      model.add(root,ParserUtil.component,component_1);
      Property prop = model.createProperty(ParserUtil.sdmx_measure + obsValue);
      model.add(component_1,ParserUtil.dimension,prop);
    }
   
    if(!freq.equals(""))
    {
      Resource component_1 = model.createResource();
      model.add(root,ParserUtil.component,component_1);
      Property prop = model.createProperty(ParserUtil.sdmx_dimension + freq);
      model.add(component_1,ParserUtil.dimension,prop);
    }
   
    if(!timePeriod.equals(""))
    {
      Resource component_1 = model.createResource();
      model.add(root,ParserUtil.component,component_1);
      Property prop = model.createProperty(ParserUtil.dcterms + "date");
      model.add(component_1,ParserUtil.dimension,prop);
    }
    //
    for(Dimension dim:lstTimeDimensions)
    {
      Resource component_1 = model.createResource();
      model.add(root,ParserUtil.component,component_1);
      Property prop = model.createProperty(ParserUtil.property + (dim.getConceptRef().toLowerCase().equals("time_period") ? "time" : dim.getConceptRef().toLowerCase()));
      model.add(component_1,ParserUtil.dimension,prop);
      model.add(prop,ParserUtil.type,ParserUtil.dimensionProperty);
      model.add(prop,ParserUtil.rdfsDomain,ParserUtil.observation);
     
      if(!dim.getCodeList().equals(""))
      {
        for(CodeList obj:lstCodeLists)
        {
          if(obj.getId().toString().equals(dim.getCodeList().toString()))
          {
            if(obj.getAgencyID().equals("SDMX"))
            {
              String codeList = getCodeList(obj.getId());
              Property cList = model.createProperty(ParserUtil.sdmx_code + codeList);
              model.add(prop,ParserUtil.codeList,cList);
              model.add(prop,ParserUtil.rdfsRange,ParserUtil.skosConcept);
              Property cncpt = model.createProperty(ParserUtil.sdmx_concept + codeList);
              model.add(prop,ParserUtil.concept,cncpt);
            }
            else
            {
              Property cList = model.createProperty(ParserUtil.dicURI + obj.getId().substring(obj.getId().indexOf("_")+1).toLowerCase());
              model.add(prop,ParserUtil.codeList,cList);
              model.add(prop,ParserUtil.rdfsRange,ParserUtil.skosConcept);
              Property cncpt = model.createProperty(ParserUtil.concepts + (dim.getConceptRef().toLowerCase().equals("time_period") ? "time" : dim.getConceptRef().toLowerCase()));
              model.add(prop,ParserUtil.concept,cncpt);
            }
          }
        }
      }
      else
      {
        Property type = model.createProperty(ParserUtil.xsd + dim.getDataType().toLowerCase());
        model.add(prop,ParserUtil.rdfsRange,type);
      }
    }
   
    //
    for(Measure measure:lstMeasures)
    {
      Resource component_1 = model.createResource();
      model.add(root,ParserUtil.component,component_1);
      Property prop = model.createProperty(ParserUtil.property + (measure.getConceptRef().toLowerCase().equals("time_period") ? "time" : measure.getConceptRef().toLowerCase()));
      model.add(component_1,ParserUtil.measure,prop);
      model.add(prop,ParserUtil.type,ParserUtil.measureProperty);
      model.add(prop,ParserUtil.type,ParserUtil.codedProperty);
      model.add(prop,ParserUtil.rdfsDomain,ParserUtil.observation);
     
      if(!measure.getCodeList().equals(""))
      {
        for(CodeList obj:lstCodeLists)
        {
          if(obj.getId().toString().equals(measure.getCodeList().toString()))
          {
            if(obj.getAgencyID().equals("SDMX"))
            {
              String codeList = getCodeList(obj.getId());
              Property cList = model.createProperty(ParserUtil.sdmx_code + codeList);
              model.add(prop,ParserUtil.codeList,cList);
              model.add(prop,ParserUtil.rdfsRange,ParserUtil.skosConcept);
              Property cncpt = model.createProperty(ParserUtil.sdmx_concept + codeList);
              model.add(prop,ParserUtil.concept,cncpt);
            }
            else
            {
              Property cList = model.createProperty(ParserUtil.dicURI + obj.getId().substring(obj.getId().indexOf("_")+1).toLowerCase());
              model.add(prop,ParserUtil.codeList,cList);
              model.add(prop,ParserUtil.rdfsRange,ParserUtil.skosConcept);
              Property cncpt = model.createProperty(ParserUtil.concepts + (measure.getConceptRef().toLowerCase().equals("time_period") ? "time" : measure.getConceptRef().toLowerCase()));
              model.add(prop,ParserUtil.concept,cncpt);
            }
          }
        }
      }
      else
      {
        Property type = model.createProperty(ParserUtil.xsd + measure.getDataType().toLowerCase());
        model.add(prop,ParserUtil.rdfsRange,type);
      }
    }
   
    //
    for(Attribute att:lstAttributes)
    {
      Resource component_1 = model.createResource();
      model.add(root,ParserUtil.component,component_1);
      Property prop = model.createProperty(ParserUtil.property + (att.getConceptRef().toLowerCase().equals("time_period") ? "time" : att.getConceptRef().toLowerCase()));
      model.add(component_1,ParserUtil.attribute,prop);
      model.add(prop,ParserUtil.type,ParserUtil.attributeProperty);
      model.add(prop,ParserUtil.type,ParserUtil.codedProperty);
      model.add(prop,ParserUtil.rdfsDomain,ParserUtil.observation);
     
      for(CodeList obj:lstCodeLists)
      {
        if(obj.getId().toString().equals(att.getCodeList().toString()))
        {
          if(obj.getAgencyID().equals("SDMX"))
          {
            // re-use the URI from sdmx-code.ttl file
            String codeList = getCodeList(obj.getId());
            Property cList = model.createProperty(ParserUtil.sdmx_code + codeList);
            model.add(prop,ParserUtil.codeList,cList);
            model.add(prop,ParserUtil.rdfsRange,ParserUtil.skosConcept);
            Property cncpt = model.createProperty(ParserUtil.sdmx_concept + codeList);
            model.add(prop,ParserUtil.concept,cncpt);
          }
          else
          {
            Property cList = model.createProperty(ParserUtil.dicURI + obj.getId().substring(obj.getId().indexOf("_")+1).toLowerCase());
            model.add(prop,ParserUtil.codeList,cList);
            model.add(prop,ParserUtil.rdfsRange,ParserUtil.skosConcept);
            Property cncpt = model.createProperty(ParserUtil.concepts + (att.getConceptRef().toLowerCase().equals("time_period") ? "time" : att.getConceptRef().toLowerCase()));
            model.add(prop,ParserUtil.concept,cncpt);
          }
        }
      }
    }

    // translates code lists
    String codeListID = "";
    String name;
    HashMap<String, String> hshName = new HashMap<String, String>();
   
    for(CodeList obj:lstCodeLists)
    {
      if(!obj.getAgencyID().equals("SDMX"))
      {
        codeListID = obj.getId().substring(obj.getId().indexOf("_")+1);
        Resource codeLists = model.createResource(baseURI + "dic/" + codeListID.toLowerCase());
       
        model.add(codeLists,ParserUtil.type,ParserUtil.conceptScheme);
       
        model.add(codeLists,ParserUtil.notation,obj.getId().toLowerCase());
       
        // print multilingual labels
        hshName = obj.gethshName();
        Iterator entrySetIterator = hshName.entrySet().iterator();
        while (entrySetIterator.hasNext())
        {
          Map.Entry entry = (Map.Entry) entrySetIterator.next();
                String key = (String) entry.getKey();
                name = hshName.get(key);
                model.add(codeLists,ParserUtil.rdfsLabel,model.createLiteral(name,key));
        }
       
        ArrayList<Code> arrCode = obj.getCode();
        for(Code code:arrCode)
        {
          String str = baseURI + "dic/" + codeListID.toLowerCase() + "#" + code.getValue();
          Resource res = model.createResource(str);
         
          model.add(codeLists,ParserUtil.topConcept,res);
         
          model.add(res,ParserUtil.type,ParserUtil.skosConcept);
         
          // print multilingual labels
          hshName = code.gethshDescription();
          Iterator entryIterator = hshName.entrySet().iterator();
          while (entryIterator.hasNext())
          {
            Map.Entry entry = (Map.Entry) entryIterator.next();
                  String key = (String) entry.getKey();
                  name = hshName.get(key);
                 
                  model.add(res,ParserUtil.skosLabel, model.createLiteral(name,key));
          }
         
          str = str.substring(0,str.indexOf("#"));
          Resource resource = model.createResource(str);
         
          model.add(res,ParserUtil.skosScheme,resource);
         
          model.add(res,ParserUtil.notation,code.getValue());
        }
      }
    }

    for(Concept concept:lstConcepts)
    {
      Resource con = model.createResource(ParserUtil.concepts + (concept.getId().toLowerCase().equals("time_period") ? "time" : concept.getId().toLowerCase()));
      model.add(con,ParserUtil.type,ParserUtil.sdmx);
      model.add(con,ParserUtil.notation,concept.getId().toLowerCase().equals("time_period") ? "time" : concept.getId().toLowerCase());
     
      //print multilingual labels
      hshName = concept.gethshName();
      Iterator entrySetIterator = hshName.entrySet().iterator();
      while (entrySetIterator.hasNext())
      {
        Map.Entry entry = (Map.Entry) entrySetIterator.next();
              String key = (String) entry.getKey();
              name = hshName.get(key);
              //writeLinetoFile("    skos:prefLabel \"" + name + "\"@" + key + ";");
              model.add(con,ParserUtil.skosLabel,model.createLiteral(name,key));
      }
     
      Resource res = model.createResource(ParserUtil.concepts);
      model.add(con,ParserUtil.skosScheme,res);
     
    }
   
    writeRDFToFile(fileName,model);
  }
 
  public void writeRDFToFile(String fileName, Model model)
  {
    if(serialization.equalsIgnoreCase("RDF/XML"))
      fileExt = ".rdf";
    else if(serialization.equalsIgnoreCase("TURTLE"))
      fileExt = ".ttl";
    else if(serialization.equalsIgnoreCase("N-TRIPLES"))
      fileExt = ".nt";
    try
       {
      OutputStream output = new FileOutputStream(outputFilePath + fileName.substring(0,fileName.indexOf("_DSD")) + fileExt,false);
      model.write(output,serialization.toUpperCase());
     
       }catch(Exception e)
       {
         DiffToC.writeLog("Error while creating dsd RDF file ... " + e.getMessage());
       }
  } 
 
  private static void usage()
  {
    System.out.println("usage: DSDParser [parameters]");
    System.out.println();
    System.out.println("  -i inputFilePath  Data Structure Definition (DSD) in XML format as input.");
    System.out.println("  -o outputFilePath  Output directory path to generate DataCube representation of DSD.");
    System.out.println("  -a sdmx ttl file  Path where the sdmx ttl is located.");
    System.out.println("  (optional)-f format  RDF format for serialization (RDF/XML, TURTLE, N-TRIPLES).");
  }
 
  public static void main(String[] args) throws Exception
  {
    DSDParser obj = new DSDParser();
     
    CommandLineParser parser = new BasicParser( );
    Options options = new Options( );
    options.addOption("h", "help", false, "Print this usage information");
    options.addOption("i", "inputFilepath", true, "Data Structure Definition (DSD) in XML format as input.");
    options.addOption("o", "outputFilePath", true, "Output directory path to generate DataCube representation of DSD.");
    options.addOption("f", "format", true, "RDF format for serialization (RDF/XML, TURTLE, N-TRIPLES).");
    options.addOption("a", "sdmx ttl file", true, "Path where the sdmx ttl is located.");
    CommandLine commandLine = parser.parse( options, args );
   
    if( commandLine.hasOption('h') ) {
        usage();
        return;
     }
   
    if(commandLine.hasOption('i'))
      xmlFilePath = commandLine.getOptionValue('i');
    if(commandLine.hasOption('o'))
      outputFilePath = commandLine.getOptionValue('o');
    if(commandLine.hasOption('f'))
      serialization = commandLine.getOptionValue('f');
   
    if(commandLine.hasOption('a'))
      sdmx_codeFilePath = commandLine.getOptionValue('a');
   
    if(xmlFilePath.equals("") || outputFilePath.equals("") || serialization.equals("") || sdmx_codeFilePath.equals(""))
    {
      usage();
      return;
    }
    else
    {
      obj.initObjects();
      obj.parseFile();
    }
  }
}
TOP

Related Classes of org.deri.eurostat.dsdparser.DSDParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.