]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/tips/convert_mediawiki_to_ikiwiki.mdwn
releasing version 3.20091023
[git.ikiwiki.info.git] / doc / tips / convert_mediawiki_to_ikiwiki.mdwn
index c522eaec35de27f5add3c40f558421a565e23447..1e5b912a93d7f345b20b2b3b00ac3ebebd771967 100644 (file)
@@ -1,3 +1,5 @@
+[[!toc levels=2]]
+
 Mediawiki is a dynamically-generated wiki which stores it's data in a
 relational database. Pages are marked up using a proprietary markup. It is
 possible to import the contents of a Mediawiki site into an ikiwiki,
 Mediawiki is a dynamically-generated wiki which stores it's data in a
 relational database. Pages are marked up using a proprietary markup. It is
 possible to import the contents of a Mediawiki site into an ikiwiki,
@@ -40,6 +42,16 @@ to adjust this script too:
 Also, if you have pages with titles that need to be encoded to be represented
 in HTML, you may need to add further processing to the last line.
 
 Also, if you have pages with titles that need to be encoded to be represented
 in HTML, you may need to add further processing to the last line.
 
+Note that by default, `Special:Allpages` will only list pages in the main
+namespace. You need to add a `&namespace=XX` argument to get pages in a
+different namespace. The following numbers correspond to common namespaces:
+
+ * 10 - templates (`Template:foo`)
+ * 14 - categories (`Category:bar`)
+
+Note that the page names obtained this way will not include any namespace
+specific prefix: e.g. `Category:` will be stripped off.
+
 ### Querying the database
 
 If you have access to the relational database in which your mediawiki data is
 ### Querying the database
 
 If you have access to the relational database in which your mediawiki data is
@@ -51,7 +63,7 @@ Once you have a list of page names, you can fetch the data for each page.
 
 ### Method 1: via HTTP and `action=raw`
 
 
 ### Method 1: via HTTP and `action=raw`
 
-You need to create two derived strings from the page titles already: the
+You need to create two derived strings from the page titles: the
 destination path for the page and the source URL. Assuming `$pagename` 
 contains a pagename obtained above, and `$wiki` contains the URL to your
 mediawiki's `index.php` file:
 destination path for the page and the source URL. Assuming `$pagename` 
 contains a pagename obtained above, and `$wiki` contains the URL to your
 mediawiki's `index.php` file:
@@ -62,6 +74,15 @@ mediawiki's `index.php` file:
     mkdir -p `dirname "$dest"`
     wget -q "$wiki?title=$src&action=raw" -O "$dest"
 
     mkdir -p `dirname "$dest"`
     wget -q "$wiki?title=$src&action=raw" -O "$dest"
 
+You may need to add more conversions here depending on the precise page titles
+used in your wiki.
+
+If you are trying to fetch pages from a different namespace to the default,
+you will need to prefix the page title with the relevant prefix, e.g.
+`Category:` for category pages. You probably don't want to prefix it to the
+output page, but you may want to vary the destination path (i.e. insert an
+extra directory component corresponding to your ikiwiki's `tagbase`).
+
 ### Method 2: via HTTP and `Special:Export`
 
 Mediawiki also has a special page `Special:Export` which can be used to obtain
 ### Method 2: via HTTP and `Special:Export`
 
 Mediawiki also has a special page `Special:Export` which can be used to obtain
@@ -79,13 +100,32 @@ the result.
 It is possible to extract the page data from the database with some
 well-crafted queries.
 
 It is possible to extract the page data from the database with some
 well-crafted queries.
 
-## Step 2: format conversion
+## Step 3: format conversion
+
+The next step is to convert Mediawiki conventions into Ikiwiki ones.
+
+### categories
+
+Mediawiki uses a special page name prefix to define "Categories", which
+otherwise behave like ikiwiki tags. You can convert every Mediawiki category
+into an ikiwiki tag name using a script such as
+
+    import sys, re
+    pattern =  r'\[\[Category:([^\]]+)\]\]'
+    
+    def manglecat(mo):
+            return '[[!tag %s]]' % mo.group(1).strip().replace(' ','_')
+            
+    for line in sys.stdin.readlines():
+            res = re.match(pattern, line)
+            if res:
+                    sys.stdout.write(re.sub(pattern, manglecat, line))
+            else: sys.stdout.write(line)
 
 
-The next step is to convert Mediawiki conventions into Ikiwiki ones. These
-include
+## Step 4: Mediawiki plugin
 
 
- * convert Categories into tags
- * ...
+The [[plugins/contrib/mediawiki]] plugin can be used by ikiwiki to interpret
+most of the Mediawiki syntax.
 
 ## External links
 
 
 ## External links
 
@@ -93,5 +133,3 @@ include
 git](http://u32.net/Mediawiki_Conversion/index.html?updated), including full
 edit history, but as of 2009/10/16 that site is not available.
 
 git](http://u32.net/Mediawiki_Conversion/index.html?updated), including full
 edit history, but as of 2009/10/16 that site is not available.
 
-The [[plugins/contrib/mediawiki]] plugin can then be used by ikiwiki to build
-the wiki.