如何从文档中排除 XSD 元素

How to exclude XSD elements from documentation

我有一个正在编辑的 XSD,我想使用 XMLSpy 或 oXygen 等工具为 XSD 生成用户文档。但是,我想从文档中排除某些元素(根据用户要求)。执行此操作的最佳方法是什么?

没有独立于工具的方法可以从文档中排除元素。

  • 面向应用程序的数据有 xsd:annotation/xsd:appinfo
  • xsd:annotation/xsd:documentation 面向人的数据。

XSD是XML,所以编写XSLT转换当然是生成文档的一种方式。但是请注意,XSD 的语义非常复杂,因此相对于任务的其余部分,任何给定元素的排除都是微不足道的。

从文档中删除元素分为三个部分:

1.向元素添加属性以指示是否应记录它们。

以下是一个代码示例,其中显示了包含三个元素的 XSD 和一个新属性 generateDocumentation,该属性指示是否应记录该元素。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="documentation.xslt"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:mc="http://www.mycompany.com" 
           xsi:schemaLocation="http://www.mycompany.com ./doc.xsd" 
           elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="DocumentedElement" mc:generateDocumentation="true"/>
    <xs:element name="UndocumentedElement" mc:generateDocumentation="false"/>
    <xs:element name="DefaultElement"/>
</xs:schema>

有关如何使用自定义属性扩展 XSD 的详细信息,请参见

请注意,在此示例中,默认情况下将记录未定义 generateDocumentation 属性的元素。

2。应用转换以删除属性值指示不应记录它们的元素。

以下 XSLT 将删除具有 mc:generateDocumentation="false"mc:generateDocumentation="0" 的元素,并将去除生成的白色 space:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:mc="http://www.mycompany.com">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <!-- Identity transform -->
    <xsl:template match="/ | @* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- Undocumented elements -->
    <xsl:template match="*[@mc:generateDocumentation='false'] | *[@mc:generateDocumentation='0']"/>

    <!-- Strip white space -->
    <xsl:template match="*/text()[normalize-space()]">
        <xsl:value-of select="normalize-space()"/>
    </xsl:template>
    <xsl:template match="*/text()[not(normalize-space())]"/>

</xsl:stylesheet>

此转换生成删除了指定元素的 XSD:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="documentation.xslt"?>
<xs:schema xmlns:mc="http://www.mycompany.com" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xsi:schemaLocation="http://www.mycompany.com ./doc.xsd" 
           elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="DocumentedElement" nc:generateDocumentation="true"/>
    <xs:element name="DefaultElement"/>
</xs:schema>

3。使用您选择的工具生成用户文档。