如何从文档中排除 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。使用您选择的工具生成用户文档。
我有一个正在编辑的 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。使用您选择的工具生成用户文档。