查看 XML- 命名空间中所有已声明的元素
See all declared elements in an XML-Namespace
是否可以读出 XML-Namespace 中所有可能的元素?
我希望为我自己的 XSLT 编辑器创建一个自动完成功能。
如果可能的话,我找不到任何东西,但是 XslCompiler 如何知道哪些元素在名称空间中声明,哪些元素没有?
当然我知道 Internet 上某处有文档,您可以在其中查看名称空间的功能,但我想以编程方式读出它。这可能吗?
例如命名空间 http://www.w3.org/1999/XSL/Transform 我想知道声明了哪些 elements/functions:
like => function / value-of / choose 等
如果您访问https://www.w3.org/1999/XSL/Transform in your browser then it explains that there are now three versions of XSLT, 1.0 and 2.0 and 3.0 and it links to schemas or DTDs for the different versions, for instance for the latest version XSLT 3.0 you will find a link to an XSD schema https://www.w3.org/TR/xslt-30/schema-for-xslt30.xsd and also to an Relax-NG schema https://www.w3.org/TR/xslt-30/schema-for-xslt30.rnc。您可以使用各种 APIs/schema 对象模型以编程方式读取此类模式,具体取决于您的 language/framework 以找出已声明的元素和属性。
Is it possible to read out all possible elements in a XML-Namespace?
一般情况下不会。
命名空间只是一个标识符。没有强制系统来描述其中使用了哪些元素和地址。
可能有一个描述它的模式。可能有描述该内容的 DTD。可能有描述它的 RELAX NG。可能有一个描述它的 Schematron。可能有描述它的自然语言文档。可能根本就没有文档。
也没有标准方法 link 其文档的模式(请记住,虽然模式标识符看起来像 HTTP URL,但实际上并非如此)。
回答你问题的这一部分:
但是 XSLT 编译器如何知道其中的函数和元素?
让我们暂时忽略函数并关注元素。通常,XSLT 编译器不知道可以出现什么名称。它假定所有名称均有效。
如果您使用
编写模式感知样式表
<xsl:import-schema schema-location="some.xsd"/>
然后 XSLT 处理器将检查您的 XSLT 代码与 XSD 模式的一致性,如果您使用的名称不可能 select 任何东西,则可能会向您发出警告(或在某些情况下错误) .这仅在以下情况下有效:(a) 名称空间由 XSD 模式描述,(b) 您使用模式感知处理器,(c) 您告诉 XSLT 处理器在哪里可以找到模式,以及 (d) 您在您的样式表中指示哪些模板规则被限制为匹配已验证的文档(在 XSLT 3.0 中,您可以使用 <xsl:mode typed="strict"/>
.
方便地完成此操作
至于函数,样式表可用的函数是系统定义函数和用户定义函数的混合体。本质上,可用函数是标准内置函数加上样式表本身中声明的函数。
是否可以读出 XML-Namespace 中所有可能的元素? 我希望为我自己的 XSLT 编辑器创建一个自动完成功能。 如果可能的话,我找不到任何东西,但是 XslCompiler 如何知道哪些元素在名称空间中声明,哪些元素没有?
当然我知道 Internet 上某处有文档,您可以在其中查看名称空间的功能,但我想以编程方式读出它。这可能吗?
例如命名空间 http://www.w3.org/1999/XSL/Transform 我想知道声明了哪些 elements/functions: like => function / value-of / choose 等
如果您访问https://www.w3.org/1999/XSL/Transform in your browser then it explains that there are now three versions of XSLT, 1.0 and 2.0 and 3.0 and it links to schemas or DTDs for the different versions, for instance for the latest version XSLT 3.0 you will find a link to an XSD schema https://www.w3.org/TR/xslt-30/schema-for-xslt30.xsd and also to an Relax-NG schema https://www.w3.org/TR/xslt-30/schema-for-xslt30.rnc。您可以使用各种 APIs/schema 对象模型以编程方式读取此类模式,具体取决于您的 language/framework 以找出已声明的元素和属性。
Is it possible to read out all possible elements in a XML-Namespace?
一般情况下不会。
命名空间只是一个标识符。没有强制系统来描述其中使用了哪些元素和地址。
可能有一个描述它的模式。可能有描述该内容的 DTD。可能有描述它的 RELAX NG。可能有一个描述它的 Schematron。可能有描述它的自然语言文档。可能根本就没有文档。
也没有标准方法 link 其文档的模式(请记住,虽然模式标识符看起来像 HTTP URL,但实际上并非如此)。
回答你问题的这一部分:
但是 XSLT 编译器如何知道其中的函数和元素?
让我们暂时忽略函数并关注元素。通常,XSLT 编译器不知道可以出现什么名称。它假定所有名称均有效。
如果您使用
编写模式感知样式表<xsl:import-schema schema-location="some.xsd"/>
然后 XSLT 处理器将检查您的 XSLT 代码与 XSD 模式的一致性,如果您使用的名称不可能 select 任何东西,则可能会向您发出警告(或在某些情况下错误) .这仅在以下情况下有效:(a) 名称空间由 XSD 模式描述,(b) 您使用模式感知处理器,(c) 您告诉 XSLT 处理器在哪里可以找到模式,以及 (d) 您在您的样式表中指示哪些模板规则被限制为匹配已验证的文档(在 XSLT 3.0 中,您可以使用 <xsl:mode typed="strict"/>
.
至于函数,样式表可用的函数是系统定义函数和用户定义函数的混合体。本质上,可用函数是标准内置函数加上样式表本身中声明的函数。