xsl-list
[Top] [All Lists]

[xsl] schema reference in output

2009-04-20 04:58:41
Dear Listees,

Im trying to transform XML to XML. In this transformation in trying to
extend the output by inserting a schema reference.

I'm using the SAXONb9-1-0-6n processor and Altova processor to test
the XSLT processing. Both give me the following error:

Error at xsl:attribute on line 23 column 19 of 400_o_pew_company.xslt:
  XTDE0850: Invalid attribute name: {xmlns:xsi}
Error at xsl:attribute on line 24 column 19 of 400_o_pew_company.xslt:
  XTSE0280: Undeclared namespace prefix {xsi}
Failed to compile stylesheet. 2 errors detected.

I have found the following site but Im not sure how to implement the
template option :
http://stackoverflow.com/questions/424148/xsl-create-xmlnsxsi-namespace-and-attribute/424362

Thanks for your time!

The source XML file looks like :

<?xml version = "1.0" encoding="UTF-8"?>
<main datecreated="2009-04-17T17:00:02"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:noNamespaceSchemaLocation="400_o_emp_company.xsd">
<DATA_RECORD>
  <EMPLOYEENUMBER>012345</EMPLOYEENUMBER>
  <LASTNAME>Small</LASTNAME>
  <INITIALS>T</INITIALS>
  <FIRSTNAME>Toby</FIRSTNAME>
  <GENDER>M</GENDER>
  <DATEOFBIRTH>1960-04-22</DATEOFBIRTH>
 </DATA_RECORD>
 <DATA_RECORD>
  <EMPLOYEENUMBER>012346</EMPLOYEENUMBER>
  <LASTNAME>Bakker</LASTNAME>
  <INITIALS>H</INITIALS>
  <FIRSTNAME/>
  <GENDER>M</GENDER>
  <DATEOFBIRTH>1951-02-13</DATEOFBIRTH>
 </DATA_RECORD>
</main>

My transformation looks like :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:fn="http://www.w3.org/2005/xpath-functions";>
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
        <xsl:variable name="now" select="current-dateTime()"/>
        <xsl:variable name="timestamp" select="format-dateTime($now,
'[Y0001][M01][D01][H01][m01]')"/>
        <xsl:template match="main">
                <xsl:result-document href="400_o_emp_{$timestamp}.xml">
                        <xsl:element name="Employees">

                        <!-- schema verwijzingsattributen in main -->
                        <!-- THIS IS WHERE IM HAVING TROUBLE -->
                        <xsl:attribute name="xmlns:xsi"><xsl:value-of select
="'http://www.w3.org/2001/XMLSchema-instance'"/></xsl:attribute>
                        <xsl:attribute 
name="xsi:noNamespaceSchemaLocation"><xsl:value-of
select ="'400_o_emp.xsd'"/></xsl:attribute>

                        <!-- begin van de loop voor alle records -->
                                <xsl:for-each select="DATA_RECORD">
                                        <xsl:element name="Employee">
                                                <xsl:attribute 
name="employeeNumber">
                                                        <xsl:value-of 
select="EMPLOYEENUMBER"/>
                                                </xsl:attribute>
                                                <xsl:attribute name="lastName">
                                                        <xsl:value-of 
select="LASTNAME"/>
                                                </xsl:attribute>
                                                <xsl:attribute name="Initials">
                                                        <xsl:value-of 
select="INITIALS"/>
                                                </xsl:attribute>
                                                <xsl:attribute name="firstName">
                                                        <xsl:value-of 
select="FIRSTNAME"/>
                                                </xsl:attribute>
                                                <xsl:attribute name="gender">
                                                        <xsl:value-of 
select="GENDER"/>
                                                </xsl:attribute>
                                                <xsl:attribute 
name="dateOfBirth">
                                                        <xsl:if 
test="DATEOFBIRTH">
                                                                <xsl:if 
test="DATEOFBIRTH!=''">
                                                                        
<xsl:call-template name="FormatDate">
                                                                                
<xsl:with-param name="DateTime" select="DATEOFBIRTH" />
                                                                        
</xsl:call-template>
                                                                </xsl:if>
                                                        </xsl:if>
                                                </xsl:attribute>
                                        </xsl:element>
                                </xsl:for-each>
                        </xsl:element>
                </xsl:result-document>
        </xsl:template>
        
        <xsl:template name="FormatDate">
                <xsl:param name="DateTime" />
                <xsl:variable name="year">
                        <xsl:value-of select="substring($DateTime,1,4)" />
                </xsl:variable>
                <xsl:variable name="month">
                        <xsl:value-of select="substring($DateTime,6,2)" />
                </xsl:variable>
                <xsl:variable name="day">
                        <xsl:value-of select="substring($DateTime,9,2)" />
                </xsl:variable>
                <xsl:value-of select="$day" />
                <xsl:text>-</xsl:text>
                <xsl:value-of select="$month" />
                <xsl:text>-</xsl:text>
                <xsl:value-of select="$year" />
        </xsl:template>
</xsl:stylesheet>

XSD of the output file :

<?xml version="1.0"?>
<xs:schema xmlns=""
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:xs="http://www.w3.org/2001/XMLSchema"; id="main">
        <xs:element name="Employees"/>
        <xs:complexType name="Employee">
                <xs:sequence>
                        <xs:element name="DATA_RECORD" type="EmployeeType" 
maxOccurs="unbounded"/>
                </xs:sequence>
                <xs:attribute name="dateCreated" type="xs:string"/>
        </xs:complexType>
        <xs:complexType name="EmployeeType">
                <xs:attribute name="employeeNumber" type="xs:string"/>
                <xs:attribute name="lastName" type="xs:string"/>
                <xs:attribute name="Initials" type="xs:string"/>
                <xs:attribute name="firstName" type="xs:string"/>
                <xs:attribute name="gender" type="xs:string"/>
                <xs:attribute name="dateOfBirth" type="xs:string"/>
        </xs:complexType>
</xs:schema>

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>