XPath 语法的官方规范在哪里?

Where is the official specification for XPath syntax?

我想编写一个函数来简单地验证独立于任何 XML/HTML 的 XPath 表达式的语法(因此它会发现 //p[text(}="Hello"] 之类的东西有拼写错误),但我不能'似乎找不到完整的 XPath 规范。

跟进: 看来我应该跟进,以免人们认为我疯了。我正在尝试编写一个 Rust 程序宏,用于在编译时捕获格式错误的 xpath,作为构建到 Rust Selenium 绑定中的一种便利功能(请参阅 crates.io 上的 thirtyfour 或 fantoccini),这样就不必在 Selenium 崩溃之前花 20 分钟进入他们的测试套件,告诉他们他们有一个像其他语言绑定一样的拼写错误。我可能最终会用另一种语言对一个维护良好的库进行 FFI(实际上 https://crates.io/crates/libxml 可能会成功),但我想我至少会看到自己编写它的工作量。

W3C XPath 推荐 是 XPath 的官方规范:

如果您必须从头开始编写 XPath 解析器,那么至少需要阅读其中的一个。如果您真的不需要从头开始编写 XPath 解析器,您可以简单地使用现有的库并检查 return 值或捕获任何解析异常以确定传递的 XPath 表达式的格式是否正确。

除了官方规范之外,如果您的目标是编写语法检查器,还有一些工具可以帮助您实现这一点,例如语法和这些语法的解析器生成器,例如 https://bottlecaps.de/rex/ so using the grammars there, like the one for XPath 3.1, you can generate code to check the syntax in a lot of target languages, like for instance JavaScript (https://martin-honnen.github.io/xpath31fiddle/js/RExXPath31Fast.js) 然后让您的代码使用该解析器,例如检查语法错误

function parseExample(xpath31Expression) {
    try {
      xpath31Parser = new RExXPath31Fast(xpath31Expression);
      xpath31Parser.parse_XPath();
      console.log(`${xpath31Expression} is fine.`);
    }
    catch (pe) {
      if (pe instanceof xpath31Parser.ParseException) {
        console.log(`Error in ${xpath31Expression}:`);
        console.log(xpath31Parser.getErrorMessage(pe));
      }
    }
}
parseExample(`//p[.="Hello"]`);
parseExample(`//p[text(}="Hello"]`);
<script src="https://martin-honnen.github.io/xpath31fiddle/js/RExXPath31Fast.js"></script>