EverNote

From Dietrich Blog (Strato)
Revision as of 14:53, 12 April 2009 by Dkracht (talk | contribs) (XSL Transformation)

Jump to: navigation, search

EverNote ist einer der Kandidaten für mein Notizbuch, das ich vom PDA bzw. MicrosoftOutlook ablösen wollte.

EverNote ist in der Grundversion kostenlos und verfügt auch über eine Importfunktion für Outlook-Notizen.

Erfahrungen mit EverNote

Eine Probephase mit EverNote erbrachte folgende Erkenntnisse:

  • Import der Outlook-Notizen hat gut funktioniert.
  • Auf dem PC konnte ich es gut nutzen, auf dem PDA habe ich keine Möglichkeit gefunden
  • Der Funktionsumfang ist für meine Anforderungen zu groß (Handschriftenerkennung, Einnisten in den WebBrowser,...)
  • Die Benutzeroberfläche ist mir zu kompliziert, besonders, da ich diese Funktionen nur seltener benutze
  • Ich benötige das Ding nicht ständig - Minute für Minute, von früh bis spät - Nein, nur ein bis zwei Mal die Woche

Schlussfolgerungen

Ich versuche jetzt, meine Notizbuch als WebLog zu organisieren und über RSS auch auf den PDA zu kommen.

Export in eine XML-Datei

Die nun in EverNote vorhandenen Textnotizen können mit vollem Informationsgehalt in eine XML-Datei exportiert werden.

Auszugsweise sieht das so aus:

<evernote>
<notes>
<note name="title" content_date="2005/03/30 15:30:45" created="2008/04/07 19:55:01" id="[FA1234-5678-45454554]">
<content type="html">
   <div>...html content...</div>
</content>
<contentplain>
   ....plain ascii content
</contentplain>
</note>
</notes>
</evernote>

Transformation nach Atom

Hat man erst einmal die XML-Datei, steht die Welt offen, um mit Hilfe von XSLT diverse andere Formate zu erzeugen, z.B. für WordPress (über LiveJournal) oder Atom oder...

XSL Transformation

Für die Transformation in das Atom-Format habe ich ein XSLT-Sheet entwickelt. Zwei manuelle Nacharbeiten sind dann noch nötig:

  • EverNote liefert den formatierten Notizentext als komplettes HTML-Dokument. Im Atom wird nur ein <DIV> Container erwartet. Die überschüssige HTML habe ich manuell entfernt.
  • EverNote verwendet im formatierten Notizen Text "<BR>". Dies habe ich per FileEditing geändert in "<br />"
  • Damit mein NewsfeedReader RssBandit dann auch den formatierten Notizentext anzeigt, musste ich letztlich dann noch den unformatierten Text (CONTENTPLAIN) ganz entfernen.

Die Datei Evernote2Atom.XSL sieht dann so aus:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/2005/Atom" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" cdata-section-elements="content" />

<xsl:template match="/EVERNOTE"> 
<xsl:text>
</xsl:text><feed> 
            <title>Notizbuch</title>
            <subtitle>Ehemalige Outlook-Notizen</subtitle>
            <link href="http://example.org/feed/" rel="self"/>
            <link href="http://example.org/"/>
            <xsl:variable name="D" select="@date" />
            <updated>
               <xsl:value-of select="concat(substring($D,1,4),'-',substring($D,6,2),'-',substring($D,9,2),'T',substring($D,12,8),'Z')" />
            </updated>
            <author>
              <name>Dietrich Kracht</name>
              <email>dietrich@kr8.de</email>
            </author>
            <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
            <xsl:apply-templates select="//NOTE"/>
            </feed>
</xsl:template>
   
<xsl:template match="/EVERNOTE/NOTES/NOTE">
<entry>
          <title>
              <xsl:value-of select="@name"/> 
          </title>
          <link href="http://localhost/wordpress/?p=33"/>
          <id>
              <xsl:value-of select="@id" />
          </id>
          <xsl:variable name="D" select="@content_date" />
          <updated>
              <xsl:value-of select="concat(substring($D,1,4),'-',substring($D,6,2),'-',substring($D,9,2),'T',substring($D,12,8),'Z')" />
          </updated>
          <xsl:variable name="D" select="@created" />
          <published>
              <xsl:value-of select="concat(substring($D,1,4),'-',substring($D,6,2),'-',substring($D,9,2),'T',substring($D,12,8),'Z')" />
          </published>
          <category term="Notizbuch" />
          <author>
              <name>dkracht</name>
          </author> 
          <content type="xhtml">
             <xsl:value-of select="CONTENT" />
          </content>  
          <content2>
              <xsl:value-of select="CONTENTPLAIN"/> 
          </content2>
</entry>
</xsl:template>
</xsl:stylesheet>

Anmerkung: Damit die Sache mit den cdata-section-elements auch funktioniert, war es erforderlich den Namespace ganz oben in der zweiten Zeile anzugeben.

Atom als Format ungeeignet

Nun habe ich meine alten Textnotizen über EverNote und XSLT in ein schönes Atom-Format transformiert, leider vergebens, denn eigentlich niemand kann Atom importieren:

  • WordPress kann kein Atom importieren
  • Serendipity kann kein Atom importieren
  • Blogger.com kann kein Atom importieren

Konsequenz: Nun transformiere ich ein weiteres Mal und zwar jetzt nach RSS.

Transformation nach RSS

Im Gegensatz zu Atom lässt sich RSS bestens importieren.

RSS Testdatei

Mit diesem kleinen (manuell erstellten) RSS-Test-File habe ich den Import es ausprobiert:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/">

<channel>
    <title>NotizbuchRSS</title>
    <link>http://192.168.1.20/wordpress/</link>
    <pubDate>Thu, 12 Apr 2008 13:05:55 +0100</pubDate>
    <description>Ehemalige Outlook-Notizen</description>

    <item>
    <title>Nokia 3650 Combines Phone And Photos</title>
    <link>http://192.168.1.20/wordpress/?p=20</link>
    <pubDate>Thu, 13 Apr 2008 12:47:14 +0100</pubDate>
    <dc:creator>dkracht</dc:creator>
    <category>Notizbuch</category>    
    <description>I've been playing with the new Nokia 3650. Finally, someone has got the combination of a cell phone with digital camera capabilities right!
    </description>
    </item>

    <item>
    <title>Sanyo Tablet PC Amazes!</title>
    <link>http://192.168.1.20/wordpress/?p=21</link>
    <pubDate>Thu, 14 Apr 2008 02:42:31 +0100</pubDate>
    <dc:creator>dkracht</dc:creator>
    <category>Notizbuch</category>
    <description></description>   
    <content:encoded><![CDATA[I was dubious about the new <b>Tablet PCs</b>, but then I saw the latest from Sanyo. <br />Wow, cool looks and it works!]]>    </content:encoded>
    </item>

    <item>
    <title>Canon MegaTiny Digital Camera Too Small</title>
    <link>http://192.168.1.20/wordpress/?p=22</link>
    <pubDate>Thu, 15 Apr 2008 11:12:47 +0100</pubDate>
    <dc:creator>dkracht</dc:creator>
    <category>Notizbuch</category>
    <description>OK, there is a limit to just how small is too small. Canon's MetaTiny, no larger than a quarter, simply is too little to use properly
    </description>
    </item>
</channel>
</rss>

XSL Transformation

Um als Ausgabe ein RSS-2.0-Format zu erzeugen, müsste man den RSS 2.0 Namespace als Default-Namespace angeben. Damit scheint es aber bei RSS 2.0 Probleme zu geben, es wird von einem empty namespace gesprochen.

Deshalb musste ich etwas trixen: http://www.xml.com/lpt/a/2003/01/02/tr.html

Mit diesem XSL-Stylesheet Atom2RSS.xsl kann ich mein nun schon vorhandenes Atom-Format in RSS 2.0 transformieren.

Die Transformation beschränkt sich auf die Teile, die in meinem Anwendungsbeispiel (mein Notizbuch) auch wirklich vorkommen.

Schießlich habe ich mir die Arbeit geschenkt, für RSS ein RFC 8222 konformes Datum zu erzeugen. Diesen letzen Schitt mache ich manuell mit einem FileEditor; d.h. aus der Monatsnummer den Monatsnamen erzeugen (01 --> Jan, 02 --> Feb etc.)

Das so erhaltene RSS-Datei kann ich schließlich nach WordPress importieren und zwar mit der dort vorhandenen RSS-Import-Funktion, nun endlich inklusiver des HTML-formatierten Notizentexts. Leider geht dabei der Author verloren...

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/"
      xmlns:dc="http://purl.org/dc/elements/1.1/" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" cdata-section-elements="content:encoded" />

<xsl:template match="*[local-name()='feed']">
<xsl:text>
</xsl:text>
        <rss version="2.0">
        <channel> 
            <title>NotizbuchRSS</title>
            <link>http://localhost/wordpress</link>
            <xsl:variable name="D" select="*[local-name()='updated']" />
            <pubDate>
               <xsl:value-of select="concat(substring($D,9,2),' ',substring($D,6,2),' ',substring($D,1,4),' ',substring($D,12,8),' +0200')" />
            </pubDate>
            <description>Ehemalige Outlook-Notizen</description>
            <xsl:apply-templates select="*[local-name()='entry']" />
         </channel>
         </rss>
</xsl:template>
   
<xsl:template match="*[local-name()='entry']">
<item>
          <title>
              <xsl:value-of select="*[local-name()='title']"/> 
          </title>
          <link>http://localhost/wordpress/?p=33</link>
          <xsl:variable name="D" select="*[local-name()='updated']" />
          <pubDate>
              <xsl:value-of select="concat(substring($D,9,2),' ',substring($D,6,2),' ',substring($D,1,4),' ',substring($D,12,8),' +0200')" />
          </pubDate>
          <dc:creator>dkracht</dc:creator>
          <category>Notizbuch</category>
          <description></description>
          <content:encoded>
             <xsl:value-of select="*[local-name()='content']" />
          </content:encoded>  
</item>
</xsl:template>
</xsl:stylesheet>

-- Dkracht 21:58, 9 February 2008 (CET)