package edu.stanford.nlp.ling;
/**
* Something that implements the <code>Label</code> interface can act as a
* constituent, node, or word label with linguistic attributes.
* A <code>Label</code> is required to have a "primary" <code>String</code>
* <code>value()</code> (although this may be null). This is referred to as
* its <code>value</code>.
* <p>
* Implementations of Label split into two groups with
* respect to equality. Classes that extend ValueLabel define equality
* solely in terms of String equality of its value (secondary facets may be
* present but are ignored for purposes of equality), and have equals and
* compareTo defined across all subclasses of ValueLabel. This behavior
* should not be changed. Other classes that implement Label define equality only
* with their own type and require all fields of the type to be equal.
* <p>
* A subclass that extends another Label class <i>should</i> override
* the definition of <code>labelFactory()</code>, since the contract for
* this method is that it should return a factory for labels of the
* exact same object type.
* @author Christopher Manning
*/
public interface Label {
/**
* Return a String representation of just the "main" value of this label.
*
* @return the "value" of the label
*/
public String value();
/**
* Set the value for the label (if one is stored).
*
* @param value - the value for the label
*/
public void setValue(String value);
/**
* Return a String representation of the label. For a multipart label,
* this will return all parts. The <code>toString()</code> method
* causes a label to spill its guts. It should always return an
* empty string rather than <code>null</code> if there is no value.
*
* @return a text representation of the full label contents
*/
public String toString();
/**
* Set the contents of this label to this <code>String</code>
* representing the
* complete contents of the label. A class implementing label may
* throw an <code>UnsupportedOperationException</code> for this
* method (only). Typically, this method would do
* some appropriate decoding of the string in a way that sets
* multiple fields in an inverse of the <code>toString()</code>
* method.
*
* @param labelStr the String that translates into the content of the
* label
*/
public void setFromString(String labelStr);
/**
* Returns a factory that makes labels of the exact same type as this one.
* May return <code>null</code> if no appropriate factory is known.
*
* @return the LabelFactory for this kind of label
*/
public LabelFactory labelFactory();
}