2011-01-10 27 views
1

我有一个管理XML文件集合并允许使用XPath进行查询以允许用户查看与XPath查询匹配的集合的子集的应用程序。将XQuery限制为XPath

由于各种技术原因,我切换到XQuery引擎。我知道XQuery是XPath的超集。但是,我不想要完整的XQuery功能,因为用户可能会使用它来构造与我的DTD不匹配并且无法通过基于SVG的查看器显示的新XML对象。

我可以轻松地将查询字符串验证为XPath并将它们交给XQuery引擎吗?或者我可以用简单的方式转换它们吗?

(我使用C++和切换到XQilla。)

+1

这是一个奇怪的要求。如果您想禁止节点构造函数(XQuery)和标量项目构造(XPath 2.0),也许应该使用XPath 1.0引擎。否则,你需要解析表达式并禁止具有这种结构的表达式。其他解决方案是过滤结果表达式,以查找属于源文档的那些节点实例... – 2011-01-10 20:51:12

+0

@Ajjandro:我们只是从XQuery转向,因为它在Berkeley DB XML(我们的新存储引擎)中以优化的方式实现。不过,我们的用户期望XPath,而且一旦我们决定采用客户端 - 服务器架构(我了解XQuery已经完成),图形增加的表达能力可能会受到影响。 – 2011-01-11 00:37:49

+0

您可以使用我的XPath 2.0分析器,完全用XSLT 2.0编写。 – 2011-01-11 15:35:54

回答

1

XQilla的确有一个XPath 2.0解析器,所以我现在使用它。

1

如果你不能找到一个XPath 2.0解析器在您的环境中工作,你可以考虑针对它的查询转换为和的XQueryX运行查询检查它是否没有使用任何不需要的功能。