我将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();
在有架构的查询中,我还需要做些什么吗?
谢谢 - 戴夫
答案 0 :(得分:1)
致电XQueryCompiler.setSchemaAware(true);
这不是默认值,因为优化器知道数据是否可能是类型化的或非类型化的,并且如果数据是无类型的,则生成模式感知代码是低效的(相反,当输入数据时)模式感知代码通常更快 - 尽管可以通过验证输入的额外成本来节省成本。