org.biojava.bio.program.sax.QName Maven / Gradle / Ivy
/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
package org.biojava.bio.program.sax;
import java.util.StringTokenizer;
/**
* A utility class with package level visibility for dealing
* element and attribute names that are potentially
* namespace-qualified - qNames e.g. biojava:MyElement
*
* It takes a qName, and allows the SAXParser applications writers to
* obtain prefix and local names. Note, whether these
* values are reported or not, or reported as unknown, should be
* controlled by the namespace and namespace-prefix properties
* of the parser.
*
* For attributes, the LocalName will be reported as an empty string
* if the attribute should not be reported by the parser due to
* a namespace configuration.
*
*
* Copyright © 2000 Cambridge Antibody Technology Group plc.
*
*
* Primary author -
* - Simon Brocklehurst (CAT)
*
* Other authors -
* - Tim Dilks (CAT)
*
- Colin Hardman (CAT)
*
- Stuart Johnston (CAT)
*
- Mathieu Wiepert (Mayo Foundation)
*
*/
final class QName {
private String oLocalName = "";
private String oPrefixName = "";
private String oQName = "";
private String oURI = "";
private NamespaceConfigurationIF oNamespace;
private StringTokenizer oTokenizer;
/**
* Creates a new QName
instance.
*
* @param poNamespace a NamespaceConfigurationIF
value
*/
public QName(NamespaceConfigurationIF poNamespace) {
oNamespace = poNamespace;
}
/**
* Sets the qName for the object. When the qName is set,
* local names and namespace prefixes are automatically
* accessible from calling relevant methods on th object.
*
* @param poQName a String
value of qName. For
* example, it could be "biojava:MyElement"
*/
public QName(NamespaceConfigurationIF poNamespace,String poQName) {
oNamespace = poNamespace;
this.setQName(poQName);
}
/**
* Sets the qName for the object. When the qName is set,
* local names and namespace prefixes are automatically
* accessible from calling relevant methods on the object.
*
* @param poQName a String
value of qName. For
* example, it could be "biojava:MyElement"
*/
public void setQName(String poQName) {
this.reset();
oQName = poQName;
if (poQName.indexOf(':') != -1) {
//if name contains a colon, get prefix and local name
oTokenizer = new StringTokenizer(oQName,":");
oPrefixName = oTokenizer.nextToken();
if ( (oPrefixName.equals("xmlns")) &&
(!oNamespace.getNamespacePrefixes()) ) {
//prefix != "xmlns" and getNameSpacePrefixes=true
//leave LocalName as empty string
} else {
//special case for xml:space
oLocalName = oTokenizer.nextToken();
}
if (oPrefixName.equals("xml")) {
//Set up namespace correctly for XSLT
oURI = "http://www.w3.org/XML/1998/namespace";
}
else if (oPrefixName.equals("xmlns")) {
//means that oNamespace.getNamespacePrefixes() = true
if (oTokenizer.hasMoreTokens()) {
if (oTokenizer.nextToken().equals("biojava")) {
//looking for xmlns:biojava and processing
//namespace prefixes
oURI = oNamespace.getURIFromPrefix("biojava");
}
}
} else {
oURI = oNamespace.getURIFromPrefix(oPrefixName);
}
} else {
//if name or attribute does not have a namespace,
//local name is QName.
oPrefixName = "";
if ( (oQName.equals("xmlns")) &&
(!oNamespace.getNamespacePrefixes()) ) {
//leave LocalName as empty string
} else {
oLocalName = oQName;
}
}
}
/**
* Gets the raw QName - Parser writers should
* determine if the parser should report it or not
*
* @return a String
value
*/
public String getQName() {
return oQName;
}
/**
* Gets the raw Prefix - Parser writers should
* determine if the parser should report it or not
* (and whether it should be used to get the namespace
* URI from the parser).
*
* @return a String
value
*/
public String getPrefixName() {
return oPrefixName;
}
/**
* Gets the raw LocalName - Parser writers should
* determine if the parser should report it or not.
*
* @return a String
value
*/
public String getLocalName() {
return oLocalName;
}
public String getURI() {
return oURI;
}
/**
* Reset private fields to allow partial object reuse
*
*/
private void reset() {
oLocalName = "";
oPrefixName = "";
oURI = "";
}
}