2012-02-03 9 views
0

私は非常に単純なタクソノミーを持っています。私はfreemindで編集していますが、それを太陽の視覚化としてprotovisで視覚化したいと考えています。タクソノミーの深さは不明です。Freemind to Protovis xlst変換の草稿

私は、Freemindのxslスクリプト機能によるエクスポートで使用できるXLST変換を作成しようとしました.Popovisが必要とする正確なJSON形式のデータを出力するために、それ以上の変換はありませんjavascriptに必要です。

私が探している出力JSONフォーマットはこちらの例: http://mbostock.github.com/protovis/ex/sunburst.html

効果的にFreeMindの.mmファイル形式が入力されています。

スタイラススタジオで私のアルファコードを実行すると、スタイルスタジオスタジオから直接生成された出力を手動で.jsファイルに保存すると、protovisをフィードするjson形式(フォーマットが不適切ですが有効と思われます)が作成されます。何らかの理由でFreemindはこのコードを使用してデータをエクスポートしていないようです...

私には紛失しているものがありますか? 助けていただければ幸いです。

多くのおかげで、アンドリュー

=========== UPDATE =============

私は、コード、問題を修正しました私のxslのいくつかは、freemindが使用するxsltエンジンでサポートされていなかったということでした。私はコードを修正し、自由のライセンスの下でgithubに移動し、ここから削除しました。

アダプタがここにあります: https://github.com/minkymorgan/Freemind2JSON#readme

  • アンドリュー
+0

で使用するために設計されていないのですか?あなたはそのような答えをもっと得るでしょう。 –

+0

:-)それは確かだと思いますが、それから始めます。私は車輪を再構築する前にそれが完了しているかどうかを尋ねるだけです。 A – Minkymorgan

答えて

0

ここに私の試みです。私はあなたのバージョンをベースにし、さらにいくつかの機能を追加しました。 Freemind test file上で実行した場合

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 

    <xsl:template match="/map"> 
     <xsl:text>var Map = { 
</xsl:text> 
     <xsl:apply-templates select="node"> 
      <xsl:with-param name="indent"> 
       <xsl:text> </xsl:text> 
      </xsl:with-param> 
     </xsl:apply-templates> 
     <xsl:text> 
}; 
</xsl:text> 
    </xsl:template> 

    <xsl:template match="node"> 
     <xsl:param name="indent"/> 
     <xsl:if test="position() != 1"> 
      <xsl:text>, 
</xsl:text> 
     </xsl:if> 
     <xsl:value-of select="$indent"/> 
     <xsl:text>"</xsl:text> 
     <xsl:call-template name="escape-javascript"> 
      <xsl:with-param name="string" 
       select="descendant-or-self::node/@TEXT"/> 
     </xsl:call-template> 
     <xsl:text>": </xsl:text> 
     <xsl:choose> 
      <xsl:when test="node"> 
       <xsl:text>{ 
</xsl:text> 
       <xsl:apply-templates select="node"> 
        <xsl:with-param name="indent"> 
         <xsl:value-of select="$indent"/> 
         <xsl:text> </xsl:text> 
        </xsl:with-param> 
       </xsl:apply-templates> 
       <xsl:text> 
</xsl:text> 
       <xsl:value-of select="$indent"/> 
       <xsl:text>}</xsl:text> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:text>10</xsl:text> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 

    <!-- 
     Javascript string escape template by Jeni Tennison 
     Source: http://holytshirt.blogspot.com/2008/06/xslt-javascript-escaping.html 
     Author page: http://www.jenitennison.com/ 
    --> 
    <xsl:template name="escape-javascript"> 
     <xsl:param name="string" /> 
     <xsl:choose> 
      <xsl:when test='contains($string, "&apos;")'> 
       <xsl:call-template name="escape-javascript"> 
        <xsl:with-param name="string" 
         select='substring-before($string, "&apos;")' /> 
       </xsl:call-template> 
       <xsl:text>\'</xsl:text> 
       <xsl:call-template name="escape-javascript"> 
        <xsl:with-param name="string" 
         select='substring-after($string, "&apos;")' /> 
       </xsl:call-template> 
      </xsl:when> 
      <xsl:when test="contains($string, '&#xA;')"> 
       <xsl:call-template name="escape-javascript"> 
        <xsl:with-param name="string" 
         select="substring-before($string, '&#xA;')" /> 
       </xsl:call-template> 
       <xsl:text>\n</xsl:text> 
       <xsl:call-template name="escape-javascript"> 
        <xsl:with-param name="string" 
         select="substring-after($string, '&#xA;')" /> 
       </xsl:call-template> 
      </xsl:when> 
      <xsl:when test="contains($string, '\')"> 
       <xsl:value-of select="substring-before($string, '\')" /> 
       <xsl:text>\\</xsl:text> 
       <xsl:call-template name="escape-javascript"> 
        <xsl:with-param name="string" 
         select="substring-after($string, '\')" /> 
       </xsl:call-template> 
      </xsl:when> 
      <xsl:otherwise><xsl:value-of select="$string" /></xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

が、それは次の出力を生成します。それは興味深いものだ場合

var Map = { 
    "Notetest": { 
     "Notetest": 10, 
     "This is a node": { 
      "with a linbreak \n subnode": 10, 
      "and another subnode": 10, 
      "and some folded subnodes": { 
       "fold1": 10, 
       "fold2": 10, 
       "fold3": 10 
      } 
     }, 
     "Attributes": 10 
    } 
}; 
+0

ねえ、それは素晴らしいです、私はそれをテストします。ありがとうございました。 – Minkymorgan

+0

こんにちはMizardX、私はいくつかのテストをしました。あなたのコードは私のものよりもはるかに優れていますが、私はProtvisのグラフィックスをレンダリングすることはできません。理由はまだわかりませんが、それをさらに調べます。私は昨日XLSTを学んだことを覚えておいてください。そうすれば、あなたのコード作業を理解するのに少し時間をかけてください。 – Minkymorgan

+0

どうしたの?あなたは問題を見つけましたか? –

0

が...私はJSONにFreeMindのを変換するためのXSLTスクリプトをプッシュしました。 私のスクリプトは少しシンプルで、まだJavascriptエスケープをサポートしていません。

またProtovis

場合についてあなたは、コンバータを書き込み、ここにあなたのコードで助けを得る方法