/*
* AttributeRelation.java
*
* Yaoyong Li 22/03/2007
*
* $Id: AttributeRelation.java, v 1.0 2007-03-22 12:58:16 +0000 yaoyong $
*/
package gate.learning;
import gate.util.GateException;
import java.util.ArrayList;
import org.jdom.Element;
/**
* Extend the Attribute class a bit in order to accommodate the two arguments of
* one relation.
*/
public class AttributeRelation extends Attribute {
/** Annotation feature for argument 1. */
private String arg1;
/** Annotation feature for argument 2. */
private String arg2;
/**
* Constuctor Create an AttributeRelation object from an xml element.
*/
public AttributeRelation(Element jdomElement) throws GateException {
// find the name
Element anElement = jdomElement.getChild("NAME");
if(anElement == null)
throw new GateException(
"Required element \"NAME\" not present in attribute:\n"
+ jdomElement.toString() + "!");
else name = anElement.getTextTrim();
// find the semantic type
anElement = jdomElement.getChild("SEMTYPE");
if(anElement == null)
throw new GateException(
"Required element \"SEMTYPE\" not present in attribute:\n"
+ jdomElement.toString() + "!");
else {
if(anElement.getTextTrim().equalsIgnoreCase("NOMINAL"))
this.semantic_type = Attribute.NOMINAL;
else if(anElement.getTextTrim().equalsIgnoreCase("NUMERIC"))
this.semantic_type = Attribute.NUMERIC;
else if(anElement.getTextTrim().equalsIgnoreCase("BOOLEAN"))
this.semantic_type = Attribute.BOOLEAN;
}
// find the type
anElement = jdomElement.getChild("TYPE");
if(anElement == null)
throw new GateException(
"Required element \"TYPE\" not present in attribute:\n"
+ jdomElement.toString() + "!");
else type = anElement.getTextTrim();
// find the feature if present
anElement = jdomElement.getChild("FEATURE");
if(anElement != null) feature = anElement.getTextTrim();
// find the arg1 if present
anElement = jdomElement.getChild("ARG1");
if(anElement != null) arg1 = anElement.getTextTrim();
// find the arg2 if present
anElement = jdomElement.getChild("ARG2");
if(anElement != null) arg2 = anElement.getTextTrim();
// find the position if present
anElement = jdomElement.getChild("POSITION");
if(anElement == null)
position = 0;
else position = Integer.parseInt(anElement.getTextTrim());
// find the weighting if present
anElement = jdomElement.getChild("WEIGHTING");
if(anElement == null)
weighting = 1.0;
else weighting = Double.parseDouble(anElement.getTextTrim());
// find the class if present
// confidence_feature
anElement = jdomElement.getChild("CLASS");
isClass = anElement != null;
}
public AttributeRelation() {
name = null;
type = null;
feature = null;
arg1 = null;
arg2 = null;
isClass = false;
position = 0;
weighting = 1.0;
confidence_feature = null;
}
public String toString() {
StringBuffer res = new StringBuffer();
res.append("Name: " + name + "\n");
res.append("SemType: " + this.semantic_type + "\n");
res.append("Type: " + type + "\n");
res.append("Feature: " + feature + "\n");
res.append("Arg1: " + arg1 + "\n");
res.append("Arg2: " + arg2 + "\n");
res.append("Weighting: " + weighting + "\n");
if(isClass) res.append("Class");
return res.toString();
}
public void setArg1(String arg) {
this.arg1 = arg;
}
public String getArg1() {
return arg1;
}
public void setArg2(String arg) {
this.arg2 = arg;
}
public String getArg2() {
return arg2;
}
public String toXML() {
StringBuffer sb = new StringBuffer();
sb.append(" ").append("<ATTRIBUTE>\n");
sb.append(" ").append("<NAME>").append(this.name).append("</NAME>\n");
sb.append(" ").append("<SEMTYPE>");
if(this.semantic_type == Attribute.NOMINAL)
sb.append("NOMINAL");
else if(this.semantic_type == Attribute.BOOLEAN)
sb.append("BOOLEAN");
else sb.append("NUMERIC");
sb.append("</SEMTYPE>\n");
sb.append(" ").append("<TYPE>").append(this.type).append("</TYPE>\n");
if(feature != null) {
sb.append(" ").append("<FEATURE>").append(this.feature).append(
"</FEATURE>\n");
}
if(arg1 != null) {
sb.append(" ").append("<ARG1>").append(this.arg1)
.append("</ARG1>\n");
}
if(arg2 != null) {
sb.append(" ").append("<ARG2>").append(this.arg2)
.append("</ARG2>\n");
}
sb.append(" ").append("<POSITION>").append(this.position).append(
"</POSITION>\n");
if(isClass) sb.append(" ").append("<CLASS/>\n");
sb.append(" ").append("</ATTRIBUTE>\n");
return sb.toString();
}
}