[ 
https://issues.apache.org/jira/browse/XALANJ-2766?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mukul Gandhi updated XALANJ-2766:
---------------------------------
    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="{'id_' || position()}">
                      <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.

  was:
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">
                   <address id="{'id_' || position()}">
                         <xsl:variable name="person1" as="element(*, Person)>
                               <xsl:copy-of select="fn0:getAddressInfo(. 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 shall be 
produced, but XSL transformation shall ensure type checking with schema types 
of the XML input nodes. The XSL transformation shall fail with type check 
errors, if XML input nodes shall not conform with the specified schema types.


> xsl transformation having access to XML Schema user-defined complex types
> -------------------------------------------------------------------------
>
>                 Key: XALANJ-2766
>                 URL: https://issues.apache.org/jira/browse/XALANJ-2766
>             Project: XalanJ2
>          Issue Type: New Feature
>      Security Level: No security risk; visible to anyone(Ordinary problems in 
> Xalan projects.  Anybody can view the issue.) 
>          Components: Xalan-interpretive, XPath
>            Reporter: Mukul Gandhi
>            Assignee: Mukul Gandhi
>            Priority: Major
>
> 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="{'id_' || position()}">
>                     <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.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@xalan.apache.org
For additional commands, e-mail: dev-h...@xalan.apache.org

Reply via email to