XSLT 2010-03-03

1,019 views

Published on

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

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,019
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

×