如何从文档中排除XSD元素

时间:2016-03-18 13:57:44

标签: xsd

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

2 个答案:

答案 0 :(得分:0)

没有与工具无关的方法可以从文档中排除元素。

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

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

答案 1 :(得分:-1)

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

<强> 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的详细信息,请参见here

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

<强> 2。应用转换以删除具有属性值的元素,这些元素值表示不应记录它们。

以下XSLT将删除包含mc:generateDocumentation="false"mc:generateDocumentation="0"的元素,并将删除生成的空格:

<?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。使用您选择的工具生成用户文档。