Details
-
New Feature
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
Security Level: No security risk; visible to anyone (Ordinary problems in Xalan projects. Anybody can view the issue.)
-
None
Description
I'm creating this jira issue to track implementation of this new feature within Xalan-J's XSLT 3 dev branch.
The following shall be implemented within Xalan-J, as part of this jira issue.
XML input document:
<?xml version="1.0" encoding="UTF-8"?>
<info>
<address>
<fName>abc 1</fName>
<lName>mno 1</lName>
<addressLine1>address location details 1</addressLine1>
<city>hello 1</city>
<country>USA</country>
<state>state 1</state>
<zip>zip 1</zip>
</address>
<address>
<fName>abc 2</fName>
<lName>mno 2</lName>
<addressLine1>address location details 2</addressLine1>
<city>hello 2</city>
<country>USA</country>
<state>state 2</state>
<zip>zip 2</zip>
</address>
<address>
<fName>abc 3</fName>
<lName>mno 3</lName>
<addressLine1>address location details 2</addressLine1>
<city>hello 3</city>
<country>Singapore</country>
</address>
</info>
XSL transformation document:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn0="http://ns0"
exclude-result-prefixes="fn0"
version="3.0">
<xsl:output method="xml" indent="yes"/>
<xsl:import-schema schema-location="address.xsd"/>
<xsl:template match="/info">
<result>
<xsl:for-each select="address">
<xsl:variable name="addressElem" select="."/>
<address id="
">
<xsl:variable name="person1" as="element(*, Person)">
<xsl:copy-of select="fn0:getAddressInfo($addressElem cast as Address)"/>
</xsl:variable>
<xsl:copy-of select="$person1"/>
</address>
</xsl:for-each>
</result>
</xsl:template>
<xsl:function name="fn0:getAddressInfo" as="element(*, Person)">
<xsl:param name="addressElem" as="element(*, Address)"/>
<person>
<xsl:copy-of select="$addressElem/fName | $addressElem/mName | $addressElem/lName"/>
</person>
</xsl:function>
</xsl:stylesheet>
The above mentioned XSL transformation document, refers to an XML Schema document address.xsd (via XSL instruction xsl:import-schema) that provides definitions of few XML Schema user-defined types as following:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Address">
<xs:sequence>
<xs:element name="fName" type="xs:string"/>
<xs:element name="mName" type="xs:string" minOccurs="0"/>
<xs:element name="lName" type="xs:string"/>
<xs:element name="addressLine1" type="xs:string"/>
<xs:element name="addressLine2" type="xs:string" minOccurs="0"/>
<xs:element name="city" type="xs:string" minOccurs="0"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="state" type="xs:string" minOccurs="0"/>
<xs:element name="zip" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="fName" type="xs:string"/>
<xs:element name="mName" type="xs:string" minOccurs="0"/>
<xs:element name="lName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
As specified above within this jira issue, when an XML input document shall be transformed by an XSL transformation a normal transformation output will be produced, but XSL transformation shall ensure type checking with user-defined schema types of the XML input nodes. The XSL transformation shall fail with type check errors, if XML input nodes don't conform with the specified schema types.