xsl-list
[Top] [All Lists]

Re: [xsl] Xpath/XSLT 2.0 & Schema Question

2010-04-02 04:57:52
Xia,

Thanks, that seems to have done the trick.

        <xsl:variable name="schemas" 
select="xsdf:load-schemas-by-URI('schema.xsd')"/>
        ...
        <xsl:template match="*[(_at_)name]">
                <xsl:variable name="type-name" select="./@*:type"/>
                <xsl:variable name="schema-obj"
select="$schemas//xsd:complexType[(_at_)name = $type-name]"/>
                <xsl:variable name="class-name" 
select="$schema-obj//classes/base"/>
        ...

The above works perfectly for what I want to achieve, i.e. get the
base class out of the schema.

A quick question, when I tried to get the type-name using the fully
namespaced name...

                <xsl:variable name="type-name" select="./@xsi:type"/>

...nothing was returned, why?

I am using Saxon 9.2 via .Net.

Michael,

Your comment with regards schema awareness and information being used
by the XSLT processor, what information is used and where/how?

Thanks for your help/pointers.
Luke


On 1 April 2010 17:41, Xia Li <xli(_at_)galdosinc(_dot_)com> wrote:

Hi

       The element test "element(*, $type)" in your code matches an 
*instance* element node whose type definition is of $type or derived from 
$type. It cannot be used to retrieve the corresponding type definition in 
your schema.

       If you need to make use of schema information, you might take a look 
at the library here http://www.ibm.com/developerworks/library/x-schemanode/. 
There is a function xsdf:get-global-type-def() in the library that can be 
used to retrieve the type definition with a given type name from your schema.

Lisa

-----Original Message-----
From: Luke Stedman [mailto:luke(_dot_)stedman(_at_)gmail(_dot_)com]
Sent: Thursday, April 01, 2010 8:59 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Xpath/XSLT 2.0 & Schema Question

Apologies in advance for what is probably a very simple/basic/stupid question.

I have just started using XSL 2.0, having had enough of the
restrictions of XSL 1.0, and am trying to write a XSL that is schema
aware.

I would like to process an XML file and add information/process
something based on the schema, for example adding class information to
XML output or processing an element in a specific way if we want a
console script or Python script output.

I have tried for the last couple of hours to get the code working but
seem to be unable to, a small snippet of code is below...

  <xsl:template match="*[(_at_)name and @xsi:type]">
  <xsl:copy>
   <xsl:copy-of select="@*"/>
   <xsl:attribute name="action" select="'new'"/>
   <xsl:variable name="name" select="name(.)"/>
   <xsl:variable name="type" select="current()/@xsi:type"/>
   <xsl:variable name="object" select="element(*, $type)"/> <!-- I
want to get the relevant schema entry here -->
   <xsl:message>
    ++++
    <xsl:value-of select="current()/@name"/>
    <xsl:variable name="type" select="current()/@xsi:type"/>
    <xsl:value-of select="$object//base"/>
    ++++
   </xsl:message>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>

Am I misunderstanding the functionality or doing something wrong?

If I have missed a relevant post on the list or obvious link then
please point me in its direction, I was unable to find one using a
search.

Apologies again for any stupid comments/expectations.
Luke

--~------------------------------------------------------------------
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>
--~--


--~------------------------------------------------------------------
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>
--~--



--~------------------------------------------------------------------
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>
--~--