📄 cgxmlparser.java
字号:
String rid = CGXMLParser.getValueFromXMLLine(s,"rid");
String cid = CGXMLParser.getValueFromXMLLine(s,"cid");
Relation r = a.getRelation(((Integer) rConTable.get(rid)).intValue());
Concept c = a.getConcept(((Integer) cConTable.get(cid)).intValue());
r.setLinkedConcept(c,Integer.parseInt(label));
}
if((flag == 4) && (s.indexOf("</graph>") != -1)){
flag = 5;
}
if((flag == 5) && (s.indexOf("<conPts>") != -1)){
flag = 6;
}
if((flag == 6) && (s.indexOf("<couple") != -1)){
String idC1 = CGXMLParser.getValueFromXMLLine(s,"idC1");
String idC2 = CGXMLParser.getValueFromXMLLine(s,"idC2");
Concept c1 = a.getConcept(((Integer) cHypTable.get(idC1)).intValue());
Concept c2 = a.getConcept(((Integer) cConTable.get(idC2)).intValue());
for(Iterator j = a.getLinkedConclusionRelations(c2).iterator();j.hasNext();){
Relation r = (Relation) j.next();
for(Iterator k = r.getConceptIndexList(c2).iterator();k.hasNext();){
r.setLinkedConcept(c1,((Integer) k.next()).intValue());
}
}
a.removeConcept(c2);
}
if((flag == 6) && (s.indexOf("</conPts>") != -1)){
flag = 7;
}
if((flag == 7) && (s.indexOf("</rule>") != -1)){
flag = 0;
control = 3;
}
}
buf.close();
if(control > 0) return onto;
else return null;
}
catch(Exception e){
buf.close();
return null;
}
}
/** Save the given ontology with the given language in the file named
* ontologyFileName.cgxml. Returns true if the saving is successfully performed, false
* otherwise. */
public static boolean saveOntology(Ontology onto, String ontologyFileName,Language l,boolean trace) throws IOException{
// Tables TooCoM_id(Integer)/file_id(String)
Hashtable ctTable = new Hashtable();
Hashtable rtTable = new Hashtable();
Hashtable indTable = new Hashtable();
if(trace) System.out.println("Saving ontology " + onto.getTerm(l) + " in file " + ontologyFileName);
FileWriter file = new FileWriter(ontologyFileName);
try{
file.write(CGXMLParser.XML_VERSION + "\n");
file.write(CGXMLParser.CoGXML_DTD + "\n");
file.write("<cogxml app=\"TooCoM " + CGConstants.TOOCOM_VERSION + "\" ontology=\"" + onto.getTerm(l) + "\">\n");
file.write(" <support name=\"\">\n");
// Concept Types
file.write(" <conceptTypes>\n");
int cpt = 0;
for(Iterator i = onto.getConceptTypes().iterator();i.hasNext();cpt ++){
ConceptType ct = (ConceptType) i.next();
if(ct.equals(onto.getUniversalConceptType())){
file.write(" <ctype id=\"" + CGXML_UNIVERSAL_CONCEPT_TYPE_ID + "\" label=\"" + ct.getTerm(l) + "\" gx=\"" + ct.x + "\" gy=\"" + ct.y + "\"/>\n");
ctTable.put(new Integer(ct.getId()),CGXML_UNIVERSAL_CONCEPT_TYPE_ID);
}
else{
file.write(" <ctype id=\"c" + cpt + "\" label=\"" + ct.getTerm(l) + "\" gx=\"" + ct.x + "\" gy=\"" + ct.y + "\"/>\n");
ctTable.put(new Integer(ct.getId()),"c" + cpt);
}
if(trace) System.out.println("Concept type " + ct.getTerm(l));
}
for(Iterator i = onto.getConceptTypes().iterator();i.hasNext();cpt ++){
ConceptType ct = (ConceptType) i.next();
for(Iterator j = ct.getParents().iterator();j.hasNext();){
ConceptType parent = (ConceptType) j.next();
file.write(" <order id1=\"" + (String) ctTable.get(new Integer(ct.getId())) + "\" id2=\"" + (String) ctTable.get(new Integer(parent.getId())) + "\"/>\n");
}
}
file.write(" </conceptTypes>\n");
// Relation Types
file.write(" <relationTypes>\n");
cpt = 0;
for(Iterator i = onto.getRelationTypes().iterator();i.hasNext();cpt ++){
RelationType rt = (RelationType) i.next();
if(!rt.equals(onto.getDifferenceRelationType())){
String statement = " <rtype id=\"r" + cpt + "\" label=\"" + rt.getTerm(l) + "\" idSignature=\"";
for(Iterator j = rt.getLinkedConceptTypes().iterator();j.hasNext();){
ConceptType ct = (ConceptType) j.next();
if(ct != null){
statement += ((String) ctTable.get(new Integer(ct.getId()))) + " ";
}
else statement += CGXML_UNIVERSAL_CONCEPT_TYPE_ID + " ";
}
statement = statement.substring(0,statement.length() - 1) + "\" gx=\"" + rt.x + "\" gy=\"" + rt.y + "\"/>\n";
file.write(statement);
rtTable.put(new Integer(rt.getId()),"r" + cpt);
}
else{
file.write(" <rtype id=\"" + CGXML_DIFFERENCE_RELATION_TYPE_ID + "\" label=\"" + rt.getTerm(l) +
"\" idSignature=\"" + CGXML_UNIVERSAL_CONCEPT_TYPE_ID + " " + CGXML_UNIVERSAL_CONCEPT_TYPE_ID + "\" gx=\"" + rt.x + "\" gy=\"" + rt.y + "\"/>\n");
rtTable.put(new Integer(rt.getId()),CGXML_DIFFERENCE_RELATION_TYPE_ID);
}
if(trace) System.out.println("Relation type " + rt.getTerm(l));
}
for(Iterator i = onto.getRelationTypes().iterator();i.hasNext();cpt ++){
RelationType rt = (RelationType) i.next();
for(Iterator j = rt.getParents().iterator();j.hasNext();){
RelationType parent = (RelationType) j.next();
file.write(" <order id1=\"" + (String) rtTable.get(new Integer(rt.getId())) + "\" id2=\"" + (String) rtTable.get(new Integer(parent.getId())) + "\"/>\n");
}
}
file.write(" </relationTypes>\n");
file.write(" <nestingTypes>\n");
file.write(" </nestingTypes>\n");
// Individuals
file.write(" <conformity>\n");
cpt = 0;
for(Iterator i = onto.getIndividuals().iterator();i.hasNext();cpt ++){
Individual ind = (Individual) i.next();
if(ind.getType() != null){
file.write(" <marker id=\"m" + cpt + "\" label=\"" + ind.getTerm(l) + "\" idType=\"" + ctTable.get(new Integer(ind.getType().getId())) + "\"/>\n");
}
else{
file.write(" <marker id=\"m" + cpt + "\" label=\"" + ind.getTerm(l) + "\"/>\n");
}
indTable.put(new Integer(ind.getId()),"m" + cpt);
if(trace) System.out.println("Individual " + ind.getTerm(l));
}
file.write(" </conformity>\n");
for(Iterator i = NamedObject.sortListByName(onto.getConceptTypes(),l).iterator();i.hasNext();){
ConceptType ct = (ConceptType) i.next();
// Abstract concept type
if(ct.hasAxiomSchema("toocom.ocgl.ConceptAbstraction")) file.write(" <subprop subid=\"abstract\" id=\"" + ctTable.get(new Integer(ct.getId())) + "\"/>\n");
// Disjonctions
for(Iterator j = ct.getAxiomSchemata("toocom.ocgl.ConceptDisjunction").iterator();j.hasNext();){
ConceptType dis = (ConceptType) ((ConceptDisjunction) j.next()).getTheOtherPrimitive(ct);
if(ct.getTerm(l).compareTo(dis.getTerm(l)) >= 0)
file.write(" <subprop subid=\"disjoint\" id1=\"" + ctTable.get(new Integer(ct.getId())) + "\" id2=\"" + ctTable.get(new Integer(dis.getId())) + "\"/>\n");
}
// Partition
if(ct.hasAxiomSchema("toocom.ocgl.ConceptPartition")) file.write(" <subprop subid=\"partition\" id=\"" + ctTable.get(new Integer(ct.getId())) + "\"/>\n");
}
for(Iterator i = NamedObject.sortListByName(onto.getRelationTypes(),l).iterator();i.hasNext();){
RelationType rt = (RelationType) i.next();
// Exclusivities
RelationExclusivity excluSchema = (RelationExclusivity) rt.getAxiomSchemata("toocom.ocgl.RelationExclusivity").getFirst();
if(excluSchema != null){
RelationType exclu = (RelationType) excluSchema.getTheOtherPrimitive(rt);
if(rt.getTerm(l).compareTo(exclu.getTerm(l)) >= 0){
file.write(" <subprop subid=\"exclusivity\" id1=\"" + rtTable.get(new Integer(rt.getId())) + "\" id2=\"" + rtTable.get(new Integer(exclu.getId())) + "\"/>\n");
}
}
// Incompatibilities
for(Iterator j = rt.getAxiomSchemata("toocom.ocgl.RelationIncompatibility").iterator();j.hasNext();){
RelationType incomp = (RelationType) ((AxiomSchemaTwo) j.next()).getTheOtherPrimitive(rt);
if((incomp != null) && (rt.getTerm(l).compareTo(incomp.getTerm(l)) >= 0)){
file.write(" <subprop subid=\"incompatibility\" id1=\"" + rtTable.get(new Integer(rt.getId())) + "\" id2=\"" + rtTable.get(new Integer(incomp.getId())) + "\"/>\n");
}
}
// Symmetry
if(rt.hasAxiomSchema("toocom.ocgl.RelationSymmetry")) file.write(" <subprop subid=\"symmetry\" id=\"" + rtTable.get(new Integer(rt.getId())) + "\"/>\n");
// Antisymmetry
if(rt.hasAxiomSchema("toocom.ocgl.RelationAntisymmetry")) file.write(" <subprop subid=\"antisymmetry\" id=\"" + rtTable.get(new Integer(rt.getId())) + "\"/>\n");
// Reflexivity
if(rt.hasAxiomSchema("toocom.ocgl.RelationReflexivity")) file.write(" <subprop subid=\"reflexivity\" id=\"" + rtTable.get(new Integer(rt.getId())) + "\"/>\n");
// Irreflexivity
if(rt.hasAxiomSchema("toocom.ocgl.RelationIrreflexivity")) file.write(" <subprop subid=\"irreflexivity\" id=\"" + rtTable.get(new Integer(rt.getId())) + "\"/>\n");
// Transitivity
if(rt.hasAxiomSchema("toocom.ocgl.RelationTransitivity")) file.write(" <subprop subid=\"transitivity\" id=\"" + rtTable.get(new Integer(rt.getId())) + "\"/>\n");
// Min Cardinalities
for(Iterator j = rt.getAxiomSchemata("toocom.ocgl.RelationMinCardinality").iterator();j.hasNext();){
RelationMinCardinality minCard = (RelationMinCardinality) j.next();
file.write(" <subprop subid=\"mincardinality\" id=\"" + rtTable.get(new Integer(rt.getId())) + "\" index=\"" + minCard.getIndex() + "\" value=\"" + minCard.getValue() + "\"/>\n");
}
// Max Cardinalities
for(Iterator j = rt.getAxiomSchemata("toocom.ocgl.RelationMaxCardinality").iterator();j.hasNext();){
RelationMaxCardinality maxCard = (RelationMaxCardinality) j.next();
file.write(" <subprop subid=\"maxcardinality\" id=\"" + rtTable.get(new Integer(rt.getId())) + "\" index=\"" + maxCard.getIndex() + "\" value=\"" + maxCard.getValue() + "\"/>\n");
}
}
file.write(" </support>\n");
// Axioms
Hashtable hypConTable = new Hashtable();
Hashtable hypRelTable = new Hashtable();
Hashtable conConTable = new Hashtable();
Hashtable conRelTable = new Hashtable();
for(Iterator i = onto.getNotFinalizedAxioms().iterator();i.hasNext();){
Axiom a = (Axiom) i.next();
hypConTable.clear();
hypRelTable.clear();
conConTable.clear();
conRelTable.clear();
file.write(" <rule id=\"" + a.getTerm(l) + "\">\n");
file.write(" <subprop subid=\"note\" text=\"");
if(a.getNote() != null) file.write(a.getNote() + "\"/>\n");
else file.write("\"/>\n");
file.write(" <subprop subid=\"hard\" value=\"");
if(a.isHard()) file.write("yes\"/>\n");
else file.write("no\"/>\n");
// Hypothesis
file.write(" <hypt>\n");
file.write(" <graph id=\"hypothesis\">\n");
cpt = 0;
for(Iterator j = a.getHypothesisConcepts().iterator();j.hasNext();cpt ++){
Concept c = (Concept) j.next();
file.write(" <concept id=\"c" + cpt + "\" ");
if(c.getType() != null) file.write("idType=\"" + ctTable.get(new Integer(c.getType().getId())) + "\" ");
Individual ind = c.getIndividual();
if(ind != null) file.write("idMarker=\"" + indTable.get(new Integer(ind.getId())) + "\" ");
file.write("gx=\"" + c.x + "\" gy=\"" + c.y + "\"/>\n");
hypConTable.put(new Integer(c.getId()),"c" + cpt);
}
cpt = 0;
for(Iterator j = a.getHypothesisRelations().iterator();j.hasNext();cpt ++){
Relation r = (Relation) j.next();
file.write(" <relation id=\"r" + cpt + "\" ");
if(r.getType() != null) file.write("idType=\"" + rtTable.get(new Integer(r.getType().getId())) + "\" ");
file.write("gx=\"" + r.x + "\" gy=\"" + r.y + "\"/>\n");
hypRelTable.put(new Integer(r.getId()),"r" + cpt);
}
for(Iterator j = a.getHypothesisRelations().iterator();j.hasNext();cpt ++){
Relation r = (Relation) j.next();
for(int k = 1;k <= r.getArity();k ++){
Concept c = r.getLinkedConcept(k);
if(c != null){
file.write(" <edge label=\"" + k + "\" rid=\"" + hypRelTable.get(new Integer(r.getId())) + "\" cid=\"" + hypConTable.get(new Integer(c.getId())) + "\"/>\n");
}
}
}
file.write(" </graph>\n");
file.write(" </hypt>\n");
// Conclusion
file.write(" <conc>\n");
file.write(" <graph id=\"conclusion\">\n");
cpt = 0;
for(Iterator j = a.getConclusionConcepts().iterator();j.hasNext();cpt ++){
Concept c = (Concept) j.next();
file.write(" <concept id=\"c" + cpt + "\" ");
if(c.getType() != null) file.write("idType=\"" + ctTable.get(new Integer(c.getType().getId())) + "\" ");
Individual ind = c.getIndividual();
if(ind != null) file.write("idMarker=\"" + indTable.get(new Integer(ind.getId())) + "\" ");
file.write("gx=\"" + c.x + "\" gy=\"" + c.y + "\"/>\n");
conConTable.put(new Integer(c.getId()),"c" + cpt);
}
cpt = 0;
for(Iterator j = a.getConclusionRelations().iterator();j.hasNext();cpt ++){
Relation r = (Relation) j.next();
file.write(" <relation id=\"r" + cpt + "\" ");
if(r.getType() != null) file.write("idType=\"" + rtTable.get(new Integer(r.getType().getId())) + "\" ");
file.write("gx=\"" + r.x + "\" gy=\"" + r.y + "\"/>\n");
conRelTable.put(new Integer(r.getId()),"r" + cpt);
}
for(Iterator j = a.getConclusionRelations().iterator();j.hasNext();cpt ++){
Relation r = (Relation) j.next();
for(int k = 1;k <= r.getArity();k ++){
Concept c = r.getLinkedConcept(k);
if(c != null){
file.write(" <edge label=\"" + k + "\" rid=\"" + conRelTable.get(new Integer(r.getId())) + "\" cid=\"" + conConTable.get(new Integer(c.getId())) + "\"/>\n");
}
}
}
file.write(" </graph>\n");
file.write(" </conc>\n");
// Common Concepts
file.write(" <conPts>\n");
for(Iterator j = a.getHypothesisConclusionConcepts().iterator();j.hasNext();){
Concept c = (Concept) j.next();
file.write(" <couple idC1=\"" + hypConTable.get(new Integer(c.getId())) + "\" idC2=\"" + conConTable.get(new Integer(c.getId())) + "\"/>\n");
}
file.write(" </conPts>\n");
file.write(" </rule>\n");
}
file.write("</cogxml>");
file.close();
return true;
}
catch(Exception e){
file.close();
return false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -