2011-01-10 21 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運行查詢檢查它是否沒有使用任何不需要的功能。