OASIS Open Document Format for Office Applications (OpenDocument) TC

Re: [office] Extensible IDs

  • 1.  Re: [office] Extensible IDs

    Posted 07-31-2003 18:25
    At 2003-07-31 19:57 +0200, Daniel Vogelheim wrote:
    >1) namespaced attribute values
    >The idea is to use namespace prefixes in attribute values. This is used 
    >e.g. in XSD for datatypes.
    >
    >Example: If the chart namespace has been declared as 
    >xmlns:chart=".../chart", then "chart:bar" or "chart:pie" would declare a 
    >bar chart of pie chart from the chart namespace. If a default namespace 
    >would have been used for the same namespace, i.e. xmlns=".../chart", then 
    >"bar" and "pie" would refer to the same to chart types. To add your own, 
    >you can declare xmlns:my=".../mine", and then use "mine:superchart" to 
    >declare a your new 'superchart' chart type.
    >...
    >Could anyone come up with XSLT to compare two namespaced attributes, as 
    >suggested in 1) ?
    
    Remember that the namespace axis contains nodes whose names are the prefix 
    and values are the URI strings.
    
    I hope this helps.
    
    .............. Ken
    
    T:\ftemp>type daniel.xsl
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                     xmlns:chart="http://www.mycharturi.org"
                     version="1.0">
    
    <xsl:template match="/">
       <xsl:for-each select="/*/test"><xsl:text>
    </xsl:text>
         <xsl:value-of select="."/>: <xsl:text/>
         <xsl:for-each select="@val">
           <xsl:choose>
             <xsl:when test="
                   contains( ., ':' )
               and ../namespace::*[name(.)=substring-before(current(),':')]=
                   document('')/*/namespace::chart
               and substring-after( ., ':' ) = 'this' ">
               <xsl:text>Yes: @val is in the chart namespace</xsl:text>
             </xsl:when>
             <xsl:otherwise>
               <xsl:text>No: @val is not in the chart namespace</xsl:text>
             </xsl:otherwise>
           </xsl:choose>
         </xsl:for-each>
       </xsl:for-each>
    
       <xsl:for-each select="/*/compare"><xsl:text>
    </xsl:text>
         <xsl:value-of select="."/>: <xsl:text/>
         <xsl:choose>
           <xsl:when test="contains(@val1,':') and contains(@val2,':') and
                    namespace::*[name(.)=substring-before(current()/@val1,':')]=
                    namespace::*[name(.)=substring-before(current()/@val2,':')] and
                    substring-after(@val1,':') = substring-after(@val2,':')">
             <xsl:text>Yes: attributes are the same qualified value</xsl:text>
           </xsl:when>
           <xsl:otherwise>
             <xsl:text>No: attributes are not the same qualified value</xsl:text>
           </xsl:otherwise>
         </xsl:choose>
       </xsl:for-each>
    </xsl:template>
    
    </xsl:stylesheet>
    T:\ftemp>type daniel.xml
    <?xml version="1.0" encoding="iso-8859-1"?>
    <tests xmlns:look="http://www.mycharturi.org"
            xmlns:lookagain="http://www.mycharturi.org"
            xmlns:other="http://www.otheruri.org">
       <test val="look:this">First pre-determined test</test>
       <test val="this">Second pre-determined test</test>
       <test val="other:this">Third pre-determined test</test>
       <test val="lookagain:this">Fourth pre-determined test</test>
       <compare val1="look:this" val2="other:this">First comp test</compare>
       <compare val1="look:this" val2="lookagain:this">Second comp test</compare>
       <compare val1="look:this" val2="lookagain:that">Third comp test</compare>
    </tests>
    
    T:\ftemp>saxon daniel.xml daniel.xsl
    <?xml version="1.0" encoding="utf-8"?>
    First pre-determined test: Yes: @val is in the chart namespace
    Second pre-determined test: No: @val is not in the chart namespace
    Third pre-determined test: No: @val is not in the chart namespace
    Fourth pre-determined test: Yes: @val is in the chart namespace
    First comp test: No: attributes are not the same qualified value
    Second comp test: Yes: attributes are the same qualified value
    Third comp test: No: attributes are not the same qualified value
    T:\ftemp>
    
    
    
    --
    Upcoming hands-on courses: in-house corporate training available;
    North America public:                     XSLT/XPath Aug 12, 2003
    
    G. Ken Holman                mailto:gkholman@CraneSoftwrights.com
    Crane Softwrights Ltd.         http://www.CraneSoftwrights.com/o/
    Box 266, Kars, Ontario CANADA K0A-2E0   +1(613)489-0999 (F:-0995)
    ISBN 0-13-065196-6                      Definitive XSLT and XPath
    ISBN 0-13-140374-5                              Definitive XSL-FO
    ISBN 1-894049-08-X  Practical Transformation Using XSLT and XPath
    ISBN 1-894049-11-X              Practical Formatting Using XSL-FO
    Member of the XML Guild of Practitioners:    http://XMLGuild.info
    Male Breast Cancer Awareness http://www.CraneSoftwrights.com/o/bc