Advertisement
Umingo

Jena Model for Ontology Individuals

Oct 9th, 2014
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.75 KB | None | 0 0
  1. package models;
  2.  
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.sql.Timestamp;
  6.  
  7. import com.hp.hpl.jena.ontology.ConversionException;
  8. import com.hp.hpl.jena.ontology.DatatypeProperty;
  9. import com.hp.hpl.jena.ontology.Individual;
  10. import com.hp.hpl.jena.ontology.OntClass;
  11. import com.hp.hpl.jena.ontology.OntModel;
  12. import com.hp.hpl.jena.rdf.model.Resource;
  13. import com.hp.hpl.jena.vocabulary.XSD;
  14.  
  15. /**
  16.  * Model Class to interact with OntClass Article
  17.  *
  18.  * @author Benjamin Eckstein
  19.  *
  20.  */
  21. class Model_Article {
  22.     protected Individual individual;
  23.  
  24.     static Model_Article_Meta model_meta;
  25.  
  26.     /**
  27.      * Construct a Model_Article from an individual.
  28.      *
  29.      * @param i
  30.      */
  31.     public Model_Article(Individual i) {
  32.         this.individual = i;
  33.         if (Model_Article.model_meta == null) {
  34.             Model_Article.setup(i);
  35.         }
  36.         if (!i.getOntClass().getNameSpace()
  37.                 .equals(Model_Article.model_meta.article_NS)) {
  38.             throw new ConversionException("Individual is not an Article but "
  39.                     + i.getOntClass().getNameSpace());
  40.         }
  41.     }
  42.  
  43.     /**
  44.      * Little helper function to initialize the Article Meta
  45.      *
  46.      * @param i
  47.      */
  48.     public static void setup(Individual i) {
  49.         Model_Article.model_meta = new Model_Article_Meta(i);
  50.  
  51.     }
  52.  
  53.     /**
  54.      * Create one (!) Model_Article from the Resultset (MySql query atm) and
  55.      * return it. The Iteration is made at the calling function
  56.      *
  57.      * @param model
  58.      * @param resultSet
  59.      * @return
  60.      * @throws SQLException
  61.      */
  62.     public static Model_Article createFromSql(OntModel model,
  63.             ResultSet resultSet) throws SQLException {
  64.  
  65.         Resource class_article = model.getResource(Main.NS + "Article");
  66.  
  67.         String id = "" + resultSet.getString("id");
  68.         String title = "" + resultSet.getString("title");
  69.         String subtitle = "" + resultSet.getString("subtitle");
  70.         String content = "" + resultSet.getString("article_content");
  71.         Timestamp published_date = resultSet.getTimestamp("published_date");
  72.  
  73.         OntClass article = class_article.as(OntClass.class);
  74.         Individual article_tmp = article.createIndividual(Main.NS + "Article"
  75.                 + id);
  76.  
  77.         if (Model_Article.model_meta == null) {
  78.             Model_Article.setup(article_tmp);
  79.         }
  80.  
  81.         article_tmp.addProperty(Model_Article.model_meta.article_title, title);
  82.         article_tmp.addProperty(Model_Article.model_meta.article_subtitle,
  83.                 subtitle);
  84.         // article_tmp.addProperty(article_content,content);
  85.         article_tmp.addProperty(
  86.                 Model_Article.model_meta.article_published_date, published_date
  87.                         + "");
  88.         article_tmp.addProperty(Model_Article.model_meta.article_id, id);
  89.         Model_Article newArticle = new Model_Article(article_tmp);
  90.         newArticle.createMeta(content);
  91.         return newArticle;
  92.  
  93.     }
  94.  
  95.     /**
  96.      * Create Additional information about this entity with a given content.
  97.      * Content will not be saved within the Ontology (Space / Performance
  98.      * Reasons).
  99.      *
  100.      * @param content
  101.      * @return
  102.      */
  103.     public Model_Article createMeta(String content) {
  104.  
  105.         String id = ""
  106.                 + individual
  107.                         .getPropertyValue(Model_Article.model_meta.article_id);
  108.         String plain_content = content.replaceAll("\\<.*?\\>", "");
  109.         int words = plain_content.split("\\s").length;
  110.         individual.addProperty(Model_Article.model_meta.article_word_count,
  111.                 words + "");
  112.         System.out.println("test " + words);
  113.  
  114.         return this;
  115.  
  116.     }
  117.  
  118.     public int getId() {
  119.         String id = ""
  120.                 + individual
  121.                         .getPropertyValue(Model_Article.model_meta.article_id);
  122.         return Integer.parseInt(id);
  123.     }
  124.  
  125.     public Model_Article setId(int i) {
  126.         individual.setPropertyValue(Model_Article.model_meta.article_id, null);
  127.         individual.addProperty(Model_Article.model_meta.article_id, i + "");
  128.         return this;
  129.     }
  130.  
  131.     /**
  132.      * Helper class to manage Metainformation about Bento#Article
  133.      *
  134.      * @author Eckstein
  135.      *
  136.      */
  137.     static class Model_Article_Meta {
  138.  
  139.         OntModel model;
  140.         String article_NS = Main.NS + "Article";
  141.         DatatypeProperty article_title;
  142.         DatatypeProperty article_subtitle;
  143.         DatatypeProperty article_content;
  144.         DatatypeProperty article_published_date;
  145.         DatatypeProperty article_word_count;
  146.         DatatypeProperty article_id;
  147.  
  148.         public Model_Article_Meta(Individual i) {
  149.  
  150.             model = i.getOntModel();
  151.             Resource class_article = model.getResource(article_NS);
  152.             article_title = model.createDatatypeProperty(Main.NS + "title");
  153.             article_title.addDomain(class_article);
  154.             article_title.addRange(XSD.xstring);
  155.             article_subtitle = model.createDatatypeProperty(Main.NS
  156.                     + "subtitle");
  157.             article_content = model.createDatatypeProperty(Main.NS + "content");
  158.             article_published_date = model.createDatatypeProperty(Main.NS
  159.                     + "published_date");
  160.             article_word_count = model.createDatatypeProperty(Main.NS
  161.                     + "word_count");
  162.             article_id = model.createDatatypeProperty(Main.NS + "ID");
  163.         }
  164.  
  165.     }
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement