⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cgxmlparser.java

📁 toocom源代码,主要应用在本体匹配方面!
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
					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 + -