transform_z_sql.xsl 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3. xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs xd"
  4. xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
  5. version="2.0"
  6. >
  7. <xsl:template match="xs:complexType">
  8. <xsl:if test="matches(@name,'RowType_prezes_procesy5_pl_Schema_')">
  9. <xsl:variable name="nazwa">
  10. <xsl:value-of select="replace(@name,'RowType_prezes_procesy5_pl_Schema_','')"/>
  11. </xsl:variable>
  12. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  13. <xsl:attribute name="targetNamespace">
  14. <xsl:value-of select="concat('http://biuro.biall-net.pl/xmlschema_procesy5/default_db/',$nazwa)"/>
  15. </xsl:attribute>
  16. <xsl:namespace name="xp5__default_db__{$nazwa}" select="concat('http://biuro.biall-net.pl/xmlschema_procesy5/default_db/',$nazwa)"/>
  17. <xsl:text>&#xA; </xsl:text>
  18. <xsl:for-each select="xs:sequence/xs:element">
  19. <xsl:text>&#xA; </xsl:text>
  20. <xs:simpleType>
  21. <xsl:attribute name="name">
  22. <xsl:value-of select="@name"/>
  23. </xsl:attribute>
  24. <xsl:choose>
  25. <xsl:when test="matches(@type,'VARCHAR') or matches(@type,'CHAR')">
  26. <xsl:variable name="maxLength">
  27. <xsl:value-of select="replace(@type,'VARCHAR_','')"/>
  28. </xsl:variable>
  29. <xsl:variable name="maxLength">
  30. <xsl:value-of select="replace($maxLength,'CHAR_','')"/>
  31. </xsl:variable>
  32. <xs:restriction base="xs:string">
  33. <xs:maxLength>
  34. <xsl:attribute name="value">
  35. <xsl:value-of select="$maxLength"/>
  36. </xsl:attribute>
  37. </xs:maxLength>
  38. </xs:restriction>
  39. </xsl:when>
  40. <xsl:when test="matches(@type,'INT')">
  41. <xs:restriction base="xs:integer">
  42. <xs:maxInclusive value="2147483647"/>
  43. <xs:minInclusive value="-2147483648"/>
  44. </xs:restriction>
  45. </xsl:when>
  46. <xsl:when test="matches(@type,'DECIMAL')">
  47. <xsl:variable name="decimal" select="tokenize(@type,'_')"/>
  48. <xs:restriction base="xs:decimal">
  49. <xs:totalDigits>
  50. <xsl:attribute name="value">
  51. <xsl:value-of select="$decimal[2]"/>
  52. </xsl:attribute>
  53. </xs:totalDigits>
  54. <xs:fractionDigits>
  55. <xsl:attribute name="value" select="$decimal[3]"/>
  56. </xs:fractionDigits>
  57. </xs:restriction>
  58. </xsl:when>
  59. <xsl:when test="matches(@type,'TIMESTAMP')">
  60. <xs:restriction base="xs:dateTime">
  61. <xsl:text disable-output-escaping="yes">
  62. &lt;xs:pattern value="\p{Nd}{4}-\p{Nd}{2}-\p{Nd}{2}T\p{Nd}{2}:\p{Nd}{2}:\p{Nd}{2}"/&gt;
  63. </xsl:text>
  64. </xs:restriction>
  65. </xsl:when>
  66. <xsl:when test="matches(@type,'DATE')">
  67. <xs:restriction base="xs:date">
  68. <xsl:text disable-output-escaping="yes">
  69. &lt;xs:pattern value="\p{Nd}{4}-\p{Nd}{2}-\p{Nd}{2}"/&gt;
  70. </xsl:text>
  71. </xs:restriction>
  72. </xsl:when>
  73. <xsl:when test="matches(@type,'DOUBLE')">
  74. <xs:restriction base="xs:double"/>
  75. </xsl:when>
  76. <xsl:otherwise>
  77. <xsl:attribute name="type2">
  78. <xsl:value-of select="@type"/>
  79. </xsl:attribute>
  80. </xsl:otherwise>
  81. </xsl:choose>
  82. </xs:simpleType>
  83. </xsl:for-each>
  84. <xsl:text>&#xA; </xsl:text>
  85. <xs:complexType name="defaults">
  86. <xsl:text>&#xA; </xsl:text>
  87. <xs:sequence>
  88. <xsl:for-each select="xs:sequence/xs:element">
  89. <xsl:if test="@default!=''">
  90. <xsl:text>&#xA; </xsl:text>
  91. <xs:element>
  92. <xsl:attribute name="name">
  93. <xsl:value-of select="@name"/>
  94. </xsl:attribute>
  95. <xsl:attribute name="type">
  96. <xsl:value-of select="concat('xp5__default_db__',$nazwa,':',@name)"/>
  97. </xsl:attribute>
  98. <xsl:attribute name="default">
  99. <xsl:value-of select="@default"/>
  100. </xsl:attribute>
  101. </xs:element>
  102. </xsl:if>
  103. </xsl:for-each>
  104. <xsl:text>&#xA; </xsl:text>
  105. </xs:sequence>
  106. </xs:complexType>
  107. </xs:schema>
  108. </xsl:if>
  109. </xsl:template>
  110. </xsl:stylesheet>