return null;
}
DocumentInfo doc = (DocumentInfo)root;
final KeyManager keyManager = controller.getExecutable().getKeyManager();
KeyDefinitionSet selectedKeySet = staticKeySet;
if (selectedKeySet == null) {
String givenkeyname = argument[0].evaluateItem(context).getStringValue();
StructuredQName qName = null;
try {
qName = StructuredQName.fromLexicalQName(
givenkeyname, false,
nsContext);
} catch (XPathException err) {
dynamicError("Invalid key name: " + err.getMessage(), "XTDE1260", context);
}
selectedKeySet = keyManager.getKeyDefinitionSet(qName);
if (selectedKeySet == null) {
dynamicError("Key '" + givenkeyname + "' has not been defined", "XTDE1260", context);
return null;
}
}
// if (internal) {
// System.err.println("Using key " + fprint + " on doc " + doc);
// }
// If the second argument is a singleton, we evaluate the function
// directly; otherwise we recurse to evaluate it once for each Item
// in the sequence.
Expression expression = argument[1];
SequenceIterator allResults;
if (Cardinality.allowsMany(expression.getCardinality())) {
final XPathContext keyContext = context;
final DocumentInfo document = doc;
final KeyDefinitionSet keySet = selectedKeySet;
MappingFunction map = new MappingFunction() {
// Map a value to the sequence of nodes having that value as a key value
public SequenceIterator map(Item item) throws XPathException {
return keyManager.selectByKey(
keySet, document, (AtomicValue)item, keyContext);