Exemple #1
0
  public static void main(String[] args) {

    /*
     * This example recreates the SKOS dataset in Example2.java, but does so using some convenience methods in fewer lines of code
     *
     */

    try {

      SKOSManager manager = new SKOSManager();

      final String baseURI = "http://www.semanticweb.org/skos/example2.rdf";

      SKOSDataset dataset = manager.createSKOSDataset(URI.create(baseURI));

      SKOSDataFactory df = manager.getSKOSDataFactory();

      List<SKOSEntity> allEntities = new ArrayList<SKOSEntity>();

      // Create a concept scheme identified by a URI
      SKOSConceptScheme conceptScheme1 =
          df.getSKOSConceptScheme(URI.create(baseURI + "#conceptScheme1"));

      // create a set of concepts

      Set<SKOSConcept> concepts = new HashSet<SKOSConcept>();
      concepts.add(df.getSKOSConcept(URI.create(baseURI + "#conceptA")));
      concepts.add(df.getSKOSConcept(URI.create(baseURI + "#conceptB")));
      concepts.add(df.getSKOSConcept(URI.create(baseURI + "#conceptC")));
      concepts.add(df.getSKOSConcept(URI.create(baseURI + "#conceptD")));

      // add all the entities to this set
      allEntities.add(conceptScheme1);
      allEntities.addAll(concepts);

      List<SKOSEntityAssertion> entityAssertions = df.getSKOSEntityAssertions(allEntities);
      List<SKOSObjectRelationAssertion> relationAssertions =
          df.getSKOSObjectRelationAssertions(
              concepts, df.getSKOSInSchemeProperty(), conceptScheme1);

      List<SKOSChange> addAssertions = new ArrayList<SKOSChange>();

      for (SKOSEntityAssertion ass : entityAssertions) {
        addAssertions.add(new AddAssertion(dataset, ass));
      }

      for (SKOSObjectRelationAssertion ass : relationAssertions) {
        addAssertions.add(new AddAssertion(dataset, ass));
      }

      manager.applyChanges(addAssertions);

      manager.save(dataset, SKOSFormatExt.RDFXML, URI.create("file:/Users/simon/tmp/example3.rdf"));

    } catch (SKOSCreationException e) {
      e
          .printStackTrace(); // To change body of catch statement use File | Settings | File
                              // Templates.
    } catch (SKOSChangeException e) {
      e
          .printStackTrace(); // To change body of catch statement use File | Settings | File
                              // Templates.
    } catch (SKOSStorageException e) {
      e
          .printStackTrace(); // To change body of catch statement use File | Settings | File
                              // Templates.
    }
  }
  private void _createNewOntology() throws Exception {

    assert namespace.matches(".*(/|#)");

    String baseUri = namespace.replaceAll("(/|#)+$", ""); // removing any trailing slash/hash

    manager = new SKOSManager();

    if (namespace.endsWith("#")) {
      // Ok, OWLAPI v2 works fine with hash separator:
      dataset = manager.createSKOSDataset(URI.create(baseUri));
    } else {
      /////////////////////////////////////////////////////////////////////////////////////////////
      // TODO NOTE: workaround for bug in OWLAPI v2:
      // Instead of using a baseUri without separator,
      // use the namespace itself (ie, w/ fragment separator):
      dataset = manager.createSKOSDataset(URI.create(namespace));
      // In this way, the resulting ontology looks OK except that the xml:base is
      // written with the separator:
      //
      //		<rdf:RDF xmlns="http://mmisw.org/ont/mmi/cf/parameter/"
      //		     xml:base="http://mmisw.org/ont/mmi/cf/parameter/"    <<<--- WITH trailing slash
      //		     xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#"
      //		     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
      //		     xmlns:owl2="http://www.w3.org/2006/12/owl2#"
      //		     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
      //		     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      //		     xmlns:owl="http://www.w3.org/2002/07/owl#"
      //		     xmlns:skos="http://www.w3.org/2004/02/skos/core#">
      //		    <owl:Ontology rdf:about=""/>
      //		...
      //	    <!-- http://mmisw.org/ont/mmi/cf/parameter/CfStdName -->
      //
      //	        <skos:ConceptScheme rdf:about="CfStdName"/>
      //
      //
      //	        <!-- http://mmisw.org/ont/mmi/cf/parameter/age_of_stratospheric_air -->
      //
      //	        <skos:Concept rdf:about="age_of_stratospheric_air">
      //	            <skos:inScheme rdf:resource="CfStdName"/>
      //	        </skos:Concept>
      //
      //
      //	        <!-- http://mmisw.org/ont/mmi/cf/parameter/air_density -->
      //
      //	        <skos:Concept rdf:about="air_density">
      //	            <skos:inScheme rdf:resource="CfStdName"/>
      //	        </skos:Concept>
      //
      //		...
      /////////////////////////////////////////////////////////////////////////////////////////////
    }

    SAXBuilder builder = new SAXBuilder();
    Document document = builder.build(new StringReader(inputContents));

    standard_name_table = document.getRootElement();

    _getProperty(standard_name_table, "version_number");
    _getProperty(standard_name_table, "last_modified");
    _getProperty(standard_name_table, "institution");
    _getProperty(standard_name_table, "contact");

    // TODO assign version_number, last_modified as some properties to the ontology itself.

    dataFactory = manager.getSKOSDataFactory();

    allEntities = new ArrayList<SKOSEntity>();
    conceptScheme = dataFactory.getSKOSConceptScheme(URI.create(namespace + CONCEPT_SCHEME));
    concepts = new HashSet<SKOSConcept>();

    URI topConceptUri = URI.create(namespace + TOP_CONCEPT);
    topConcept = dataFactory.getSKOSConcept(topConceptUri);
    concepts.add(topConcept);

    objectRelationAssertions = new ArrayList<SKOSObjectRelationAssertion>();
    dataRelationAssertions = new ArrayList<SKOSDataRelationAssertion>();

    // skos:hasTopConcept
    objectRelationAssertions.add(
        dataFactory.getSKOSObjectRelationAssertion(
            conceptScheme, dataFactory.getSKOSHasTopConceptProperty(), topConcept));

    /////////////////////////////////////////////////
    // OWL API stuff
    owlManager = manager.getOWLManger();
    owlOntology = owlManager.getOntology(URI.create(namespace));
    owlDataFactory = owlManager.getOWLDataFactory();

    canonicalUnitsProp =
        owlDataFactory.getOWLDataProperty(URI.create(namespace + "canonical_units"));
    gribProp = owlDataFactory.getOWLDataProperty(URI.create(namespace + "grib"));
    amipProp = owlDataFactory.getOWLDataProperty(URI.create(namespace + "amip"));

    rdfsLabel =
        owlDataFactory.getOWLDataProperty(URI.create("http://www.w3.org/2000/01/rdf-schema#label"));
    rdfsComment =
        owlDataFactory.getOWLDataProperty(
            URI.create("http://www.w3.org/2000/01/rdf-schema#comment"));

    owlChanges = new ArrayList<AddAxiom>();

    _addOwlChange(topConceptUri, TOP_CONCEPT.replace('_', ' '), "", null, null, null);
  }