- From: Silent lights <silentlights@yahoo.co.uk>
- Date: Thu, 9 Sep 2010 14:53:16 +0000 (GMT)
- To: Michael Kay <mike@saxonica.com>
- Cc: Matthieu Ricaud-Dussarget <matthieu.ricaud@igs-cp.fr>, Edward A SSG RES USAR USARCCheney <austin.cheney@us.army.mil>, xmlschema-dev@w3.org
Hi Michael and all,
I was able to do the checking on numbers, boolean and the rest I treated as string. Like,
<xsl:template name="getType">
<xsl:param name="curr"/>
<xsl:param name="dType"/>
<xsl:choose>
<!-- Test if it is a Number -->
<xsl:when test="number($curr) = number($curr)">
<xsl:value-of select="concat($dType, 'xs:integer')"/>
</xsl:when>
<!-- Test if it is a Boolean -->
<xsl:when test="contains('/true/True/TRUE/false/FALSE/False/',concat('/',$curr,'/')) and string-length ($curr) < 5">
<xsl:value-of select="concat($dType, 'xs:boolean')"/>
<!--<xsl:value-of select="boolean"/>-->
</xsl:when>
<!-- It is a String -->
<xsl:otherwise>
<xsl:value-of select="concat($dType, 'xs:string')"/>
<!--<xsl:value-of select="string"/>-->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
I was wondering if there is a way to distinguish between decimals and date.
I am generating this Schema and I have an output document (XSD). I like to consider this as a second input and check it with another incoming XML document. - means I have two input documents. Is there any way to handle something like document containers..? any suggestions on how such things would be done !?
Thank you
Densil
--- On Tue, 31/8/10, Michael Kay <mike@saxonica.com> wrote:
> From: Michael Kay <mike@saxonica.com>
> Subject: Re: Help on XML Schema generation using XSLT
> To: "Silent lights" <silentlights@yahoo.co.uk>
> Cc: "Matthieu Ricaud-Dussarget" <matthieu.ricaud@igs-cp.fr>, "Edward A SSG RES USAR USARCCheney" <austin.cheney@us.army.mil>, xmlschema-dev@w3.org
> Date: Tuesday, 31 August, 2010, 17:29
> On 31/08/2010 3:50 PM, Silent lights
> wrote:
> > Hi there,
> > I am trying to solve one issue here.. How do I check
> for the data type for an element and its attribute..
> >
> > I tried something like,
> >
> > <xsl:if test="not(string(.) castable as
> xs:integer)">
> > <xsl:text>Following
> value is not an integer:</xsl:text>
> > <xsl:value-of
> select="."/>
> > </xsl:if>
> >
> > but looks like it doesnt work on XSLT 1.0 and XPath
> 1.0.. Is there a way to check the data type for integer,
> decimal, string and boolean perhaps ?
> >
> There's no easy way in XSLT 1.0. You'll have to do it the
> hard way, by actually parsing the value against the lexical
> rules, using the limited machinery available of translate(),
> substring-before(), substring-after(), and so on. You could
> start by testing to see whether number(x) returns NaN.
>
> Michael Kay
> Saxonica
>
Received on Thursday, 9 September 2010 14:53:50 UTC