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