2013-05-02- Risten2 Meeting

Risten2 meeting

  • since last meeting
  • next

Since last meeting

  • rewrite search to avoid overwrite issue - DONE
  • rewrite article fetching to add json attributes (no other changes to the article xml)

Problems with the last one:

<article dict="{root($hit)/r/@id}" name="{$dictName}">
    <term>{string($hit)}</term>
    {    
        for $entry in $hit/..
        return (
        <e>{string($entry)}
          <lg><l>{$entry//l}</l></lg>
          <mg>{string($entry/mg)
              for $tg in $entry//tg
              return (
              <tg json:array="true">
              {$tg}
              </tg>
              }
          </mg>
        </e> )
      }
</article>

Instead of using XQuery to transform the xml, use xsl:

transform:transform($entry, xs:anyURI("add-json-array.xsl"), ())

with the stylesheet add-json-array.xsl containing the following:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:json="http://json.org/" >

  <xsl:template match="mg|tg|t">
    <xsl:element name="{name()}"
    <xsl:attribute name="json:array" value="true"/>
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
    </xsl:element>
  </xsl:template>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

The resulting XQuery:

<article dict="{root($hit)/r/@id}" name="{$dictName}">
  <term>{string($hit)}</term>
  {    
    for $entry in $hit/..
    return
      transform:transform($entry, xs:anyURI("add-json-array.xsl"), ())
  }
</article>

returns the complete xml as json in a consistent structure, althogh the json array nodes are duplicated. Probably not a major issue, though, as long as it is consistent.