gpt4 book ai didi

net.sf.saxon.query.XQueryFunction类的使用及代码示例

转载 作者:知者 更新时间:2024-03-25 08:29:05 24 4
gpt4 key购买 nike

本文整理了Java中net.sf.saxon.query.XQueryFunction类的一些代码示例,展示了XQueryFunction类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。XQueryFunction类的具体详情如下:
包路径:net.sf.saxon.query.XQueryFunction
类名称:XQueryFunction

XQueryFunction介绍

[英]A user-defined function in an XQuery module
[中]XQuery模块中的用户定义函数

代码示例

代码示例来源:origin: org.opengis.cite.saxon/saxon9

String functionKey = XQueryFunction.getIdentificationKey(
    functionName, arguments.length);
XQueryFunction fd = (XQueryFunction)functions.get(functionKey);
if (fd != null) {
  UserFunctionCall ufc = new UserFunctionCall();
  ufc.setFunctionName(fd.getFunctionName());
  ufc.setArguments(arguments);
  ufc.setStaticType(fd.getResultType());
  UserFunction fn = fd.getUserFunction();
  if (fn == null) {
    fd.registerReference(ufc);
    ufc.setConfirmed(true);
  } else {
    ufc.setFunction(fn);
    ExpressionVisitor visitor = ExpressionVisitor.make(fd.getStaticContext());
    visitor.setExecutable(fd.getExecutable());
    ufc.checkFunctionCall(fn, visitor);

代码示例来源:origin: org.opengis.cite.saxon/saxon9

/**
 * Fixup all references to global functions. This method is called
 * on completion of query parsing. Each XQueryFunction is required to
 * bind all references to that function to the object representing the run-time
 * executable code of the function.
 * <p>
 * This method is for internal use.
 * @param env the static context for the main query body.
 */
protected void fixupGlobalFunctions(QueryModule env) throws XPathException {
  ExpressionVisitor visitor = ExpressionVisitor.make(env);
  Iterator iter = functions.values().iterator();
  while (iter.hasNext()) {
    XQueryFunction fn = (XQueryFunction)iter.next();
    fn.compile();
  }
  iter = functions.values().iterator();
  while (iter.hasNext()) {
    XQueryFunction fn = (XQueryFunction)iter.next();
    visitor.setExecutable(fn.getExecutable());
    fn.checkReferences(visitor);
  }
}

代码示例来源:origin: net.sourceforge.saxon/saxon

/**
 * Look for cyclic variable references that go via one or more function calls
 * @param f a used-defined function
 * @param referees a list of variables and functions that refer directly or indirectly to this variable
 * @param globalFunctionLibrary the library containing all global functions
 */
private static void lookForFunctionCycles(
    XQueryFunction f, Stack referees, XQueryFunctionLibrary globalFunctionLibrary) throws XPathException {
  Expression body = f.getBody();
  referees.push(f);
  List list = new ArrayList(10);
  ExpressionTool.gatherReferencedVariables(body, list);
  for (int i=0; i<list.size(); i++) {
    Binding b = (Binding)list.get(i);
    if (b instanceof GlobalVariable) {
      ((GlobalVariable)b).lookForCycles(referees, globalFunctionLibrary);
    }
  }
  list.clear();
  ExpressionTool.gatherCalledFunctionNames(body, list);
  for (int i=0; i<list.size(); i++) {
    XQueryFunction qf = globalFunctionLibrary.getDeclarationByKey((String)list.get(i));
    if (!referees.contains(qf)) {
      // recursive function calls are allowed
      lookForFunctionCycles(qf, referees, globalFunctionLibrary);
    }
  }
  referees.pop();
}

代码示例来源:origin: net.sourceforge.saxon/saxon

/**
 * Get the function with a given name and arity. This method is provided so that XQuery functions
 * can be called directly from a Java application. Note that there is no type checking or conversion
 * of arguments when this is done: the arguments must be provided in exactly the form that the function
 * signature declares them.
 * @param uri the uri of the function name
 * @param localName the local part of the function name
 * @param arity the number of arguments.
 * @return the function identified by the URI, local name, and arity; or null if there is no such function
 */
public UserFunction getUserDefinedFunction(String uri, String localName, int arity) {
  String functionKey = XQueryFunction.getIdentificationKey(uri, localName, arity);
  XQueryFunction fd = (XQueryFunction)functions.get(functionKey);
  if (fd==null) {
    return null;
  }
  return fd.getUserFunction();
}

代码示例来源:origin: net.sourceforge.saxon/saxon

/**
 * Check that all the types used in the signature of an imported function
 * are available in the module of the caller of the function
 * @param fd the declaration of the imported function
 * @throws XPathException if an error is found
 */
public void checkImportedFunctionSignature(XQueryFunction fd) throws XPathException {
  checkImportedType(fd.getResultType(), fd);
  for (int a=0; a<fd.getNumberOfArguments(); a++) {
    SequenceType argType = fd.getArgumentTypes()[a];
    checkImportedType(argType, fd);
  }
}

代码示例来源:origin: net.sf.saxon/Saxon-HE

/**
 * Fixup all references to global functions. This method is called
 * on completion of query parsing. Each XQueryFunction is required to
 * bind all references to that function to the object representing the run-time
 * executable code of the function.
 * <p>This method is for internal use.</p>
 *
 * @param env the static context for the main query body.
 * @throws net.sf.saxon.trans.XPathException
 *          if an error occurs
 */
protected void fixupGlobalFunctions(/*@NotNull*/ QueryModule env) throws XPathException {
  ExpressionVisitor visitor = ExpressionVisitor.make(env);
  for (XQueryFunction fn : functions.values()) {
    fn.compile();
  }
  for (XQueryFunction fn : functions.values()) {
    fn.checkReferences(visitor);
  }
}

代码示例来源:origin: net.sourceforge.saxon/saxon

XQueryFunction func = new XQueryFunction();
func.setFunctionName(qName);
func.setResultType(SequenceType.ANY_SEQUENCE);
func.setBody(null);
func.setLineNumber(t.getLineNumber(offset));
func.setColumnNumber(t.getColumnNumber(offset));
func.setSystemId(env.getSystemId());
func.setStaticContext((QueryModule)env);
func.setMemoFunction(memoFunction);
func.setExecutable(getExecutable());
func.setUpdating(isUpdating);
  arg.setRequiredType(paramType);
  arg.setVariableQName(argQName);
  func.addArgument(arg);
  declareRangeVariable(arg);
  if (t.currentToken == Token.RPAR) {
  t.setState(Tokenizer.SEQUENCE_TYPE_STATE);
  nextToken();
  func.setResultType(parseSequenceType());
  t.setState(Tokenizer.DEFAULT_STATE);
  nextToken();
  func.setBody(parseExpression());
  expect(Token.RCURLY);
UserFunctionParameter[] params = func.getParameterDefinitions();
for (int i = 0; i < params.length; i++) {

代码示例来源:origin: net.sf.saxon/Saxon-HE

XQueryFunction func = new XQueryFunction();
func.setFunctionName(qName);
func.setResultType(SequenceType.ANY_SEQUENCE);
func.setBody(null);
Location loc = makeNestedLocation(env.getContainingLocation(), t.getLineNumber(offset), t.getColumnNumber(offset), null);
func.setLocation(loc);
func.setStaticContext((QueryModule) env);
func.setMemoFunction(memoFunction);
func.setUpdating(annotations.includes(Annotation.UPDATING));
func.setAnnotations(annotations);
    arg.setRequiredType(paramType);
    arg.setVariableQName(argQName);
    func.addArgument(arg);
    declareRangeVariable(arg);
    if (t.currentToken == Token.RPAR) {
nextToken();
if (t.currentToken == Token.AS) {
  if (func.isUpdating()) {
    grumble("Cannot specify a return type for an updating function", "XUST0028");
  func.setResultType(parseSequenceType());
    body.setRetainedStaticContext(env.makeRetainedStaticContext());
    setLocation(body);
    func.setBody(body);
  } else {
    Expression body = parseExpression();

代码示例来源:origin: net.sf.saxon/Saxon-HE

XQueryFunction fd = functions.get(functionName);
if (fd != null) {
  if (fd.isPrivate() && fd.getStaticContext() != env) {
    reasons.add("Cannot call the private XQuery function " +
        functionName.getComponentName().getDisplayName() + " from outside its module");
  ufc.setFunctionName(fd.getFunctionName());
  ufc.setArguments(arguments);
  ufc.setStaticType(fd.getResultType());
  UserFunction fn = fd.getUserFunction();
  if (fn == null) {
    fd.registerReference(ufc);
  } else {
    ufc.setFunction(fn);

代码示例来源:origin: org.opengis.cite.saxon/saxon9

/**
 * Register a user-defined XQuery function
 * @param function the function to be registered
 * @throws XPathException if there is an existing function with the same name and arity
 */
public void declareFunction(XQueryFunction function) throws XPathException {
  String keyObj = function.getIdentificationKey();
  XQueryFunction existing = (XQueryFunction)functions.get(keyObj);
  if (existing != null) {
    XPathException err = new XPathException("Duplicate definition of function " +
        function.getDisplayName() +
        " (see line " + existing.getLineNumber() + " in " + existing.getSystemId() + ')');
    err.setErrorCode("XQST0034");
    err.setIsStaticError(true);
    err.setLocator(function);
    throw err;
  }
  functions.put(keyObj, function);
}

代码示例来源:origin: net.sf.saxon/Saxon-HE

/**
 * Register a user-defined XQuery function.
 * <p>This method is intended for internal use only.</p>
 *
 * @param function the function being declared
 * @throws net.sf.saxon.trans.XPathException
 *          if an error occurs, for example
 *          a duplicate function name
 */
public void declareFunction(/*@NotNull*/ XQueryFunction function) throws XPathException {
  Configuration config = getConfiguration();
  if (function.getNumberOfArguments() == 1) {
    StructuredQName name = function.getFunctionName();
    SchemaType t = config.getSchemaType(name);
    if (t != null && t.isAtomicType()) {
      XPathException err = new XPathException("Function name " + function.getDisplayName() +
          " clashes with the name of the constructor function for an atomic type");
      err.setErrorCode("XQST0034");
      err.setIsStaticError(true);
      throw err;
    }
  }
  XQueryFunctionLibrary local = getLocalFunctionLibrary();
  local.declareFunction(function);
  //if (!function.isPrivate()) {
  QueryModule main = getTopLevelModule();
  main.globalFunctionLibrary.declareFunction(function);
  //}
}

代码示例来源:origin: com.helger/ph-schematron

aXQueryFunction.compile ();
aFunctionResolver.addUniqueFunction (aXQueryFunction.getFunctionName ().getNamespaceBinding ().getURI (),
                   aXQueryFunction.getFunctionName ().getLocalPart (),
                   aXQueryFunction.getNumberOfArguments (),
                   new XPathFunctionFromUserFunction (aConfiguration,
                                    aXQController,
                                    aXQueryFunction.getUserFunction ()));

代码示例来源:origin: net.sf.saxon/Saxon-HE

UserFunctionParameter[] params = getParameterDefinitions();
  for (int i = 0; i < params.length; i++) {
    params[i].setSlotNumber(i);
    rsc = getStaticContext().makeRetainedStaticContext();
    body.setRetainedStaticContext(rsc);
  compiledFunction.setFunctionName(functionName);
  compiledFunction.setParameterDefinitions(params);
  compiledFunction.setResultType(getResultType());
  compiledFunction.setLineNumber(location.getLineNumber());
  compiledFunction.setSystemId(location.getSystemId());
fixupReferences();

代码示例来源:origin: msokolov/lux

private FunctionDefinition[] getFunctionDefinitions() {
  ArrayList<FunctionDefinition> functionDefinitions = new ArrayList<FunctionDefinition>();
  Iterator<XQueryFunction> functions = queryModule.getLocalFunctionLibrary().getFunctionDefinitions();
  while (functions.hasNext()) {
    XQueryFunction function = functions.next();
    UserFunctionParameter[] params = function.getParameterDefinitions();
    Variable[] args = new Variable[params.length];
    for (int i = 0; i < params.length; i++) {
      QName argname = qnameFor (params[i].getVariableQName());
      addNamespaceDeclaration(argname);
      args[i] = new Variable (argname, getTypeDescription(params[i].getRequiredType()));
    }
    QName fname = qnameFor(function.getFunctionName());
    addNamespaceDeclaration(fname);
    SequenceType resultType = function.getResultType();
    ItemType returnType = resultType.getPrimaryType();
    QName returnTypeName = null;
    if (returnType instanceof NameTest) {
      returnTypeName = qnameForNameCode (((NameTest) returnType).getFingerprint());
    }
    FunctionDefinition fdef = new FunctionDefinition(fname, 
        valueTypeForItemType(resultType.getPrimaryType()), 
        cardinalityOf(resultType), returnTypeName,  
        args, exprFor (function.getBody()));  
    functionDefinitions.add (fdef);
  }
  return functionDefinitions.toArray(new FunctionDefinition[0]);
}

代码示例来源:origin: net.sourceforge.saxon/saxon

UserFunctionParameter[] params = getParameterDefinitions();
  for (int i=0; i<params.length; i++) {
    params[i].setSlotNumber(i);
  visitor.setExecutable(getExecutable());
  body = visitor.simplify(body);
  body = visitor.typeCheck(body, null);
  compiledFunction.setFunctionName(functionName);
  compiledFunction.setParameterDefinitions(params);
  compiledFunction.setResultType(getResultType());
  compiledFunction.setLineNumber(lineNumber);
  compiledFunction.setSystemId(systemId);
fixupReferences(staticContext);

代码示例来源:origin: net.sf.saxon/Saxon-HE

} else if (referees.get(i + 1) instanceof XQueryFunction) {
  XQueryFunction next = (XQueryFunction) referees.get(i + 1);
  messageBuilder.append(" calls ").append(next.getFunctionName().getDisplayName()).append("#").append(next.getNumberOfArguments()).append("()");

代码示例来源:origin: net.sf.saxon/Saxon-HE

final Executable exec = ((QueryModule)getStaticContext()).getExecutable();
GlobalVariableManager manager = new GlobalVariableManager() {
  public void addGlobalVariable(GlobalVariable variable) throws XPathException {
if (config.getCountDown() == 0) {
  ICompilerService compilerService = config.makeCompilerService(Configuration.XQUERY);
  Expression cbody = opt.compileToByteCode(compilerService, body, getFunctionName().getDisplayName(),
                       Expression.PROCESS_METHOD | Expression.ITERATE_METHOD);
  if (cbody != null) {
  body = opt.makeByteCodeCandidate(compiledFunction, body, getDisplayName(),
                   Expression.PROCESS_METHOD | Expression.ITERATE_METHOD);

代码示例来源:origin: net.sf.saxon/Saxon-HE

fd.registerReference(ufc);
  ufc.setStaticType(fd.getResultType());
} else {
  StringBuilder sb = new StringBuilder("Cannot find a " + arity +
  fd.registerReference(uc);

代码示例来源:origin: net.sf.saxon/Saxon-HE

/**
 * Get the function with a given name and arity. This method is provided so that XQuery functions
 * can be called directly from a Java application. Note that there is no type checking or conversion
 * of arguments when this is done: the arguments must be provided in exactly the form that the function
 * signature declares them.
 *
 * @param uri       the uri of the function name
 * @param localName the local part of the function name
 * @param arity     the number of arguments.
 * @return the function identified by the URI, local name, and arity; or null if there is no such function
 */
/*@Nullable*/
public UserFunction getUserDefinedFunction(/*@NotNull*/ String uri, /*@NotNull*/ String localName, int arity) {
  SymbolicName functionKey = new SymbolicName.F(new StructuredQName("", uri, localName), arity);
  XQueryFunction fd = functions.get(functionKey);
  if (fd == null) {
    return null;
  }
  return fd.getUserFunction();
}

代码示例来源:origin: dsukhoroslov/bagri

private <R> List<R> lookupFunctions(FunctionLibraryList fll, FunctionExtractor<R> ext) {
  List<R> fl = new ArrayList<>();
  for (FunctionLibrary lib: fll.getLibraryList()) {
    logger.trace("lookupFunctions; function library: {}; class: {}", lib.toString(), lib.getClass().getName());
    if (lib instanceof FunctionLibraryList) {
      fl.addAll(lookupFunctions((FunctionLibraryList) lib, ext));
    //} else if (lib instanceof ExecutableFunctionLibrary) {
    //	ExecutableFunctionLibrary efl = (ExecutableFunctionLibrary) lib;
    //	Iterator<UserFunction> itr = efl.iterateFunctions();
    //	while (itr.hasNext()) {
    //		fl.add(getFunctionDeclaration(itr.next()));
    //	}
    } else if (lib instanceof XQueryFunctionLibrary) {
      XQueryFunctionLibrary xqfl = (XQueryFunctionLibrary) lib;
      Iterator<XQueryFunction> itr = xqfl.getFunctionDefinitions();
      while (itr.hasNext()) {
        XQueryFunction fn = itr.next();
        logger.trace("lookupFunctions; fn: {}", fn.getDisplayName());
        R result = ext.extractFunction(fn.getUserFunction());
        if (result != null) {
          fl.add(result);
        }
      }
    }
  }
  return fl;
}

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com