是否可以读出XML-Namespace中的所有可能元素? 我想要为我自己的XSLT-Editor创建一个自动完成功能。 如果可能的话,我找不到任何东西,但是XslCompiler如何知道在命名空间中声明了哪些元素?哪些不是?
当然,我知道在互联网上某处有一个文档可以看到命名空间的功能,但我想以编程方式阅读它。这可能吗?
例如名称空间http://www.w3.org/1999/XSL/Transform我想知道声明了哪些元素/函数: 喜欢=> 功能 / 价值 - / 选择等。
答案 0 :(得分:1)
是否可以读出XML-Namespace中的所有可能元素?
不是一般情况。
命名空间只是一个标识符。没有强制系统来描述其中使用的元素和地址。
可能有一个架构描述了这一点。可能有一个DTD描述了这一点。可能有RELAX NG描述它。可能有Schematron描述它。可能有一个描述它的自然语言文档。可能根本没有文档。
还没有将模式链接到其文档的标准方法(请记住,虽然模式标识符看起来像HTTP URL,但实际上并非如此)。
答案 1 :(得分:1)
回答你问题的这一部分:
但是XSLT编译器如何知道其中的函数和元素?
让我们暂时忽略函数并专注于元素。通常,XSLT编译器不知道可以出现的名称。它假定所有名称都有效。
如果使用
编写模式识别样式表<xsl:import-schema schema-location="some.xsd"/>
然后,XSLT处理器将检查您的XSLT代码是否与XSD架构保持一致,如果您使用无法选择任何内容的名称,则可能会给您警告(或在某些情况下会出现错误)。这仅适用于以下情况:(a)命名空间由XSD架构描述,(b)您使用架构感知处理器,(c)您告诉XSLT处理器在哪里找到架构,(d)您在样式表中指明哪些模板规则被约束为匹配经过验证的文档(在XSLT 3.0中,您可以使用<xsl:mode typed="strict"/>
方便地执行此操作。
对于函数,样式表可用的函数是系统定义函数和用户定义函数的混合函数。本质上,可用的函数是标准的内置函数加上样式表本身声明的函数。
答案 2 :(得分:0)
如果您在浏览器中访问https://www.w3.org/1999/XSL/Transform,则说明现在有三个版本的XSLT,1.0和2.0以及3.0,并且它链接到不同版本的模式或DTD,例如最新版本的XSLT 3.0您将找到指向XSD架构https://www.w3.org/TR/xslt-30/schema-for-xslt30.xsd以及Relax-NG架构https://www.w3.org/TR/xslt-30/schema-for-xslt30.rnc的链接。您可以使用各种API /模式对象模型以编程方式读取此类模式,具体取决于您的语言/框架,以查找声明的元素和属性。