/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.example.helloworld; // Imports /////////////// import org.apache.jena.example.CheeseBase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.jena.rdf.model.*; import org.apache.jena.util.FileManager; import org.apache.jena.vocabulary.RDF; import org.apache.jena.vocabulary.RDFS; /** * <h2>Apache Jena Getting Started Guide - Step 1: Hello World</h2> * <p> * In this step, we illustrate the basic operations of getting some data into * a Java program, finding some data, and showing some output. * </p> */ public class HelloWorld extends CheeseBase { /***********************************/ /* Constants */ /***********************************/ /***********************************/ /* Static variables */ /***********************************/ @SuppressWarnings( value = "unused" ) private static final Logger log = LoggerFactory.getLogger( HelloWorld.class ); /***********************************/ /* Instance variables */ /***********************************/ /***********************************/ /* Constructors */ /***********************************/ /***********************************/ /* External signature methods */ /***********************************/ /** * Main entry point for running this example. Since every sub-class * will be {@link Runnable}, we create an instance, stash the * command-line args where we can retrieve them later, and * invoke {@link #run} */ public static void main( String[] args ) { new HelloWorld().setArgs( args ).run(); } public void run() { // creates a new, empty in-memory model Model m = ModelFactory.createDefaultModel(); // load some data into the model FileManager.get().readModel( m, CHEESE_DATA_FILE ); // generate some output showModelSize( m ); listCheeses( m ); } /***********************************/ /* Internal implementation methods */ /***********************************/ /** * Show the size of the model on stdout */ protected void showModelSize( Model m ) { System.out.println( String.format( "The model contains %d triples", m.size() ) ); } /** * List the names of cheeses to stdout */ protected void listCheeses( Model m ) { Resource cheeseClass = m.getResource( CHEESE_SCHEMA + "Cheese" ); StmtIterator i = m.listStatements( null, RDF.type, cheeseClass ); while (i.hasNext()) { Resource cheese = i.next().getSubject(); String label = getEnglishLabel( cheese ); System.out.println( String.format( "Cheese %s has name: %s", cheese.getURI(), label ) ); } } /** * Get the English-language label for a given resource. In general, a resource * may have zero, one or many labels. In this case, we happen to know that * the cheese resources have mutlilingual labels, so we pick out the English one * @param cheese * @return */ protected String getEnglishLabel( Resource cheese ) { StmtIterator i = cheese.listProperties( RDFS.label ); while (i.hasNext()) { Literal l = i.next().getLiteral(); if (l.getLanguage() != null && l.getLanguage().equals( "en")) { // found the English language label return l.getLexicalForm(); } } return "A Cheese with No Name!"; } /** * Get the value of a property as a string, allowing for missing properties * @param r A resource * @param p The property whose value is wanted * @return The value of the <code>p</code> property of <code>r</code> as a string */ protected String getValueAsString( Resource r, Property p ) { Statement s = r.getProperty( p ); if (s == null) { return ""; } else { return s.getObject().isResource() ? s.getResource().getURI() : s.getString(); } } /***********************************/ /* Inner class definitions */ /***********************************/ }