Embedding RDFa in MediaWiki

Authors:Andreas Wechselberger and Martin Hepp

It is pretty simple to add rich meta-data in RDFa, e.g. GoodRelations patterns for price and product information or opening hours, to any page in a standard MediaWiki wiki.
Here is what you need to do:

Step 1: Apply Patch to MediaWiki

Apply the patch provided by Toby A Inkster. In detail, you have to modify some MediaWiki source files (Linker.php and Sanitizer.php) in order to enable RDFa support for the MediaWiki software.

Step 2: Change DOCTYPE in Skin

Next you have to change the DOCTYPE of your MediaWiki skin.

Example: Let's assume you want to change the DOCTYPE in the standard MediaWiki skin MonoBook. For that, you have to open the file MonoBook.php ( you will find it under /skins/ ) and go to line 74. There, you have to remove the old DOCTYPE and replace it with the following line:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">

Now all your MediaWiki pages will have this DOCTYPE.

Furthermore we have to replace in the MonoBook.php the line 116


and in MonoBook.php line 78 remove the "lang"-tag: lang="

text('lang') ?>"

Step 3: Make sure that you can insert HTML code in your MediaWiki

Furthermore you must have sufficient rights on that MediaWiki so that you can paste HTML code into your MediaWiki pages.
If not, you can enable this by installing the MediaWiki extension Secured HTML.

After installing the extension you are able to paste HTML/XHTML code into MediaWiki pages. This can be done like this:


Step 4: Insert XHTML+RDFa markup in a MediaWiki page

Now you can paste XHTML+RDFa markup in a MediaWiki page by going to the wikitext mode and enclosing the markup in the very same manner:


Important: When parsing the wikitext for the first time, MediaWiki sometimes inserts unneccessary spaces and line breaks, which create multiple unintended grey boxed to appear in the rendering and which may corrupt the RDFa meta-data.

If that happens, simply

  • edit the page again,
  • go to the

wikitext mode, and

  • delete all whitespaces and linebreaks in the markup.


For example, you can paste the GoodRelations patterns from http://www.ebusiness-unibw.org/wiki/Rdfa4google into the body of your MediaWiki page.
The result is shown on the page http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct

Inserting RDFa

Simply insert the following code in the wikitext mode at the end of the original page:



Extracting RDFa

You can use PyRDFa to extract the RDF rich meta-data from that page.
This brings up the following RDF code:

@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix gr: <http://purl.org/goodrelations/v1#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
@prefix xhv: <http://www.w3.org/1999/xhtml/vocab#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#business> a gr:BusinessEntity ;
     rdfs:label "Hepp Space Ventures Inc."@en ;
     gr:hasPOS <http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#myshop> ;
     gr:legalName "Hepp Space Ventures Inc."@en ;
     gr:offers <http://www.heppnetz.de/rdfa4google/product.html#myoffer> ;
     foaf:page <http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct>, <http://www.heppnetz.de/> ;
     vcard:adr <http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#address> ;
     vcard:fn "Hepp Space Ventures Inc."@en ;
         [ vcard:latitude "48.0802626"^^xsd:float ;
             vcard:longitude "11.6407428"^^xsd:float
         ] ;
     vcard:tel "+49-89-6004-0"^^xsd:string ;
     vcard:url <http://www.heppnetz.de/> ;
     foaf:depiction <http://www.heppnetz.de/rdfa4google/logo.png> .

<http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct> xhv:alternate <http://www.ebusiness-unibw.org/w/index.php?title=Special:RecentChanges&feed=atom>, <http://www.ebusiness-unibw.org/w/index.php?title=Special:RecentChanges&feed=rss> ;
     xhv:icon <http://www.ebusiness-unibw.org/favicon.ico> ;
         <http://www.ebusiness-unibw.org/w/skins/monobook/main.css?207> .

<http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#myshop> a gr:LocationOfSalesOrServiceProvisioning ;
     gr:hasOpeningHoursSpecification <http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#saturdays>, <http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#workdays> ;
     rdfs:comment "Opening Hours: Mon-Fri 10-6, Sat 10-4.30"@en ;
     vcard:adr <http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#address> ;
         [ vcard:latitude "48.0802626"^^xsd:float ;
             vcard:longitude "11.6407428"^^xsd:float
         ] .

<http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#saturdays> a gr:OpeningHoursSpecification ;
     gr:closes "16:30:00"^^xsd:time ;
     gr:hasOpeningHoursDayOfWeek gr:Saturday ;
     gr:opens "10:00:00"^^xsd:time .

<http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#workdays> a gr:OpeningHoursSpecification ;
     gr:closes "18:00:00"^^xsd:time ;
         gr:Wednesday ;
     gr:opens "10:00:00"^^xsd:time .

<http://www.ebusiness-unibw.org/wiki/GoodRelationsRDFaInMediaWikiProduct#address> a vcard:Address ;
     vcard:country-name "Germany"@en ;
     vcard:locality "Neubiberg"@en ;
     vcard:postal-code "85577"^^xsd:string ;
     vcard:region "Bavaria"@en ;
     vcard:street-address "1234 Hepp Road"@en .