Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

XSLT 2010-03-03

1,049 views

Published on

2010年3月3日デベロッパ・カンファレンス資料。

  • Be the first to comment

  • Be the first to like this

XSLT 2010-03-03

  1. 1. All About XSLT4D デベロッパカンファレンス 2010
  2. 2. All About XSLT• このセッションの内容 ‣ XSLTの概要 ‣ XSLTの利点 ‣ XSLTと4D ‣ XSLTの作成, 編集, 検証 ‣ XSLTの応用 Clichy/2010-02-03
  3. 3. XSLTの概要• XMLを他の標準テキスト形式に変換するための言語 XML XSL TEXT Clichy/2010-02-03
  4. 4. XSLTの概要• XMLを他の標準テキスト形式に変換するための言語 XML XSL HTML TEXT XML XSL Clichy/2010-02-03
  5. 5. XSLTの利点• XMLを変換するための標準の技術• XMLを解析, 再構成, 統計, 並び替え, グループ... ✦xPathは強力なクエリ言語• XMLのノードタイプすべてに対してアクセス... ✦コメントの出力OK=4D HTML TAGS ! Clichy/2010-02-03
  6. 6. XSLTの利点<region name="ヨーロッパ"> ヨーロッパ! <country name="イギリス"> イギリス! ! <language name="英語"> 英語! </country>! フランス <country name="フランス">! ! 仏語 <language name="仏語">! </country></region><region name="アフリカ"> アフリカ! <country name="カメルーン"> カメルーン! ! <language name="仏語" /> 仏語! ! <language name="英語" /> 英語! </country>! <country name="ガボン"> ガボン! ! <language name="仏語"> 仏語! </country></region> Clichy/2010-02-03
  7. 7. XSLTの利点<language name="英語"> 英語! <region name="ヨーロッパ"> ヨーロッパ! ! <country name="イギリス"/> イギリス! </region>! <region name="アフリカ"> アフリカ! ! <country name="カメルーン"/>! </region></language><language name="仏語"> 仏語! <region name="ヨーロッパ">! ! <country name="フランス"/> フランス! </region>! <region name="アフリカ">! ! <country name="ガボン"/> ガボン! ! <country name="カメルーン"/> カメルーン! </region></language> Clichy/2010-02-03
  8. 8. XSLTの利点<country name="イギリス" region="ヨーロッパ"> イギリス ヨーロッパ! ! <language name="英語"/></country><country name="ガボン" region="アフリカ"> ガボン アフリカ! ! <language name="仏語"/> 仏語</country><country name="カメルーン" region="アフリカ"> カメルーン! ! <language name="仏語"/>! ! <language name="英語"/></country><country name="フランス" region="ヨーロッパ"> フランス! ! <language name="仏語"/></country> Clichy/2010-02-03
  9. 9. サンプル
  10. 10. XSLTの概要
  11. 11. XSLTの概要• XML形式で記述するプログラム言語 ‣ 実行前にXML妥当性検証, 解析, コンパイル ‣ 要素はコマンド ‣ 属性は命名引数 ‣ 要素値は数が定まらない引数 Clichy/2010-02-03
  12. 12. XSLTの概要<xsl:template match=”/”><data> <xsl:for-each select=”//*[@id&gt;1]”> <month id=”{@id}”> <xsl:value-of select=”name($name)” /> </month> </xsl:for-each></data></xsl:template> Clichy/2010-02-03
  13. 13. XSLTの概要<xsl:template match=”/”><data> <xsl:for-each select=”//*[@id&gt;1]”> <month id=”{@id}”> <xsl:value-of select=”name($name)” /> </month> </xsl:for-each></data></xsl:template> コマンド Clichy/2010-02-03
  14. 14. XSLTの概要<xsl:template match=”/”><data> <xsl:for-each select=”//*[@id&gt;1]”> <month id=”{@id}”> <xsl:value-of select=”name($name)” /> </month> </xsl:for-each></data></xsl:template> リテラルな出力 Clichy/2010-02-03
  15. 15. XSLTの概要<xsl:template match=”/”><data> <xsl:for-each select=”//*[@id&gt;1]”> <month id=”{@id}”> <xsl:value-of select=”name($name)” /> </month> </xsl:for-each></data></xsl:template> xPath Clichy/2010-02-03
  16. 16. XSLTの概要<xsl:template match=”/”><data> <xsl:for-each select=”//*[@id&gt;1]”> <month id=”{@id}”> <xsl:value-of select=”name($name)” /> </month> </xsl:for-each></data></xsl:template> 関数 Clichy/2010-02-03
  17. 17. XSLTの概要<xsl:template match=”/”><data> <xsl:for-each select=”//*[@id&gt;1]”> <month id=”{@id}”> <xsl:value-of select=”name($name)” /> </month> </xsl:for-each></data></xsl:template> 変数/引数 Clichy/2010-02-03
  18. 18. XSLTと4D
  19. 19. XSLTと4D• APPLY XSLT TRANSFORMATION ‣ Apache xalan-c ‣ XSLT 1.0 ‣ BLOB; BLOB; BLOB ‣ path; path; path• SET XSLT PARAMETER ‣ “12345” ‣ “‘abc’” Clichy/2010-02-03
  20. 20. XSLTと4D• APPLY XSLT TRANSFORMATION ‣ Apache xalan-c ‣ XSLT 1.0 ‣ BLOB; BLOB; BLOB 一時ファイル必要なし ‣ path; path; path• SET XSLT PARAMETER ‣ “12345” ‣ “‘abc’” Clichy/2010-02-03
  21. 21. XSLTと4D• APPLY XSLT TRANSFORMATION ‣ Apache xalan-c ‣ XSLT 1.0 ‣ BLOB; BLOB; BLOB 一時ファイル必要なし ‣ path; path; path コンパイルをキープ• SET XSLT PARAMETERimport, include ‣ “12345” ‣ “‘abc’” document(‘’) Clichy/2010-02-03
  22. 22. XSLT+SVG
  23. 23. 微妙な関係!?DOM documentSAX BLOBXSLT PICTURE TEXT Clichy/2010-02-03
  24. 24. 微妙な関係!?DOMdocument BLOB PICTURE TEXTSAXXSLT Clichy/2010-02-03
  25. 25. 微妙な関係!?DOM SAX BLOBdocument PICTURE TEXTXSLT Clichy/2010-02-03
  26. 26. 微妙な関係!?DOMSAXXSLT PICTUREdocument TEXT BLOB Clichy/2010-02-03
  27. 27. 微妙な関係!? TEXT BLOB Regex DOM XSLT SVG (get) SVG animatable PICTURE documentSVG (own copy) SVG interactive SAX Clichy/2010-02-03
  28. 28. xPath
  29. 29. xPath • XMLコマンドはxPathサポートしている? ‣ DOM Create XML element 4DではElement[ElementNum]シンタックスを使用した添字によるXPath要素への ‣ DOM Find XML element アクセスも使用できます。例えば以下の構造があるとき: ‣ DOM    <RootElement> SET XML VALUE       <Elem1>          <Elem2>aaa</Elem2> • element[index]          <Elem2>bbb</Elem2>          <Elem2>ccc</Elem2> ‣ インデックスで要素が参照できるだけ。       </Elem1>    </RootElement> ‣ それ以外のxPathはNG。 XPath記法では /RootElement/Elem1/Elem2[3] シンタックスを使用して"ccc"値 にアクセスできます。http://www.4d.com/docs/CMJ/CMJ10099.HTM Clichy/2010-02-03
  30. 30. xPath• /preceding-sibling::* 軸• /element/@attribute 属性• /*/@* ワイルドカード• *[name()=‘table’ and @id=‘1’] プレディケート• *[matches(@uuid,(‘[0-9a-f]{32}’))] 正規表現 Clichy/2010-02-03
  31. 31. 1.0 xPath• /preceding-sibling::* 軸• /element/@attribute 属性• /*/@* ワイルドカード• *[name()=‘table’ and @id=‘1’] プレディケート• *[matches(@uuid,(‘[0-9a-f]{32}’))] 正規表現 Clichy/2010-02-03
  32. 32. XSLTリファレンス
  33. 33. コマンド Clichy/2010-02-03
  34. 34. コマンド 条件分岐<xsl:if test=”xPath”> ...some code here</xsl:if> Clichy/2010-02-03
  35. 35. コマンド 条件分岐<xsl:choose> <xsl:when test=”xPath”> ...some code here </xsl:when> <xsl:when test=”xPath”> ...some code here </xsl:when> <xsl:otherwise> ...some code here </xsl:otherwise></xsl:choose> Clichy/2010-02-03
  36. 36. コマンド クエリ, 並び替え<xsl:for-each select=”xPath” > <xsl:for-each select=”xPath” > <xsl:sort select=”xPath” /> <xsl:sort select=”xPath” /> ...some code here </xsl:for-each></xsl:for-each> Clichy/2010-02-03
  37. 37. コマンド クエリ, 一括更新<xsl:apply-templates select=”xPath” > <xsl:with-param name=”” select=”xPath” /> <xsl:sort select=”xPath” /> <xsl:sort select=”xPath” /></xsl:apply-templates><xsl:template match=”xPath” > <xsl:param name=”” select=”xPath” /> ...some code here</xsl:template> Clichy/2010-02-03
  38. 38. コマンド サブルーチン<xsl:call-templates name=”” > <xsl:with-param name=”” select=”xPath” /></xsl:apply-templates><xsl:template name=”” > <xsl:param name=”” select=”xPath” /> ...some code here</xsl:template> Clichy/2010-02-03
  39. 39. コマンド 出力<xsl:value-of select=”xPath” /> Clichy/2010-02-03
  40. 40. コマンド 出力<xsl:text>...literal value here</xsl:text>or,here<tag></tag> Clichy/2010-02-03
  41. 41. コマンド 出力<xsl:number count=”xPath” format=””/>//context based value<xsl:number value=”” format=””/>//static value Clichy/2010-02-03
  42. 42. コマンド 設定<xsl:output method=”xml|text|html” />encodingstandaloneindentomit-xml-declarationdoctype-publicdoctype-systemmedia-type Clichy/2010-02-03
  43. 43. xPathリファレンス
  44. 44. 軸 (axis)<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  45. 45. 軸 (axis) self::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  46. 46. 軸 (axis) child::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  47. 47. 軸 (axis) parent::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  48. 48. 軸 (axis) attribute::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  49. 49. 軸 (axis) ancestor::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  50. 50. 軸 (axis) descendant::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  51. 51. 軸 (axis) preceding-sibling::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  52. 52. 軸 (axis) preceding::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  53. 53. 軸 (axis) following-sibling::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  54. 54. 軸 (axis) following::*<root> <trunk index=”1”> <branch name=”abc”> <trunk index=”2” /> <branch name=”4D” version=”11”> <leaf> <vein /> <leaf> </branch> </trunk> <trunk index=”3” /></root> Clichy/2010-02-03
  55. 55. 関数 Clichy/2010-02-03
  56. 56. 関数numeric: number, format- string: number node: sum xml: roundsettings: ceiling floor Clichy/2010-02-03
  57. 57. 関数numeric: string, name string: contains, starts-with node: concat xml: substringsettings: substring-before substring-after normalize space translate Clichy/2010-02-03
  58. 58. 関数numeric: position string: last node: document xml:settings: Clichy/2010-02-03
  59. 59. 関数numeric: namespace-uri string: unparsed-entity-uri node: xml:settings: Clichy/2010-02-03
  60. 60. 関数numeric: system-property string: function-available node: xml:settings: Clichy/2010-02-03
  61. 61. EXSLT 拡張関数 Clichy/2010-02-03
  62. 62. EXSLT 拡張関数 math: math:min, max str: math:lowest, highest set: math:tan, cos, sin dyn: math:atan, acos, asin date: math:random exsl: math:absrandom: math:power func: math:exp, log, sqrt regexp: math:constant Clichy/2010-02-03
  63. 63. EXSLT 拡張関数 math: str:encode-uri str: str:decode-uri set: str:padding dyn: str:concat date: str:align exsl:random: func: regexp: Clichy/2010-02-03
  64. 64. EXSLT 拡張関数 math: set:difference str: set:distinct set: set:has-same- dyn: node date: set:intersection exsl: set:leadingrandom: set:trainling func: regexp: Clichy/2010-02-03
  65. 65. EXSLT 拡張関数 math: dyn:evaluate str: set: dyn: date: exsl:random: func: regexp: Clichy/2010-02-03
  66. 66. EXSLT 拡張関数 math: date:date-time str: set: dyn: date: exsl:random: func: regexp: Clichy/2010-02-03
  67. 67. EXSLT 拡張関数 math: exsl:object-type str: exsl:node-set set: dyn: date: exsl:random: func: regexp: Clichy/2010-02-03
  68. 68. EXSLT 拡張関数 math: str: set: dyn: date: exsl:random: func: regexp: Clichy/2010-02-03
  69. 69. EXSLT 拡張関数 math: str: set: dyn: date: exsl:random: func: regexp: Clichy/2010-02-03
  70. 70. EXSLT 拡張関数 math: str: set: dyn: date: exsl:random: func: regexp: Clichy/2010-02-03
  71. 71. 4D 拡張関数exsl4D: exsl4D:format-number exsl4D:format-value exsl4D:max exsl4D:min exsl4D:max-string-length exsl4D:max-value-length Clichy/2010-02-03

×