Inheritance XSLT属性集依赖项报告/查询

Inheritance XSLT属性集依赖项报告/查询,inheritance,xslt,attributes,Inheritance,Xslt,Attributes,我们有很多目录,每个目录都包含几个属性集。其中许多属性集使用其他属性集。属性集样式表以特定顺序导入,以覆盖先前导入的相同命名属性集。因为任何属性集都可以使用多个属性集(多重继承),所以问题很快就解决了。如果不进行大量手动搜索,就很难知道各种问题的答案,例如: 对特定属性集的更改会直接或通过多层使用属性集间接影响哪些属性集?(向下查看后代的“继承”树) 哪些属性集有助于定义给定属性集?(仰望祖先) 给定属性集的“继承”层的属性和值的计算集是什么,包括显示贡献文件和属性集名称 有这样的工具吗?如果不

我们有很多目录,每个目录都包含几个属性集。其中许多属性集使用其他属性集。属性集样式表以特定顺序导入,以覆盖先前导入的相同命名属性集。因为任何属性集都可以使用多个属性集(多重继承),所以问题很快就解决了。如果不进行大量手动搜索,就很难知道各种问题的答案,例如:

  • 对特定属性集的更改会直接或通过多层使用属性集间接影响哪些属性集?(向下查看后代的“继承”树)
  • 哪些属性集有助于定义给定属性集?(仰望祖先)
  • 给定属性集的“继承”层的属性和值的计算集是什么,包括显示贡献文件和属性集名称

  • 有这样的工具吗?如果不是,因为它是XML,那么是否有一种优雅的方法可以使用XSLT3、XQuery3和XPath3.1来满足这一需求?

    好问题。XSLT导入/覆盖机制非常强大,但如果过度使用,则很难确定发生了什么

    XsltExplorer()有帮助吗?如果没有,你可以试着向Norm索要一个新功能

    或者你可以编写自己的工具。使用XML语法的XSLT的好处之一是,编写分析(或修改)XSLT代码的XSLT代码非常容易。IIRC,我的书《XSLT程序员参考》中有一个示例,它搜索样式表以查看属性集定义中是否存在循环,尽管它可能只在单个模块中搜索

    或者您也可以自己编写一个XsltExplorer扩展,并将其贡献给项目

    另一种可能性是查看Saxon的XSLT编译器输出中的属性集,将样式表编译为SEF文件,并在其中查找扩展版本,我还没有验证这是否可行。(实际上,您可以尝试两种Saxon编译器:作为Saxon EE的一部分的XJ编译器(需要许可证)生成XML格式的SEF文件;Saxon JS中的XX编译器运行在Node.JS上,是免费的,并生成JSON格式的SEF文件)

    属性集是一个有趣的特性。我不认为我自己曾经在愤怒中使用过它们,我也很少在野外遇到它们。但是使用它们的人对它们发誓,并倾向于过度利用它们的权力