XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
Re: [xml-dev] Humans are so clever

You can use this:

<xsl:for-each select="key('books', 'hardcover')">...</xsl:for-each>

But you probably *should* use this:

<xsl:apply-templates select="key(....)"/>

Thanks,
Tom
On 9 Aug 2019, 12:23 +0100, Costello, Roger L. <costello@mitre.org>, wrote:

Hi Folks,

Here are two examples of human ingenuity overcoming limitations.

No Block-Comment in Windows Batch (.bat) Files

The Windows batch command language provides “rem” (remark) to comment out a single line. For example, here I have commented out the first two lines of a batch file:

rem Command 1

rem Command 2

Command 3

When the batch file is run, Command 3 will be executed.

Suppose the batch file is large and you want to comment out a large section of the file. The Windows batch command language does not provide a block-comment syntax. You could prepend “rem” to every line (and then later remove them when you want to uncomment the lines) but that is tedious. So, some clever person came up with a workaround: The Windows batch command language provides a “goto” statement so use that to avoid executing a block of commands (thus effectively implementing a block comment). For example, here I avoid running Command 1 and Command 2 by using a goto statement:

goto :next

Command 1

Command 2

:next

Command 3

That is so ingenious!

No Composite Keys in XSLT

The XSLT language allows you to improve the performance of your XSLT program by using something called “keys”. Here is an example of declaring an XSLT key:

<xsl:key name="books" match="Book" use="binding" />

 

That instructs the XSLT processor to create a super-fast lookup table of Books so that the set of Books with a certain binding (hardcover or softcover) can be quickly retrieved.

Rather than using this in your XSLT program:

<xsl:for-each select="//Book[binding eq 'hardcover']">...</xsl:for-each>

 

You can use this:

<xsl:for-each select="key('books', 'hardcover')">...</xsl:for-each>

 

The latter can be much, much faster than the former.

Suppose you want to find Books using a combination of binding and author. That requires a composite key. XSLT does not support composite keys. So, some clever person came up with a workaround: concatenate the desired keys, like this:

<xsl:key name="books" match="Book" use="concat(binding, author)" />

 

If you want all the hardcover books by Tom Clancy, you can do this:

<xsl:for-each select="key('books', concat('hardcover', 'Tom Clancy'))">...</xsl:for-each>

 

That is so ingenious!

------------------------------------------------

Of course the above two examples are small things. But small things are used to build big things, so discounting small things would be a mistake.

What human ingenuity have you seen recently in the XML domain?

/Roger

 



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS