XQuery(saxon)失败的模式(XPath工作)

时间:2017-11-08 16:54:51

标签: xquery saxon

我将saxon从XPath切换到XQuery,并选择我有模式的选项我收到错误消息:

  

输入的输入文档只能与模式识别查询一起使用

我的设置是:

InputSource xmlSource = new InputSource(xmlData);
SAXSource saxSource = new SAXSource(reader, xmlSource);
Source schemaSource = new StreamSource(schemaFile);
Configuration config = createEnterpriseConfiguration();
config.addSchemaSource(schemaSource);
Processor processor = new Processor(config);
SchemaValidator validator = new SchemaValidatorImpl(processor);

DocumentBuilder doc_builder = processor.newDocumentBuilder();
if(!preserveWhiteSpace)
    doc_builder.setWhitespaceStrippingPolicy(WhitespaceStrippingPolicy.ALL);
doc_builder.setSchemaValidator(validator);
XdmNode root_node = doc_builder.build(saxSource);
XQueryCompiler compiler = processor.newXQueryCompiler();

在有架构的查询中,我还需要做些什么吗?

谢谢 - 戴夫

1 个答案:

答案 0 :(得分:1)

致电XQueryCompiler.setSchemaAware(true);

这不是默认值,因为优化器知道数据是否可能是类型化的或非类型化的,并且如果数据是无类型的,则生成模式感知代码是低效的(相反,当输入数据时)模式感知代码通常更快 - 尽管可以通过验证输入的额外成本来节省成本。