001 package edu.upenn.cis.propbank_shen;
002
003 import java.util.LinkedList;
004 import java.util.List;
005
006 import org.w3c.dom.Node;
007 import org.w3c.dom.NamedNodeMap;
008 import org.w3c.dom.Attr;
009
010
011 /**
012 This class represents a "role" in the propbank lexical guidelines.
013
014 A role may consist of a number of things. All roles have an associated
015 argument label.
016 @see edu.upenn.cis.propbank_shen.ArgLabel
017 @author Scott Cotton
018 */
019 public class Role {
020
021 /** the node of the xml document from which this thing was made */
022 protected Node node;
023 /** a description of the role */
024 protected String descr;
025 /** the argument label associated with the role
026 @see edu.upenn.cis.propbank_shen.ArgLabel */
027 protected ArgLabel arglabel;
028 /** the modifying label associated with the roleset, or null
029 if there is none.
030 @see edu.upenn.cis.propbank_shen.ModLabel
031 */
032 protected ModLabel modlabel;
033 /**
034 A list of the verbnet roles associated with the role.
035 @see edu.upenn.cis.propbank_shen.VNRole
036 */
037 protected List vnroles;
038
039 /**
040 construct a Role object from a role node in a frameset
041 xml document.
042 */
043 public Role(Node n) throws CorruptDataException
044 {
045 node = n;
046 NamedNodeMap attrs = n.getAttributes();
047 int len = attrs.getLength();
048 String anm = null;
049 for(int i=0; i<len; i++) {
050 Attr attr = (Attr) attrs.item(i);
051 anm = attr.getNodeName();
052 if (anm.equals("descr")) {
053 descr = attr.getNodeValue();
054 } else if (anm.equals("n")) {
055 arglabel = ArgLabel.ofString("Arg" + attr.getNodeValue());
056 } else if (anm.equals("f")) {
057 modlabel = ModLabel.ofString(attr.getNodeValue());
058 }
059 }
060 vnroles = new LinkedList();
061 Node nc = node.getFirstChild();
062 while (nc != null) {
063 if (nc.getNodeName().equals("vnrole")) {
064 vnroles.add((Object) new VNRole(nc));
065 }
066 nc = nc.getNextSibling();
067 }
068 }
069
070 /** return the brief description of the role */
071 public String getDescription()
072 {
073 return descr;
074 }
075
076 /** return the associated argument label */
077 public ArgLabel getArgLabel()
078 {
079 return arglabel;
080 }
081
082 /**
083 return the associated modifying label, or null
084 if there is no such modifying label.
085 @see edu.upenn.cis.propbank_shen.ModLabel
086 */
087 public ModLabel getModLabel()
088 {
089 return modlabel;
090 }
091
092 /** return true iff this role has a modifying label
093 @see edu.upenn.cis.propbank_shen.ModLabel */
094 public boolean hasModLabel()
095 {
096 return modlabel != null;
097 }
098
099 /**
100 return a list (possibly empty) of the associated VerbNet roles
101 see also the <a href="http://www.cis.upenn.edu/verbnet">VerbNet website</a>
102 */
103 public List getVNRoles()
104 {
105 return vnroles;
106 }
107 }