首页 文章

查看XML-Namespace中的所有声明的元素

提问于
浏览
0

是否可以读出XML-Namespace中的所有可能元素?我想要为我自己的XSLT-Editor创建一个自动完成功能 . 如果可能的话,我找不到任何东西,但是XslCompiler如何知道在命名空间中声明了哪些元素,哪些不是?

当然我知道在互联网上的某个地方你可以看到命名空间的功能,但我想以编程方式阅读它 . 那可能吗?

例如,名称空间http://www.w3.org/1999/XSL/Transform我想知道声明了哪些元素/函数:like => function / value-of / choose 等 .

3 回答

  • 1

    是否可以读出XML命名空间中的所有可能元素?

    不是一般情况 .

    命名空间只是一个标识符 . 没有强制系统来描述其中使用的元素和地址 .

    可能存在描述该模式的模式 . 可能有一个DTD描述了这一点 . 可能有RELAX NG描述它 . 可能有Schematron描述它 . 可能有一个描述它的自然语言文档 . 可能根本没有文档 .

    还没有将模式链接到其文档的标准方法(请记住,虽然模式标识符看起来像HTTP URL,但它们并不是真的) .

  • 0

    回答你的这部分问题:

    但是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"/> 方便地执行此操作 .

    对于函数,样式表可用的函数是系统定义函数和用户定义函数的混合函数 . 本质上,可用的函数是标准的内置函数加上样式表本身声明的函数 .

  • 1

    如果您在浏览器中访问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 /模式对象模型以编程方式读取此类模式,具体取决于您的语言/框架,以查找声明的元素和属性 .

相关问题