damloaa.java

来自「SRI international 发布的OAA框架软件」· Java 代码 · 共 265 行

JAVA
265
字号

//java -classpath ../ARP/arp-1_0_3/src/:../lib/xerces.jar:/homes/atallah/oaa2/src/java/oaalib/:./ com.hp.hpl.mesa.rdf.jena.oaadaml.DamlOAA http://www.daml.org/2001/03/daml+oil-ex.daml
//javac -classpath ../../../../../../../:/homes/atallah/jena/ARP/arp-1_0_3/src/:/homes/atallah/jena/lib/xerces.jar:/homes/atallah/oaa2/src/java/oaalib/:./ DamlOAA.java

package com.sri.oaa2.agt.oaadaml;


import com.sri.oaa2.lib.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import com.sri.oaa2.com.*;
import com.sri.oaa2.icl.*;
import com.hp.hpl.jena.rdf.arp.JenaReader;    //using the ARP reader
import com.hp.hpl.mesa.rdf.jena.mem.ModelMem;
import com.hp.hpl.mesa.rdf.jena.model.*;
import com.hp.hpl.mesa.rdf.jena.common.*;
import com.hp.hpl.mesa.rdf.jena.vocabulary.RDFS;

import java.io.*;
import java.lang.Object;


    /** 
     * This class is responsable of creating a jena model from a daml input given here in the
     * command line by specifying its URL.
     * Once the model is created, it extracts from it the daml data : classes and properties,
     * to form OAA solvables with them.
     * For that daml input it creates a DAML agent that is going to register these solvables in 
     * the facilitator. 
     */
public class DamlOAA extends Object{

  
    static DamlAgent agent;
    static Model model;  
    static HashSet properties,classes;
    static String defaultNs = null;
    static String url;


    public static void main(String args[]) {
	
        IclTerm synonyms = 
	  LibComUtils.oaaResolveVariable("create_synonyms", args);
        IclTerm printTriples = 
	  LibComUtils.oaaResolveVariable("print_triples", args);
	IclTerm cmdLineDefaultNs =
	  LibComUtils.oaaResolveVariable("default_namespace", args);
	String objProp  = "http://www.daml.org/2001/03/daml+oil#ObjectProperty";
	String uniProp = "http://www.daml.org/2001/03/daml+oil#UniqueProperty";
	String dataProp =  "http://www.daml.org/2001/03/daml+oil#DatatypeProperty";
	String transitiveProp = "http://www.daml.org/2001/03/daml+oil#TransitiveProperty";
	// TBD: what about rdfs:class??? - same issue for rdf:property
	String ontologyClass = "http://www.daml.org/2001/03/daml+oil#Class";
	StringBuffer solvables = new StringBuffer("[solvable('Class'(Id),[callback('DamlClass_Handler')]), solvable('Property'(Id), [callback('Prop_Handler')], []), solvable(subClassOf(Id1,Id2), [callback('RDFprop_Handler')], []),solvable(sameClassAs(Id1,Id2),[callback('Damlprop_Handler')], []),solvable(samePropertyAs(Id1,Id2),[callback('Damlprop_Handler')], []), solvable(subPropertyOf(Id1, Id2), [callback('RDFprop_Handler')], []), solvable(inverseOf(Id1,Id2),[callback('Damlprop_Handler')], []), solvable(complementOf(Id1, Id2),[callback('Damlprop_Handler')], []), solvable(intersectionOf(Id1, List),[callback('List_Handler')], []), solvable(disjointWith(Id1, Id2), [callback('RDFprop_Handler')], []), solvable(unionOf(Id,List), [callback('List_Handler')], []),solvable(disjointUnionOf(Id,List), [callback('List_Handler')], []),  solvable('UniqueProperty'(Id),[callback('DamlClass_Handler')], []), solvable('ObjectProperty'(Id),[callback('DamlClass_Handler')], []), solvable('DatatypeProperty'(Id),[callback('DamlClass_Handler')], []),solvable('UnambiguousProperty'(Id),[callback('DamlClass_Handler')], []), solvable('TransitiveProperty'(Id),[callback('DamlClass_Handler')], []), solvable(domain(Id, classId), [callback('RDFprop_Handler')], []), solvable(range(Id, classId), [callback('RDFprop_Handler')], []), solvable(comment(Id, String),[callback('RDFprop_Handler')], []), solvable(daml_triple(Id1, Id2, Id3),[callback('damlTriple_Handler')], [])");
	StmtIterator stmts;
	NsIterator nsIter;

	try {
   	
	    JenaReader reader = new JenaReader();
	    model= reader.memModel();

	    if (args.length < 1 ) {
		System.out.println("usage : DamlOAA.java [-create_synonyms] [-print_triples] URL ");
		System.exit(0);
	    }
	    else
	    {
	
		System.out.println("Attempting to read URL : ");
		System.out.println(args[args.length - 1]);
		url= new String(args[args.length - 1]);
		reader.read(model, url);
		stmts = model.listStatements();
		if (printTriples != null) {
		  System.out.println("************** Begin Triples Table **************");
		  while(stmts.hasNext()){
		    System.out.println(stmts.next());
		  }
		  System.out.println("************** End Triples Table **************");
		}
	 
		// TBD: We need a more reliable way to select the
		// default namespace:
		if (cmdLineDefaultNs == null) {
		    /*
		    nsIter = model.listNameSpaces();
		    if (nsIter.hasNext()){
			String nextNs  = nsIter.next();
			// TBD: are there always quotes to remove?:
			defaultNs = nextNs.substring(0,nextNs.length()-1);
			// System.out.println(nextNs);
		    }
		    */
		} else {
		    defaultNs = cmdLineDefaultNs.toString();
		    // Remove single quotes (if any):
		    defaultNs = IclString.iclStRemoveQuotes(defaultNs); 
		}
		System.out.println("Default namespace is : "+defaultNs);


		if (synonyms != null)
		  System.out.println("Creating synonyms (short forms)");

		//Collecting the user defined classes from the model


		SelectorImpl selectClass = new SelectorImpl(null,null,model.createResource(ontologyClass));
		StmtIterator classIterator = model.listStatements(selectClass);
	
		classes = new HashSet();
		while (classIterator.hasNext()){
		    classes.add(classIterator.next().getSubject());
		}

		if (classes.size() > 0) {
		    // Adding the user defined classes to the solvable Buffer
		    Object[]     classArray = classes.toArray();
		    solvables.append(", solvable('");

		for (int i =0;i<classes.size()-1;i++){
		    String longform= classArray[i].toString();
		    // System.out.println("longform is "+longform);
		    // System.out.println("index of # is "+longform.indexOf("#"));
		    int index = longform.indexOf("#");
		    // System.out.println("length of longform is "+longform.length());
		    solvables.append(longform+"'(Id), [callback('OntologyClass_Handler')]), solvable('");
		    if (args.length >=2) {
		      if (synonyms != null) {
			    if (longform.length()>defaultNs.length()) {
				String shortform = longform.substring(index+1,longform.length());
				// System.out.println("short solvable: " +shortform);
				//solvables.append(shortform+"'(Id),[synonym('"+shortform+"'(Id),'"+longform+"'(Id))]), solvable('");
				solvables.append(shortform+"'(Id),[callback('OntologyClass_Handler')]), solvable('");
			    }
			}
		    }
		}
		//solvables.append(classArray[classes.size()-1]+"'(Id),[callback('OntologyClass_Handler')]), solvable('");
		solvables.append(classArray[classes.size()-1]+"'(Id),[callback('OntologyClass_Handler')])");
	 if (args.length >=2) {
	       if (synonyms != null) {
		 String longform = classArray[classes.size()-1].toString();
		 int index = longform.indexOf("#");
		 if (longform.length()>defaultNs.length()) {
		     
		     String shortform = longform.substring(index+1,longform.length());
		     //solvables.append(shortform+"'(Id),[callback('"+shortform+"'(Id),'"+longform+"'(Id))]), solvable('");
		     //solvables.append(shortform+"'(Id),[callback('OntologyClass_Handler')]), solvable('");
		     solvables.append(", solvable('"+shortform+"'(Id),[callback('OntologyClass_Handler')])");
		 }
	     }
	 }
		}
	


	 // Collecting the user defined properties from the model
					   
		StmtIterator objPropIter = model.listStatements(new SelectorImpl(null,null,model.createResource(objProp)));
		StmtIterator unicPropIter = model.listStatements(new SelectorImpl(null,null,model.createResource(uniProp)));
		StmtIterator dataPropIter = model.listStatements(new SelectorImpl(null,null,model.createResource(dataProp)));

		properties = new HashSet();

		while (objPropIter.hasNext()) {
		    properties.add(objPropIter.next().getSubject());
		}
		while(unicPropIter.hasNext()){
		    properties.add(unicPropIter.next().getSubject());
		}
		while(dataPropIter.hasNext()){
		   properties.add(dataPropIter.next().getSubject());
		} 
	
		Object[] propArray = properties.toArray();

	// Adding the user defined properties to the solvable Buffer
		//Using short forms has to be fixed.
		//Here it's working only for the daml example of march 2001

		// System.out.println("Size of properties: " + properties.size());
		if(properties.isEmpty())
		    solvables.append("]");
		else {    
		    solvables.append(",solvable('");
		    for (int i=0;i<(properties.size()-1);i++){
			String longform= propArray[i].toString();
			int index = longform.indexOf("#");
			solvables.append(longform+"'(Id1,Id2), [callback('OntologyProp_Handler')]), solvable('");
			if (args.length >=2) {
			  if (synonyms != null) {
				if (longform.length()>defaultNs.length()) {
				    String shortform= longform.substring(index+1,longform.length());
				    // System.out.println("short form is  " +shortform);
				//solvables.append(shortform+"'(Id1,Id2),[synonym('"+shortform+"'(Id1,Id2),'"+longform+"'(Id1,Id2))]), solvable('");
				    solvables.append(shortform+"'(Id1,Id2),[callback('OntologyProp_Handler')]), solvable('");
				}
			    }
			}
		    }
		    solvables.append(propArray[properties.size()-1]+"'(Id1,Id2),[callback('OntologyProp_Handler')])");
		    if (args.length >=2) {
		      if (synonyms != null) {
			    String longform = propArray[properties.size()-1].toString();
			    int index = longform.indexOf("#");
			    if (longform.length()>defaultNs.length()) {
				String shortform = longform.substring(index+1,longform.length());
				solvables.append(", solvable('"+shortform+"'(Id1,Id2),[callback('OntologyProp_Handler')])");
				//solvables.append(shortform+"'(Id1,Id2)),[synonym('"+shortform+"'(Id1,Id2),'"+longform+"'(Id1,Id2))]);
			    }
			}
		    }
		    solvables.append("]");
		}
	    }
	    
	} catch (Exception e) {
	    // System.out.println("Failed: " + e);
	    System.out.println("Failed: " + e.getMessage());
	    e.printStackTrace();
	}


	// Creating a DAMLAgent instance 


	agent = new DamlAgent(model,defaultNs,properties, classes);

	System.out.println("OAA DAML Bridge Agent ready : " +agent.toString());

	// Connects the damlAgent to the facilitator

	try {
	    agent.oaaConnect("OAA_DAML_Bridge",solvables.toString());
	} catch (Exception e) {
	    System.out.println("Agent conection failed: "+e);
	}


	    
	// register the callbacks

     
	agent.oaaRegisterCallback("DamlClass_Handler", new DamlListener(agent, "DamlClass_Handler"));
	agent.oaaRegisterCallback("OntologyClass_Handler", new DamlListener(agent, "OntologyClass_Handler"));
	agent.oaaRegisterCallback("Damlprop_Handler", new DamlListener(agent, "Damlprop_Handler"));
	agent.oaaRegisterCallback("RDFprop_Handler", new DamlListener(agent, "RDFprop_Handler"));
	agent.oaaRegisterCallback("OntologyProp_Handler", new DamlListener(agent, "OntologyProp_Handler"));
	agent.oaaRegisterCallback("List_Handler", new DamlListener(agent, "List_Handler"));
	agent.oaaRegisterCallback("Prop_Handler", new DamlListener(agent, "Prop_Handler"));
	agent.oaaRegisterCallback("damlTriple_Handler", new DamlListener(agent, "damlTriple_Handler"));
    }
    
   
}

    



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?