..
/
download
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
version="1.0">
<xsl:param name="namespace">s1000d</xsl:param>
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>let g:xmldata_</xsl:text>
<xsl:value-of select="$namespace"/>
<xsl:text> = {</xsl:text>
<xsl:text>
</xsl:text>
<xsl:text>\ </xsl:text>
<xsl:for-each select="//xsd:element[@name and not(contains(@name, ':'))]">
<xsl:apply-templates select="."/>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
<xsl:text>
</xsl:text>
<xsl:text>\ </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>
</xsl:text>
<xsl:text>\ }</xsl:text>
</xsl:template>
<xsl:template match="xsd:element">
<xsl:variable name="type" select="@type"/>
<xsl:variable name="complexType" select="//xsd:complexType[@name = $type]"/>
<xsl:text>'</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>': </xsl:text>
<xsl:choose>
<xsl:when test="$complexType">
<xsl:apply-templates select="$complexType"/>
</xsl:when>
<xsl:when test="xsd:complexType">
<xsl:apply-templates select="xsd:complexType"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>[[], {}]</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="xsd:complexType">
<xsl:text>[[</xsl:text>
<xsl:for-each select=".//xsd:element|.//xsd:group">
<xsl:choose>
<xsl:when test="self::xsd:group">
<xsl:apply-templates select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:text>'</xsl:text>
<xsl:value-of select="@ref|@name"/>
<xsl:text>'</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>], {</xsl:text>
<xsl:for-each select="xsd:attribute|xsd:attributeGroup|xsd:simpleContent//xsd:attribute">
<xsl:choose>
<xsl:when test="self::xsd:attributeGroup">
<xsl:apply-templates select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:text>'</xsl:text>
<xsl:value-of select="@ref|@name"/>
<xsl:text>': </xsl:text>
<xsl:apply-templates select="."/>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>}]</xsl:text>
</xsl:template>
<xsl:template match="xsd:attribute">
<xsl:choose>
<xsl:when test="@fixed">
<xsl:text>['</xsl:text>
<xsl:value-of select="@fixed"/>
<xsl:text>']</xsl:text>
</xsl:when>
<xsl:when test="@ref">
<xsl:variable name="ref" select="@ref"/>
<xsl:apply-templates select="/xsd:schema/xsd:attribute[@name = $ref][1]"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="type" select="@type"/>
<xsl:variable name="simpleType" select="//xsd:simpleType[@name = $type][1]"/>
<xsl:text>[</xsl:text>
<xsl:if test="$simpleType">
<xsl:apply-templates select="$simpleType"/>
</xsl:if>
<xsl:text>]</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="xsd:simpleType">
<xsl:for-each select=".//xsd:enumeration|.//xsd:pattern">
<xsl:apply-templates select="@value"/>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="xsd:enumeration/@value">
<xsl:text>'</xsl:text>
<xsl:value-of select="."/>
<xsl:text>'</xsl:text>
</xsl:template>
<xsl:template match="xsd:pattern/@value">
<xsl:choose>
<xsl:when test=". = '[01]'">'0','1'</xsl:when>
<xsl:otherwise>
<xsl:text>'</xsl:text>
<xsl:value-of select="."/>
<xsl:text>'</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="xsd:group">
<xsl:choose>
<xsl:when test="@ref">
<xsl:variable name="ref" select="@ref"/>
<xsl:apply-templates select="//xsd:group[@name = $ref][1]"/>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select=".//xsd:element|.//xsd:group">
<xsl:choose>
<xsl:when test="self::xsd:group">
<xsl:apply-templates select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:text>'</xsl:text>
<xsl:value-of select="@ref|@name"/>
<xsl:text>'</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="xsd:attributeGroup">
<xsl:choose>
<xsl:when test="@ref">
<xsl:variable name="ref" select="@ref"/>
<xsl:apply-templates select="//xsd:attributeGroup[@name = $ref][1]"/>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select=".//xsd:attribute|.//xsd:attributeGroup">
<xsl:choose>
<xsl:when test="self::xsd:attributeGroup">
<xsl:apply-templates select="."/>
</xsl:when>
<xsl:when test="@ref">
<xsl:variable name="ref" select="@ref"/>
<xsl:text>'</xsl:text>
<xsl:value-of select="@ref"/>
<xsl:text>': </xsl:text>
<xsl:apply-templates select="/xsd:schema/xsd:attribute[@name = $ref][1]"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="type" select="@type"/>
<xsl:variable name="simpleType" select="//xsd:simpleType[@name = $type][1]"/>
<xsl:text>'</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>': </xsl:text>
<xsl:text>[</xsl:text>
<xsl:if test="$simpleType">
<xsl:apply-templates select="$simpleType"/>
</xsl:if>
<xsl:text>]</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
gopher://khzae.net/0/s1000d/vim/src/xsd2omni.xsl