Hi Phil, there's an actively developed Pellet fork called Openllet[1]. It has some refactored and updated dependencies. Maybe it will be worth checking out.
Cheers, Piotr [1]https://github.com/Galigator/openllet 2018-02-01 3:06 GMT-05:00 Phil Shields <[email protected]>: > Hi all, I have been trying in vain to get pellet to work in Eclipse in a > dynamic web application. Pellet infers SWRL rules and works well in Protege > and as a 'stand alone' java class in Eclipse. Apparently, OntModel model > = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC) > requires HP libs to work and the servlet has apache libs. The problem is > that they don't play nice. > My data goes from a JSP to the servlet which (should) pass it onto the > class. The servlet sees the HP libs in the class and throws exceptions > about wanting HP model and RDF libs. When I put them in it chages the > nature of some statement methods which apparently are different between HP > and Apache. > > I have tried other ways of reasoning with pellet such as: Reasoner > reasoner = ReasonerRegistry.getOWLReasoner(); > reasoner = reasoner.bindSchema(model1); > // Obtain standard OWL-DL spec and attach the Pellet reasoner > OntModelSpec ontModelSpec = OntModelSpec.OWL_DL_MEM_RULE_INF; > //OntModelSpec ontModelSpec = OntModelSpec. > PelletReasonerFactory.THE_SPEC; > ontModelSpec.setReasoner(reasoner); > // Create ontology model with reasoner support > OntModel model = ModelFactory.createOntologyModel(ontModelSpec, > model1); > to no avail. > Is there any way I can reason with pellet for an OntModel in an apache web > application in Tomcat 7? > Follows is the class that changes statements in the ontology and passes > the changed ontology onto the helper class to do the reasoning. See below, > I tried casting the OntModel from apache to HP and that didn't work. > import java.io.InputStream; > import java.util.ArrayList; > import java.util.List; > > import org.apache.jena.ontology.OntModel; > import org.apache.jena.ontology.OntModelSpec; > import org.apache.jena.rdf.model.Literal; > import org.apache.jena.rdf.model.ModelFactory; > import org.apache.jena.rdf.model.Property; > import org.apache.jena.rdf.model.Resource; > import org.apache.jena.rdf.model.ResourceFactory; > import org.apache.jena.rdf.model.Statement; > import org.apache.jena.rdf.model.StmtIterator; > import org.apache.jena.util.FileManager; > > > > > public class ModifyStatements { > > > public static void main(String[] args) { > > > //test data > > String patientsName= "Patient_Doug"; > int ptAge=62; > int iabc=5; > int iimpact=9; > int isupervision=3; > int ifeeding=11; > int itoilet=4; > int imobility=11; > > deleteAndWriteStatements(patientsName, ptAge, iabc, iimpact, > isupervision, ifeeding, itoilet, imobility); > > > } > > static List<String> thePropertyBeingChangedArray = new > ArrayList<String>(); > static List<Integer> theNewLiteralsArray = new ArrayList<Integer>(); > static List<Statement> statementsToRemoveArray = new > ArrayList<Statement>(); > > > public static void deleteAndWriteStatements(String patientsName, int > age, int abc, int impact, int supervision, int feeding, int toilet, int > mobility) { > Inf inf = new Inf(); > > > theNewLiteralsArray.clear(); > statementsToRemoveArray.clear(); > thePropertyBeingChangedArray.clear(); > Resource subject=null; > Property predicate=null; > OntModel model1 = ModelFactory.createOntologyModel( > OntModelSpec.OWL_DL_MEM); > String inputFile = "c:\\jena\\acuity.owl"; > InputStream in = FileManager.get().open(inputFile); > if (in == null) { > throw new IllegalArgumentException("File: " + inputFile + > " not found"); > } > model1.read(in,""); > String ns = "http://philshields.altervista.org/owl/unit.owl#"; > String hq="http://example.org/"; > > //incoming integer array > > theNewLiteralsArray.add(0,abc); > theNewLiteralsArray.add(1,impact); > theNewLiteralsArray.add(2,supervision); > theNewLiteralsArray.add(3,feeding); > theNewLiteralsArray.add(4,toilet); > theNewLiteralsArray.add(5,mobility); > theNewLiteralsArray.add(6,age); > > System.out.println("Lereral array feeding= > "+theNewLiteralsArray.get(3)); > > > //store the properties to be deleted then reinstated in an array > thePropertyBeingChangedArray.add(0,hq+"hasABCValue"); > thePropertyBeingChangedArray.add(1,hq+"hasImpactOfSymptomsValue"); > thePropertyBeingChangedArray.add(2,hq+"hasSupervisionValue"); > thePropertyBeingChangedArray.add(3,hq+"hasFeedingValue"); > thePropertyBeingChangedArray.add(4,hq+"hasHygieneToiletingValue"); > thePropertyBeingChangedArray.add(5,hq+"hasMobilityValue"); > thePropertyBeingChangedArray.add(6,ns+"hasAge"); > > > inf.inferenceResults((com.hp.hpl.jena.ontology.OntModel) > model1,patientsName); > StmtIterator iter = model1.listStatements(); > > while (iter.hasNext()) > { > Statement stmt = iter.nextStatement(); > > subject = stmt.getSubject(); > predicate = stmt.getPredicate(); > > > //put statements belonging to the properties for this patient > in an array for deletion > for (int i = 0; i < thePropertyBeingChangedArray.size(); > i++) { > if(subject.toString().equals(ns+patientsName)&& > predicate.toString().equals(thePropertyBeingChangedArray.get(i))) { > > > statementsToRemoveArray.add(stmt); > > > } > > } > } > > Resource s = ResourceFactory.createResource(ns+patientsName); > > for (int i = 0; i < statementsToRemoveArray.size(); i++) { > System.out.println("Statements in array "+i+"= "+ > thePropertyBeingChangedArray.get(i)+" The value > "+theNewLiteralsArray.get(i)); > > > model1.remove(statementsToRemoveArray.get(i)); > Property p = ResourceFactory.createProperty( > thePropertyBeingChangedArray.get(i)); > Literal o = model1.createTypedLiteral(theNewLiteralsArray.get(i)); > Statement newStatement = ResourceFactory.createStatement(s, p, o ); > model1.add(newStatement); > > } > > } > > > > } > > > The helper class that does the reasoning. > import java.util.ArrayList; > > import org.mindswap.pellet.jena.PelletReasonerFactory; > > import com.hp.hpl.jena.ontology.Individual; > import com.hp.hpl.jena.ontology.OntModel; > import com.hp.hpl.jena.ontology.OntProperty; > import com.hp.hpl.jena.rdf.model.ModelFactory; > import com.hp.hpl.jena.rdf.model.Statement; > import com.hp.hpl.jena.rdf.model.StmtIterator; > > > public class Inf { > public static void main(String[] args) { > // TODO Auto-generated method stub > > > } > > static ArrayList<String> nurses=new ArrayList<String>(); > static ArrayList<String> nursesAndQualifications=new > ArrayList<String>(); > static ArrayList<String> alliedHealth=new ArrayList<String>(); > static ArrayList<String> hospitalUnit=new ArrayList<String>(); > static ArrayList<String> aSuggestion=new ArrayList<String>(); > static ArrayList<String> aRisk=new ArrayList<String>(); > static int ptTotal; > > public void inferenceResults(OntModel model1, String patientsName) { > String hq="http://example.org/"; > String ns = "http://philshields.altervista.org/owl/unit.owl#"; > System.out.println("Patients name= "+patientsName); > OntModel model = > ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC > ); > // OntModel ontModel = ModelFactory.createOntologyModel(); > > model.addSubModel(model1); > > Individual ind = model.getIndividual(ns+patientsName); > > > //model.prepare(); > //asserted data properties > OntProperty abcValue = model.getOntProperty(hq+"hasABCValue"); > OntProperty impact = model.getOntProperty(hq+" > hasImpactOfSymptomsValue"); > OntProperty supervision = model.getOntProperty(hq+" > hasSupervisionValue"); > OntProperty feeding = model.getOntProperty(hq+"hasFeedingValue"); > OntProperty toilet = model.getOntProperty(hq+" > hasHygieneToiletingValue"); > OntProperty mobility = model.getOntProperty(hq+" > hasMobilityValue"); > OntProperty age = model.getOntProperty(ns+"hasAge"); > > > //inferred data properties > OntProperty total = model.getOntProperty(ns+"hasTotalScore"); > OntProperty risk = model.getOntProperty(ns+"hasPossibleRisk"); > OntProperty allied = model.getOntProperty(ns+"hasAlliedHealth"); > OntProperty nurse = model.getOntProperty(ns+"hasShiftNurse"); > OntProperty qualification = model.getOntProperty(ns+" > hasQualification"); > OntProperty suggestion = model.getOntProperty(ns+"hasSuggestion"); > OntProperty unit = model.getOntProperty(ns+"hasPossibleUnit"); > > //print asserted data properties > System.out.println("Properties for "+ind.getLocalName().toString( > )); > System.out.println( abcValue.getLocalName()+"= > "+(ind.getPropertyValue(abcValue)).asLiteral().getInt()); > System.out.println( impact.getLocalName()+"= > "+ind.getPropertyValue(impact).asLiteral().getInt()); > System.out.println( supervision.getLocalName()+"= > "+ind.getPropertyValue(supervision).asLiteral().getInt()); > System.out.println( feeding.getLocalName()+"= > "+ind.getPropertyValue(feeding).asLiteral().getInt()); > System.out.println( toilet.getLocalName()+"= > "+ind.getPropertyValue(toilet).asLiteral().getInt()); > System.out.println( mobility.getLocalName()+"= > "+ind.getPropertyValue(mobility).asLiteral().getInt()); > System.out.println( age.getLocalName()+"= > "+ind.getPropertyValue(age).asLiteral().getInt()); > > //print inferred data properties > //System.out.println( total.getLocalName()+"= > "+ind.getPropertyValue(total).asLiteral().getInt()); > //ptTotal= ind.getPropertyValue(total).isLiteral().getInt(); > > aRisk.clear(); > for (StmtIterator j = ind.listProperties(risk); j.hasNext(); ) { > Statement s = j.next(); > //System.out.println( " " + s.getPredicate().getLocalName() > + " -> " ); > System.out.println( "A possible risk... " + > s.getLiteral().getLexicalForm()); > aRisk.add("A possible risk... " + s.getLiteral().getLexicalForm( > )); > } > > //an example of getting a data property > aSuggestion.clear(); > for (StmtIterator j = ind.listProperties(suggestion); > j.hasNext(); ) { > Statement s = j.next(); > //System.out.println( " " + > s.getPredicate().getLocalName() + " -> " ); > System.out.println( "A possible suggestion... " + > s.getLiteral().getLexicalForm()); > aSuggestion.add("A possible suggestion... " + > s.getLiteral().getLexicalForm()); > } > hospitalUnit.clear(); > for (StmtIterator j = ind.listProperties(unit); j.hasNext(); ) > { > Statement s = j.next(); > //System.out.println( " " + > s.getPredicate().getLocalName() + " -> " ); > System.out.println( "A possible unit... " + > s.getLiteral().getLexicalForm()); > hospitalUnit.add("A possible unit... " + > s.getLiteral().getLexicalForm()); > } > > // an example of getting a class's individual > alliedHealth.clear(); > for (StmtIterator j = ind.listProperties(allied); j.hasNext(); > ) { > Statement s = j.next(); > //System.out.println( " " + > s.getPredicate().getLocalName() + " -> " ); > System.out.println( "Possible allied health... " + > s.getLiteral().getLexicalForm()); > alliedHealth.add("Possible allied health... " + > s.getLiteral().getLexicalForm()); > } > > //System.out.println("A possible nurse= "+((Resource) > ind.getPropertyValue(nurse)).getLocalName()); > > //put multiple possible nurses in array that fit the qualification > criteria > nursesAndQualifications.clear(); > for (StmtIterator j = ind.listProperties(nurse); j.hasNext(); > ) { > int x=0; > Statement s = j.next(); > nurses.add(x,s.getLiteral().getLexicalForm()); > //System.out.println( " " + > s.getPredicate().getLocalName() + " -> " ); > //System.out.println( "A possible nurse... " + ((Resource) > s.getObject()).getLocalName()); > > // System.out.println("a nurse from individual= > "+nurses.get(x)); > > > //System.out.println("a nurse from individual= > "+nurses.get(x)); > //System.out.println("Some nurse "+model.getIndividual(ns+ > nurses.get(x)).listProperties(qualification)); > Individual ind1 = model.getIndividual(ns+nurses.get(x)); > //System.out.println("a nurse from individual= "+ind1); > > for (StmtIterator ji = ind1.listProperties(qualification); > ji.hasNext(); ) { > Statement si = ji.next(); > //System.out.println( " " + > s.getPredicate().getLocalName() + " -> " ); > System.out.println( nurses.get(x)+" has an appropriate > qualification... " + si.getLiteral().getLexicalForm()); > nursesAndQualifications.add(nurses.get(x)+" has an > appropriate qualification... " + si.getLiteral().getLexicalForm()); > }nurses.clear(); > } > > } > > > Many thanks,Phil >
