如何让XML注释出现在生成的XSD中?

时间:2013-01-30 03:09:51

标签: xml xsd xml-comments xml-attribute

如果我的XML文档符合以下模式,如何为这些文档生成XSDs,但将注释转换为注释标记?

<ELEMENT1>

  <!--
  documentation text ....
  -->
  <ELEMENT2>
    <ELEMENT3>ABC</ELEMENT3>
  </ELEMENT2>

  <!--
  documentation text ....
  -->
  <ELEMENT4>
    <ELEMENT5>0534564117</ELEMENT5>
    <ELEMENT6>123456</ELEMENT6>
    <ELEMENT7>090314b4-fc7d-42c5-b382-a5b745671ee32b</ELEMENT7>
  </ELEMENT4>

</ELEMENT1>

1 个答案:

答案 0 :(得分:2)

很难从你的问题中辨别出你在这里遇到的困难。你有什么尝试?您有什么想法但尚未因某种原因尝试过?那是什么原因?

有许多工具可以从XML文档集合中生成文档语法(以DTD,Relax NG模式或XSD模式的形式);搜索“语法归纳”或“语法推理”和“XML”会出现一些工具(在Stack Overflow上,搜索XML Trangxml xsd.exe会产生一些命中),而我相信面向XML的开发环境包含从样本生成模式的功能(通常使用相同的开源工具)并不罕见。然而,这些工具的本质是试图从几个样本推断出一般语法,这意味着任何一个输入文件中的注释都不太可能有趣或重要,足以值得包含在模式中。所以你不太可能找到一个现成的语法推理工具,用一个开关使它将输入中的注释复制到输出中的注释中。

另一方面,您的问题的标题似乎听起来好像您已经知道如何从XML输入生成XSD架构,并且您只是寻求有关如何使XML中的注释可访问的建议到生成架构的进程。在这种情况下,答案是:使用编程语言或XML解析器接口,使您可以访问注释。 XSLT或SAX2是明显的选择。 (另一方面,知道XML的人不太可能知道如何从XML实例集合中生成有用的模式,这对于如何读取XML输入中的注释有任何疑问。所以我猜这不是真的问题。)

您的替代方案包括:

  • 使用SAX2接口(或任何其他公开注释的解析器API)以您选择的编程语言读取XML实例并生成架构。
  • 在XSLT中编写模式生成器,并使用<xsl:template match="comment()"> ... </xsl:template>模板处理输入中的注释,并在作为输出生成的XSD模式文档中生成xs:documentation元素。
  • 使用现成的架构生成器(比如Trang)为您的数据生成架构文档,然后编写XSLT样式表或SAX过滤器以重新读取XSD架构文档和XML输入,提取XML输入中的注释,标识注释所涉及的声明,并在适当的位置插入xs:annotationxs:documentation元素再次写出模式文档,其中包含XML输入的注释。