当前位置: 首页 > 知识库问答 >
问题:

XQuery(saxon)因模式而失败(XPath工作)

拓拔意
2023-03-14

我将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个答案

滑景胜
2023-03-14

调用XQueryCompiler.setSchemaAware(true);

这不是默认值,因为优化器可以知道数据可能是类型化的还是非类型化的,如果数据是非类型化的,则生成模式感知代码的效率很低(相反,当数据是类型化的时,模式感知代码通常更快——尽管节省的成本可能会被验证输入的额外成本所消耗)。

 类似资料:
  • XQuery兼容XPath,它使用XPath表达式来限制XML集合上的搜索结果。 有关如何使用XPath的更多详细信息,请参阅我们的XPath教程。 回想一下我们在上面几小节中用来获取书籍列表的以下XPath表达式。 XPath示例 我们将使用books.xml文件并在这个文件上应用XQuery。文件:books.xml 的内容如下所示 - 在这里给出了三个版本的XQuery语句,它们实现了显示价

  • 我们正在使用Powermockito和Mockito来模拟一些静态类。似乎每次都会抛出。 你能帮我找出问题出在哪里吗? 测试中的Java类 使用Powermock runner进行Junit测试 进程已完成,退出代码为255 注: 实际底层elasticsearch类的源代码可以在这里找到 https://github.com/elastic/elasticsearch/blob/master/c

  • 我正在处理一些奇怪的错误信息,我认为这可以归结为内存问题,但我很难确定它,可以从专家那里得到一些指导。 我有一个两台机器的Spark(1.0.1)集群。两台机器都有8个核心;一台有16GB内存,另一台有32GB内存(这是主)。我的应用程序涉及计算图像中的成对像素亲和力,尽管我测试的图像到目前为止只有1920x1200大,16x16小。 我确实必须改变一些内存和并行性设置,否则我会得到显式的OutO

  • 我想在我的流量管道中使用,以绕过过滤。 这是我所拥有的: 这是对此的输入: 我可以在没有失败,我甚至可以访问映射,但是当第一次迭代完成时,我得到: 用户断开连接。 所以我的问题是,我是否正确使用了它,这里会有什么问题? 编辑: 我曾尝试当我使用value out of it时: 并将设置为订阅端的上下文,当我需要上游的信号时,只需更改此变量引用中的值,但它根本不会更改: 至少重复不会断开连接,但我

  • 在分布式架构中, 如SOA或者微服务架构,你不能担保服务调用如你所预想的一样好。有时候服务会宕机、网络被挖断、网络变慢等,所以你需要容忍这些状况。 rpcx支持四种调用失败模式,用来处理服务调用失败后的处理逻辑, 你可以在创建XClient的时候设置它。 FailMode的设置仅仅对同步调用有效(XClient.Call), 异步调用用,这个参数是无意义的。 Failfast 示例: failfa

  • 我的Ajax调用没有执行web方法,正在返回状态代码“302找到”。检查跟踪表明,该方法实际上是作为“选项”发送的?? 当web方法在aspx文件中时,这一切都在工作。当我把代码转换成UserControl时,我不得不把它移动到asmx。 Ajax调用: PLService中的Web方法 请求: 主持人:坦普里。org用户代理:Mozilla/5.0(Windows NT 6.1;WOW64;rv