diff --git a/rdf_example/rdf_example.info b/rdf_example/rdf_example.info
new file mode 100755
index 0000000..d3f5e7f
--- /dev/null
+++ b/rdf_example/rdf_example.info
@@ -0,0 +1,6 @@
+; $Id$
+
+name = RDF Example
+description = Demonstrates an RDF mapping using the RDF mapping API.
+package = Example modules
+core = 7.x
\ No newline at end of file
diff --git a/rdf_example/rdf_example.install b/rdf_example/rdf_example.install
new file mode 100755
index 0000000..d43f456
--- /dev/null
+++ b/rdf_example/rdf_example.install
@@ -0,0 +1,123 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Install file for RDF Example module.
+ *
+ * To demonstrate hook_rdf_mapping, this module creates it's own node type. For
+ * more information on creating node types, see Node Example.
+ */
+
+/**
+ * Implements hook_install().
+ *
+ * - Create photo, summary fields.
+ * - Create photo, summary instances.
+ *
+ * @see node_type_set_defaults()
+ * @see field_info_instance()
+ * @see field_update_instance()
+ * @see field_create_field()
+ * @see field_create_instance()
+ */
+function rdf_example_install() {
+  // use get_t() to get the name of our localization function for translation
+  // during install, when t() is not available.
+  $t = get_t();
+
+  // Define the node type.
+  $rdf_example = array(
+    'type' => 'recipe',
+    'name' => $t('Recipe'),
+    'base' => 'node_content',
+    'description' => $t('The recipe node is defined to demonstrate RDF mapping.'),
+  );
+
+  // Set additional defaults and save the content type.
+  $content_type = node_type_set_defaults($rdf_example);
+  node_type_save($content_type);
+
+  // Create all the fields we are adding to our content type.
+  // http://api.drupal.org/api/function/field_create_field/7
+  foreach (_rdf_example_installed_fields() as $field) {
+    field_create_field($field);
+  }
+
+  // Create all the instances for our fields.
+  // http://api.drupal.org/api/function/field_create_instance/7
+  foreach (_rdf_example_installed_instances() as $instance) {
+    $instance['entity_type'] = 'node';
+    $instance['bundle'] = $rdf_example['type'];
+    field_create_instance($instance);
+  }
+}
+
+/**
+ * Return a structured array defining the fields created by this content type.
+ */
+function _rdf_example_installed_fields() {
+  $t = get_t();
+  return array(
+    'recipe_photo' => array(
+      'field_name' => 'recipe_photo',
+      'cardinality' => 1,
+      'type'        => 'image',
+    ),
+    'recipe_summary' => array(
+      'field_name'  => 'recipe_summary',
+      'cardinality' => 1,
+      'type'        => 'text',
+      'settings'    => array(
+        'max_length' => 500,
+      ),
+    ),
+  );
+}
+
+/**
+ * Return a structured array defining the instances for this content type.
+ */
+function _rdf_example_installed_instances() {
+  $t = get_t();
+  return array(
+    'recipe_photo' => array(
+      'field_name'  => 'recipe_photo',
+      'label'       => $t('Photo of the prepared dish'),
+    ),
+    'recipe_summary' => array(
+      'field_name' => 'recipe_summary',
+      'label'       => $t('Short summary describing the dish'),
+      'widget'      => array(
+        'type'    => 'text_textarea',
+      ),
+    ),
+  );
+}
+
+
+/**
+ * Implements hook_uninstall().
+ */
+function rdf_example_uninstall() {
+  // Delete recipe content.
+  $sql = 'SELECT nid FROM {node} n WHERE n.type = :type';
+  $result = db_query($sql, array(':type' => 'recipe'));
+  $nids = array();
+  foreach ($result as $row) {
+    $nids[] = $row->nid;
+  }
+  node_delete_multiple($nids);
+
+  // Delete field instances for now.
+  // Check status of http://drupal.org/node/1015846
+  $instances = field_info_instances('node', 'recipe');
+  foreach ($instances as $instance_name => $instance) {
+    field_delete_instance($instance);
+  }
+
+  // Delete node type.
+  node_type_delete('recipe');
+
+  field_purge_batch(1000);
+}
diff --git a/rdf_example/rdf_example.module b/rdf_example/rdf_example.module
new file mode 100755
index 0000000..4f9e9d0
--- /dev/null
+++ b/rdf_example/rdf_example.module
@@ -0,0 +1,78 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * This is an example outlining how a module can be used to define RDF mappings.
+ * We define mappings for a node type defined in this module. We also customize
+ * mappings for a node type that is defined in another module, node_example.
+ */
+
+/**
+ * Implements hook_rdf_mapping().
+ *
+ * This hook should only be used to define the RDF mapping for an entity or
+ * bundle that has been defined by this module. On installation, this mapping
+ * will be saved to the database. To alter anything in this mapping after module
+ * installation (or to alter bundles defined in another module), the RDF CRUD
+ * functions should be used, as shown below.
+ */
+function rdf_example_rdf_mapping() {
+  return array(
+    array(
+      'type' => 'node',
+      'bundle' => 'recipe',
+      'mapping' => array(
+        'rdftype' => array('v:Recipe'),
+        // We don't use the default bundle mapping for title. Instead, we add
+        // the v:name property. We still want to use dc:title as well, though,
+        // so we include it in the array.
+        'title' => array(
+          'predicates' => array('dc:title', 'v:name'),
+        ),
+        'recipe_summary' => array(
+          'predicates' => array('v:summary'),
+        ),
+        // The photo URI isn't a string but instead points to a resource, so we
+        // indicate that the attribute type is rel. If type isn't specified, it
+        // defaults to property, which is used for string values.
+        'recipe_photo' => array(
+          'predicates' => array('v:photo'),
+          'type'  => 'rel',
+        ),
+      ),
+    ),
+  );
+}
+
+/*
+ * Implements hook_rdf_namespaces().
+ *
+ * This hook should be used to define any prefixes used by this module that are
+ * not already defined in core by rdf_rdf_namespaces.
+ *
+ * http://api.drupal.org/api/drupal/modules--rdf--rdf.api.php/function/hook_rdf_namespaces/7
+ */
+function rdf_example_rdf_namespaces() {
+  return array(
+    // Google's namespace for their custom vocabularies.
+    'v' => 'http://rdf.data-vocabulary.org/#', 
+  );
+}
+
+/**
+ * Implements hook_help().
+ */
+function rdf_example_help($path, $arg) {
+  switch ($path) {
+    case 'examples/rdf_example':
+      return "<p>" . t(
+        "The RDF Example module provides RDF mappings for a custom node type and
+        alters another node type's RDF mapping.
+        You can check your RDF using a <a href='!parser'>parser</a> by copying
+        and pasting your HTML source code into the box. For clearest results,
+        use Turtle as your output format.",
+        array('!parser' => url('http://www.w3.org/2007/08/pyRdfa/#distill_by_input'))
+      ) . "</p>";
+  }
+}
diff --git a/rdf_example/rdf_example.test b/rdf_example/rdf_example.test
new file mode 100644
index 0000000..e69de29
