Create vocab_gen.rb to build vocab.jsonld and vocab.html from vocab.ttl.
authorGregg Kellogg <gregg@kellogg-assoc.com>
Sat, 24 Aug 2013 14:39:48 -0700
changeset 1923 29f4687ca894
parent 1922 da45fd42ef7f
child 1924 69400da81a54
Create vocab_gen.rb to build vocab.jsonld and vocab.html from vocab.ttl.
test-suite/README
test-suite/README.md
test-suite/index.html
test-suite/vocab.html
test-suite/vocab.jsonld
test-suite/vocab.ttl
test-suite/vocab_context.jsonld
test-suite/vocab_gen.rb
test-suite/vocab_template.haml
--- a/test-suite/README	Fri Aug 23 18:04:23 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-Introduction
-------------
-
-The JSON-LD Test Suite is a set of tests that can
-be used to verify JSON-LD Processor conformance to the set of specifications
-that constitute JSON-LD. The goal of the suite is to provide an easy and
-comprehensive JSON-LD testing solution for developers creating JSON-LD Processors.
-
-Design
-------
-
-Tests are defined into _compact_, _expand_, _frame_, _normalize_, and _rdf_ sections:
-* _compact_ tests have _input_, _expected_ and _context_ documents. The _expected_ results
-  can be compared using JSON object comparison with the processor output.
-* _expand_ tests have _input_ and _expected_ documents. The _expected_ results
-  can be compared using JSON object comparison with the processor output.
-* _frame_ tests have _input_, _frame_ and _expected_ documents. The _expected_ results
-  can be compared using JSON object comparison with the processor output.
-* _normalize_ tests have _input_ and _expected_ documents. The _expected_ results
-  can be compared using string comparison with the processor output.
-* _rdf_ tests have _input_ and _sparql_ documents. The results are tested
-  by performing the RDF conversion and using this as the default document for an `ASK` query
-  contained within the _sparql_ document using a SPARQL endpoint. The end result is a
-  yes/no on whether the expected triples were extracted by the JSON-LD processor.
-
-
-Contributing
-------------
-
-If you would like to contribute a new test or a fix to an existing test,
-please follow these steps:
-
-1. Notify the JSON-LD mailing list, public-linked-json@w3.org,
-   that you will be creating a new test or fix and the purpose of the
-   change.
-2. Clone the git repository: git://github.com/json-ld/json-ld.org.git
-3. Make your changes and submit them via github, or via a 'git format-patch'
-   to the [JSON-LD mailing list](mailto:public-linked-json@w3.org).
-
-Optionally, you can ask for direct access to the repository and may make
-changes directly to the JSON-LD Test Suite source code. All updates to the test
-suite go live on Digital Bazaar's JSON-LD Test Suite site within seconds of
-committing changes to github via a WebHook call.
-
-How to Add a Unit Test
-----------------------
-
-In order to add a unit test, you must follow these steps:
-
-1. Pick a new unit test number. For example - 250. To be consistent, please use
-   the next available unit test number.
-2. Create a markup file in the tests/ directory with a .jsonld extension.
-   For example: tests/rdf-250.jsonld
-3. Create a SPARQL query file in the tests/ directory with a .jsonld or .sparql extension.
-   For example: tests/rdf-250.sparql
-4. Add your test to manifest.jsonld.
-
-The test suite is designed to empower JSON-LD processor maintainers to create
-and add tests as they see fit. This may mean that the test suite may become
-unstable from time to time, but this approach has been taken so that the
-long-term goal of having a comprehensive test suite for JSON-LD can be achieved
-by the JSON-LD community.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/README.md	Sat Aug 24 14:39:48 2013 -0700
@@ -0,0 +1,66 @@
+Introduction
+------------
+
+The JSON-LD Test Suite is a set of tests that can
+be used to verify JSON-LD Processor conformance to the set of specifications
+that constitute JSON-LD. The goal of the suite is to provide an easy and
+comprehensive JSON-LD testing solution for developers creating JSON-LD Processors.
+
+Design
+------
+
+Tests are defined into _compact_, _expand_, _flatten_, _frame_, _normalize_, and _rdf_ sections:
+* _compact_ tests have _input_, _expected_ and _context_ documents. The _expected_ results
+  can be compared using JSON object comparison with the processor output.
+* _expand_ tests have _input_ and _expected_ documents. The _expected_ results
+  can be compared using JSON object comparison with the processor output.
+* _frame_ tests have _input_, _frame_ and _expected_ documents. The _expected_ results
+  can be compared using JSON object comparison with the processor output.
+* _normalize_ tests have _input_ and _expected_ documents. The _expected_ results
+  can be compared using string comparison with the processor output.
+* _rdf_ tests have _input_ and _sparql_ documents. The results are tested
+  by performing the RDF conversion and using this as the default document for an `ASK` query
+  contained within the _sparql_ document using a SPARQL endpoint. The end result is a
+  yes/no on whether the expected triples were extracted by the JSON-LD processor.
+
+
+Contributing
+------------
+
+If you would like to contribute a new test or a fix to an existing test,
+please follow these steps:
+
+1. Notify the JSON-LD mailing list, public-linked-json@w3.org,
+   that you will be creating a new test or fix and the purpose of the
+   change.
+2. Clone the git repository: git://github.com/json-ld/json-ld.org.git
+3. Make your changes and submit them via github, or via a 'git format-patch'
+   to the [JSON-LD mailing list](mailto:public-linked-json@w3.org).
+
+Optionally, you can ask for direct access to the repository and may make
+changes directly to the JSON-LD Test Suite source code. All updates to the test
+suite go live on Digital Bazaar's JSON-LD Test Suite site within seconds of
+committing changes to github via a WebHook call.
+
+How to Add a Unit Test
+----------------------
+
+In order to add a unit test, you must follow these steps:
+
+1. Pick a new unit test number. For example - 250. To be consistent, please use
+   the next available unit test number.
+2. Create a markup file in the tests/ directory with a .jsonld extension.
+   For example: tests/rdf-250.jsonld
+3. Create a SPARQL query file in the tests/ directory with a .jsonld or .sparql extension.
+   For example: tests/rdf-250.sparql
+4. Add your test to manifest.jsonld.
+
+The test suite is designed to empower JSON-LD processor maintainers to create
+and add tests as they see fit. This may mean that the test suite may become
+unstable from time to time, but this approach has been taken so that the
+long-term goal of having a comprehensive test suite for JSON-LD can be achieved
+by the JSON-LD community.
+
+Building Files
+==============
+The vocab.html and vocab.jsonld files are created from vocab.ttl using with `vocab_gen.rb`.
--- a/test-suite/index.html	Fri Aug 23 18:04:23 2013 -0700
+++ b/test-suite/index.html	Sat Aug 24 14:39:48 2013 -0700
@@ -109,16 +109,18 @@
 
   <div id="container">
      <div class="row">
-        <h2 id="design" class="span12" style="text-align: center;">Design</h2>
+        <h2 id="design" class="span12" style="text-align: center;">Running the test suite</h2>
       </div>
       <div class="row">
         <section class="offset2 span8">
-          <p>Tests are defined into <em>compact</em>, <em>expand</em>, <em>frame</em>, <em>normalize</em>, and <em>rdf</em> sections:</p>
+          <p>Tests are defined into <em>compact</em>, <em>expand</em>, <em>flatten</em>, <em>frame</em>, <em>normalize</em>, and <em>rdf</em> sections:</p>
           <ul>
           <li><em>compact</em> tests have <em>input</em>, <em>expected</em> and <em>context</em> documents. The <em>expected</em> results
             can be compared using JSON object comparison with the processor output.</li>
           <li><em>expand</em> tests have <em>input</em> and <em>expected</em> documents. The <em>expected</em> results
             can be compared using JSON object comparison with the processor output.</li>
+          <li><em>flatten</em> tests have <em>input</em> and <em>expected</em> documents. The <em>expected</em> results
+            can be compared using JSON object comparison with the processor output.</li>
           <li><em>frame</em> tests have <em>input</em>, <em>frame</em> and <em>expected</em> documents. The <em>expected</em> results
             can be compared using JSON object comparison with the processor output.</li>
           <li><em>normalize</em> tests have <em>input</em> and <em>expected</em> documents. The <em>expected</em> results
@@ -128,6 +130,9 @@
           <li><em>fromRdf</em> tests have <em>input</em> and <em>expected</em> documents. The <em>expected</em> results
             can be compared using JSON object comparison with the processor output.</li>
           </ul>
+          <p>To run the tests, create a test runner which will run through each test manifest
+            and execute the tests defined within the manifest using the rules associated with
+            each <code>@type</code> defined for the test case as defined in <a href="vocab">The test vocabulary</a>.</p>
         </section>
       </div>
 
--- a/test-suite/vocab.html	Fri Aug 23 18:04:23 2013 -0700
+++ b/test-suite/vocab.html	Sat Aug 24 14:39:48 2013 -0700
@@ -1,109 +1,424 @@
 <!DOCTYPE html>
-<html>
-<head>
-  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-  <title>JSON-LD Test Suite Vocabulary</title>
-
-  <!-- Meta Tags -->
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-
-  <!-- Style Sheets -->
-  <link rel="stylesheet" type="text/css" href="../static/css/bootstrap/bootstrap.css">
-  <link rel="stylesheet" type="text/css" href="../static/css/bootstrap/bootstrap-responsive.css">
-  <link rel="stylesheet" type="text/css" href="../static/css/bootstrap/font-awesome.css">
-  <link rel="shortcut icon" href="../favicon.ico" />
-  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
-  <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.3/handlebars.min.js"></script>
-  <script id="manifest" tile="application/ld+json" src="manifest.jsonld"></script>
-  <script id="manifest-template" type="text/x-handlebars-template">
-    <section>
-      <h3><a href="tests/{{name}}-manifest.jsonld">{{name}}</a> tests</h3>
-      <p>{{description}}</p>
-      <dl class="test-description">
-        {{#each sequence}}
-        <dt>Test {{number this}}: {{this.name}}</dt>
-        <dd>
-          {{#if this.purpose}}
-          <div>Purpose: {{this.purpose}}</div>
-          {{/if}}
-          <div>Test input: <a href="tests/{{this.input}}">{{this.input}}</a></div>
-          {{#if this.context}}
-          <div>Context: <a href="tests/{{this.context}}">{{this.context}}</a></div>
-          {{/if}}
-          {{#if this.frame}}
-          <div>Frame: <a href="tests/{{this.frame}}">{{this.frame}}</a></div>
-          {{/if}}
-          <div>Expected output: <a href="tests/{{this.input}}">{{this.input}}</a></div>
-        </dd>
-        {{/each}}
-      </dl>
-    </section>
-  </script>
-  <script>
-    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
-    ga('create', 'UA-42886053-1', 'json-ld.org');
-    ga('send', 'pageview');
-  </script>
-  <style>
-    li code {display: inline;}
-  </style>
-</head>
-<body>
-  <div class="navbar navbar-static-top">
-    <div class="navbar-inner">
-      <div class="row-fluid">
-        <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
-          <span class="icon-bar"></span>
-          <span class="icon-bar"></span>
-          <span class="icon-bar"></span>
-        </a>
-        <a class="brand active" href="../"><img src="../images/json-ld-data-24.png" alt="JSON-LD logo"> JSON-LD</a>
-        <div class="nav-collapse">
-        <ul class="nav">
-          <li>
-            <a href="../playground/index.html"><span class="icon-beer"></span> Playground</a>
-          </li>
-          <li>
-            <a href="../learn.html"><span class="icon-book"></span> Documentation</a>
-          </li>
-          <!-- <li><a href="#"><span class="icon-beaker"></span> Developers</a></li> -->
-          <li class="dropdown">
-            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
-              <span class="icon-folder-open"></span> Specifications <b class="caret"></b>
-            </a>
-            <ul class="dropdown-menu">
-              <li class="nav-header"><strong>Latest</strong></li>
-              <li><a href="../spec/latest/json-ld/">Syntax</a></li>
-              <li><a href="../spec/latest/json-ld-api/">API</a></li>
-              <li><a href="../spec/latest/json-ld-framing/">Framing</a></li>
-              <li><a href="../spec/latest/rdf-graph-normalization/">Normalization</a></li>
-              <li class="divider"></li>
-              <li class="nav-header"><strong>Previous Drafts</strong></li>
-              <li><a href="../spec#syntax">Syntax</a></li>
-              <li><a href="../spec#api">API</a></li>
-              <li><a href="../spec#framing">Framing</a></li>
-              <li><a href="../spec#normalization">Normalization</a></li>
-            </ul>
-          </li>
-          <li><a href="../images/index.html"><span class="icon-picture"></span> Branding</a></li>
+<html prefix='jld: http://jsonld.org/test-suite/vocab# mf: http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#'>
+  <head>
+    <meta content='text/html;charset=utf-8' http-equiv='Content-Type'>
+    <meta content='width=device-width, initial-scale=1.0' name='viewport'>
+    <link href='../static/css/bootstrap/bootstrap.css' rel='stylesheet' type='text/css'>
+    <link href='../static/css/bootstrap/bootstrap-responsive.css' rel='stylesheet' type='text/css'>
+    <link href='../static/css/bootstrap/font-awesome.css' rel='stylesheet' type='text/css'>
+    <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js' type='text/javascript'></script>
+    <script src='//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.3/handlebars.min.js' type='text/javascript'></script>
+    <style>
+      dd code {display: inline;}
+    </style>
+    <title>
+      Test case manifest vocabulary extensions
+    </title>
+  </head>
+  <body resource='http://json-ld.org/test-suite/vocab#'>
+    <meta property='dc:creator' value='Gregg Kellogg'>
+    <link href='http://json-ld.org/test-suite/vocab#' property='dc:identifier'>
+    <div class='navbar navbar-static-top'>
+      <div class='navbar-inner'>
+        <div class='row-fluid'>
+          <a class='btn btn-navbar' data-target='.nav-collapse' data-toggle='collapse'>
+            <span class='icon-bar'></span>
+            <span class='icon-bar'></span>
+            <span class='icon-bar'></span>
+          </a>
+          <a class='brand active' href='../'>
+            <img alt='JSON-LD logo' src='../images/json-ld-data-24.png'>
+            JSON-LD
+          </a>
+          <div class='nav-collapse'></div>
+          <ul class='nav'>
+            <li>
+              <a href='../playground/index.html'>
+                <span class='icon-beer'></span>
+                Playground
+              </a>
+            </li>
+            <li>
+              <a href='../learn.html'>
+                <span class='icon-book'></span>
+                Documentation
+              </a>
+            </li>
+            <li class='dropdown'>
+              <a class='dropdown-toggle' data-toggle='dropdown' href='#'>
+                <span class='icon-folder-open'></span>
+                Specifications
+                <b class='caret'></b>
+              </a>
+              <ul class='dropdown-menu'>
+                <li class='nav-header'>
+                  <strong>
+                    Latest
+                  </strong>
+                </li>
+                <li>
+                  <a href='../spec/latest/json-ld/'>
+                    Syntax
+                  </a>
+                </li>
+                <li>
+                  <a href='../spec/latest/json-ld-api/'>
+                    API
+                  </a>
+                </li>
+                <li>
+                  <a href='../spec/latest/json-ld-framing/'>
+                    Framing
+                  </a>
+                </li>
+                <li>
+                  <a href='../spec/latest/rdf-graph-normalization/'>
+                    Normalization
+                  </a>
+                </li>
+                <li class='divider'></li>
+                <li class='nav-header'>
+                  <strong>
+                    Previous Drafts
+                  </strong>
+                </li>
+                <li>
+                  <a href='../spec#syntax'>
+                    Syntax
+                  </a>
+                </li>
+                <li>
+                  <a href='../spec#api'>
+                    API
+                  </a>
+                </li>
+                <li>
+                  <a href='../spec#framing'>
+                    Framing
+                  </a>
+                </li>
+                <li>
+                  <a href='../spec#normalization'>
+                    Normalization
+                  </a>
+                </li>
+              </ul>
+            </li>
+            <li>
+              <a href='../images/index.html'>
+                <span class='icon-picture'>
+                  Branding
+                </span>
+              </a>
+            </li>
           </ul>
         </div>
-        <!--/.nav-collapse -->
       </div>
     </div>
-  </div>
-
-  <div class="hero-unit">
-    <h1>JSON-LD Test Suite Vocabulary</h1>
-    <p>TODO: this should describe the test-suite vocabulary in HTML+RDFa</p>
-  </div>
-
-<!-- Script tags -->
-<script type="text/javascript" src="../static/js/bootstrap/bootstrap.js"></script>
-</body>
+    <div class='hero-unit'>
+      <h1 property='dc:title'>Test case manifest vocabulary extensions</h1>
+      <p property='dc:description rdfs:comment'>Test case manifest vocabulary extensions</p>
+    </div>
+    <div class='container'>
+      <div class='row'>
+        <h2 class='span12' id='classes' style='text-align: center;'>
+          Test Case Classes
+        </h2>
+      </div>
+      <div class='row'>
+        <section class='offset2 span8'>
+          <dl>
+            <dt about='jld:CompactTest' property='rdfs:label' typeof='rdfs:Class'>Compact Evaluation Test</dt>
+            <dd about='jld:CompactTest' property='rdfs:comment'>
+              <p>A <code>CompactTest</code> modifies either a <code>PositiveEvaluationTest</code>, <code>NegativeEvaluationTest</code>,
+              <code>PositiveSyntaxTest</code> or <code>NegativeSyntaxTest</code>. Tests are run using the
+              <a href="http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-compact-Promise-any-input-JsonLdContext-context-JsonLdOptions-options">compact</a>
+              method with the input argument from <code>mf:action</code> referencing a JSON-LD file in expanded form, context from <code>:input</code> and optional options
+              from <code>:option</code>. The expected results for a <code>PositiveEvaluationTest</code> MUST be compared using JSON object comparison with the processor output.</p>
+            </dd>
+            <dt about='jld:ExpandTest' property='rdfs:label' typeof='rdfs:Class'>Expand Evaluation Test</dt>
+            <dd about='jld:ExpandTest' property='rdfs:comment'>
+              <p>A <code>ExpandTest</code> modifies either a <code>PositiveEvaluationTest</code>, <code>NegativeEvaluationTest</code>,
+              <code>PositiveSyntaxTest</code> or <code>NegativeSyntaxTest</code>. Tests are run using the
+              <a href="http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-expand-Promise-any-input-JsonLdOptions-options">expand</a>
+              method with the input argument from mf:action referencing a JSON-LD file, and optional options
+              from <code>:option</code>. The expected results for a <code>PositiveEvaluationTest</code> MUST be compared using JSON object comparison with the processor output.</p>
+            </dd>
+            <dt about='jld:FlattenTest' property='rdfs:label' typeof='rdfs:Class'>Flatten Evaluation Test</dt>
+            <dd about='jld:FlattenTest' property='rdfs:comment'>
+              <p>A <code>FlattenTest</code> modifies either a <code>PositiveEvaluationTest</code>, <code>NegativeEvaluationTest</code>,
+              <code>PositiveSyntaxTest</code> or <code>NegativeSyntaxTest</code>. Tests are run using the flatten method
+              (http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-flatten-Promise-any-input-JsonLdContext-context-JsonLdOptions-options)
+              with the input argument from mf:action referencing a JSON-LD file, optional context from <code>:input</code> and optional options
+              from <code>:option</code>. The expected results for a <code>PositiveEvaluationTest</code> MUST be compared using JSON object comparison with the processor output.</p>
+            </dd>
+            <dt about='jld:FrameTest' property='rdfs:label' typeof='rdfs:Class'>Frame Evaluation Test</dt>
+            <dd about='jld:FrameTest' property='rdfs:comment'>
+              <p>A <code>FrameTest</code> modifies either a <code>PositiveEvaluationTest</code>, <code>NegativeEvaluationTest</code>,
+              <code>PositiveSyntaxTest</code> or <code>NegativeSyntaxTest</code>. Tests are run using the
+              <a href="http://json-ld.org/spec/latest/json-ld-framing/#widl-JsonLdProcessor-frame-void-object-or-object---or-IRI-input-object-or-IRI-frame-JsonLdCallback-callback-JsonLdOptions-options">frame</a>
+              method with the input argument from <code>mf:action</code> referencing a JSON-LD file, frame from <code>:input</code> and optional options
+              from <code>:option</code>. The expected results for a <code>PositiveEvaluationTest</code> MUST be compared using JSON object comparison with the processor output.</p>
+            </dd>
+            <dt about='jld:FromRDFTest' property='rdfs:label' typeof='rdfs:Class'>From RDF Evaluation Test</dt>
+            <dd about='jld:FromRDFTest' property='rdfs:comment'>
+              <p>A <code>FromRDFTest</code> modifies either a <code>PositiveEvaluationTest</code>, <code>NegativeEvaluationTest</code>,
+              <code>PositiveSyntaxTest</code> or <code>NegativeSyntaxTest</code>. Tests are run using the
+              <a href="http://json-ld.org/spec/latest/json-ld-api/index.html#rdf-to-object-conversion">RDF to Object Conversion</a>
+              algorithm with the input argument from <code>mf:action</code> referencing an N-Quads file and optional options
+              from <code>:option</code>. The expected results for a <code>PositiveEvaluationTest</code> MUST be compared using JSON object comparison with the processor output.</p>
+            </dd>
+            <dt about='jld:NegativeSyntaxTest' property='rdfs:label' typeof='rdfs:Class'>Negative Syntax Test</dt>
+            <dd about='jld:NegativeSyntaxTest' property='rdfs:comment'>
+              <p>A type of test specifically for syntax testing.
+              Syntax tests are not required to have an associated result, only an action.
+              Negative syntax tests are tests of which the result should be a parser error.</p>
+            </dd>
+            <dt about='jld:NormalizeTest' property='rdfs:label' typeof='rdfs:Class'>Normalization Evaluation Test</dt>
+            <dd about='jld:NormalizeTest' property='rdfs:comment'>
+              <p>A <code>NormalizeTest</code> modifies either a <code>PositiveEvaluationTest</code>, <code>NegativeEvaluationTest</code>,
+              <code>PositiveSyntaxTest</code> or <code>NegativeSyntaxTest</code>. Tests are run using the
+              <a href="http://json-ld.org/spec/latest/rdf-graph-normalization/#normalization-algorithm">Normalization</a>
+              algorithmwith the input argument from mf:action referencing an JSON-LD file and optional options
+              from :option. The expected results for a PositiveEvaluationTest are N-Quads serialized in lexographical order
+              and MUST be compared using string comparison.</p>
+            </dd>
+            <dt about='jld:NegativeEvaluationTest' property='rdfs:label' typeof='rdfs:Class'>Positive Evaluation Test</dt>
+            <dd about='jld:NegativeEvaluationTest' property='rdfs:comment'>
+              <p>A Negative Evaluation test is successful when the result of processing
+              the input file specified as <code>mf:action</code> results in the error identified
+              by the literal value of <code>mf:result</code>. The specifics of invoking test, including
+              the interpretation of options (<code>:option</code>) and other input files are
+              specified through another class.</p>
+            </dd>
+            <dt about='jld:PositiveEvaluationTest' property='rdfs:label' typeof='rdfs:Class'>Positive Evaluation Test</dt>
+            <dd about='jld:PositiveEvaluationTest' property='rdfs:comment'>
+              <p>A Positive Evaluation test is successful when the result of processing
+              the input file specified as <code>mf:action</code> exactly matches the output file
+              specified as <code>mf:result</code> using the comparison defined in
+              another class. The specifics of invoking test, including
+              the interpretation of options (:option) and other input files are
+              specified through another class.</p>
+            </dd>
+            <dt about='jld:PositiveSyntaxTest' property='rdfs:label' typeof='rdfs:Class'>Positive Syntax Test</dt>
+            <dd about='jld:PositiveSyntaxTest' property='rdfs:comment'>
+              <p>A type of test specifically for syntax testing. Syntax tests are not required to have an associated result, only an action.</p>
+            </dd>
+            <dt about='jld:Option' property='rdfs:label' typeof='rdfs:Class'>Processor Options</dt>
+            <dd about='jld:Option' property='rdfs:comment'>
+              <p>Options passed to the test runner to affect invocation of the appropriate API method.</p>
+            </dd>
+            <dt about='jld:Test' property='rdfs:label' typeof='rdfs:Class'>Superclass of all JSON-LD tests</dt>
+            <dd about='jld:Test' property='rdfs:comment'>
+              <p>All JSON-LD tests have an input file referenced using <code>mf:action</code>.
+              Positive and Negative Evaluation Tests also have a result file
+              referenced using <code>mf:result</code>. Other tests may take different inputs
+              and options as defined for each test class. Tests should be run
+              with the processingMode option set to &quot;json-ld-1.0&quot;, unless specified
+              explicitly as a test option.</p>
+            </dd>
+            <dt about='jld:ToRDFTest' property='rdfs:label' typeof='rdfs:Class'>To RDF Evaluation Test</dt>
+            <dd about='jld:ToRDFTest' property='rdfs:comment'>
+              <p>A <code>ToRDFTest</code> modifies either a <code>PositiveEvaluationTest</code>, <code>NegativeEvaluationTest</code>,
+              <code>PositiveSyntaxTest</code> or <code>NegativeSyntaxTest</code>. Tests are run using the
+              <a href="http://json-ld.org/spec/latest/json-ld-api/index.html#deserialize-json-ld-to-rdf-algorithm">Deserialize JSON-LD to RDF algorithm</a>
+              with the input argument from <code>mf:action</code> referencing an JSON-LD file and optional options
+              from <code>:option</code>. The expected results for a <code>PositiveEvaluationTest</code> are N-Quads serialized in lexographical order
+              and MUST be compared either string comparison or Dataset as defined
+              in <a href="http://www.w3.org/TR/rdf11-concepts/#section-dataset-isomorphism">RDF11-CONCEPTS</a>.</p>
+            </dd>
+          </dl>
+        </section>
+      </div>
+      <div class='row'>
+        <h2 class='span12' id='classes' style='text-align: center;'>
+          Test Case Properties
+        </h2>
+      </div>
+      <div class='row'>
+        <section class='offset2 span8'>
+          <dl>
+            <dt about='jld:base' property='rdfs:label' typeof='rdfs:Property'>base</dt>
+            <dd about='jld:base'>
+              <span property='rdfs:comment'>
+                <p>The base IRI to use when expanding or compacting the document. If set, this overrides the input document&#39;s IRI.</p>
+              </span>
+              <div>
+                <strong>
+                  domain:
+                </strong>
+                <code property='rdfs:domain' resource='jld:Test'>jld:Test</code>
+              </div>
+              <div>
+                <strong>
+                  range:
+                </strong>
+                <code property='rdfs:range' resource='rdfs:Resource'>rdfs:Resource</code>
+              </div>
+            </dd>
+            <dt about='jld:compactArrays' property='rdfs:label' typeof='rdfs:Property'>compact arrays</dt>
+            <dd about='jld:compactArrays'>
+              <span property='rdfs:comment'>
+                <p>If set to <code>true</code>, the JSON-LD processor replaces arrays with just one element with that element during compaction. If set to false, all arrays will remain arrays even if they have just one element.</p>
+              </span>
+              <div>
+                <strong>
+                  domain:
+                </strong>
+                <code property='rdfs:domain' resource='jld:Test'>jld:Test</code>
+              </div>
+              <div>
+                <strong>
+                  range:
+                </strong>
+                <code property='rdfs:range' resource='xsd:boolean'>xsd:boolean</code>
+              </div>
+            </dd>
+            <dt about='jld:expandContext' property='rdfs:label' typeof='rdfs:Property'>expand context</dt>
+            <dd about='jld:expandContext'>
+              <span property='rdfs:comment'>
+                <p>A context that is used to initialize the active context when expanding a document.</p>
+              </span>
+              <div>
+                <strong>
+                  domain:
+                </strong>
+                <code property='rdfs:domain' resource='jld:Test'>jld:Test</code>
+              </div>
+              <div>
+                <strong>
+                  range:
+                </strong>
+                <code property='rdfs:range' resource='rdfs:Resource'>rdfs:Resource</code>
+              </div>
+            </dd>
+            <dt about='jld:input' property='rdfs:label' typeof='rdfs:Property'>input</dt>
+            <dd about='jld:input'>
+              <span property='rdfs:comment'>
+                <p>Secondary input file</p>
+              </span>
+              <div>
+                <strong>
+                  domain:
+                </strong>
+                <code property='rdfs:domain' resource='jld:Test'>jld:Test</code>
+              </div>
+              <div>
+                <strong>
+                  range:
+                </strong>
+                <code property='rdfs:range' resource='rdfs:Resource'>rdfs:Resource</code>
+              </div>
+            </dd>
+            <dt about='jld:option' property='rdfs:label' typeof='rdfs:Property'>option</dt>
+            <dd about='jld:option'>
+              <span property='rdfs:comment'>
+                <p>Options affecting processing</p>
+              </span>
+              <div>
+                <strong>
+                  domain:
+                </strong>
+                <code property='rdfs:domain' resource='jld:Test'>jld:Test</code>
+              </div>
+              <div>
+                <strong>
+                  range:
+                </strong>
+                <code property='rdfs:range' resource='jld:Option'>jld:Option</code>
+              </div>
+            </dd>
+            <dt about='jld:processingMode' property='rdfs:label' typeof='rdfs:Property'>processing mode</dt>
+            <dd about='jld:processingMode'>
+              <span property='rdfs:comment'>
+                <p>If set to &quot;json-ld-1.0&quot;, the JSON-LD processor must produce exactly the same results as
+                the algorithms defined in this specification.
+                If set to another value, the JSON-LD processor is allowed to extend or modify
+                the algorithms defined in this specification to enable application-specific optimizations.
+                The definition of such optimizations is beyond the scope of this specification and thus not defined.
+                Consequently, different implementations may implement different optimizations.
+                Developers must not define modes beginning with json-ld as they are reserved for future versions of this specification.</p>
+              </span>
+              <div>
+                <strong>
+                  domain:
+                </strong>
+                <code property='rdfs:domain' resource='jld:Test'>jld:Test</code>
+              </div>
+              <div>
+                <strong>
+                  range:
+                </strong>
+                <code property='rdfs:range' resource='xsd:string'>xsd:string</code>
+              </div>
+            </dd>
+            <dt about='jld:produceGeneralizedRDF' property='rdfs:label' typeof='rdfs:Property'>produce generalized RDF</dt>
+            <dd about='jld:produceGeneralizedRDF'>
+              <span property='rdfs:comment'>
+                <p>Unless the produce generalized RDF flag is set to true, RDF triples containing a blank node predicate are excluded from output.</p>
+              </span>
+              <div>
+                <strong>
+                  domain:
+                </strong>
+                <code property='rdfs:domain' resource='jld:ToRDFTest'>jld:ToRDFTest</code>
+              </div>
+              <div>
+                <strong>
+                  range:
+                </strong>
+                <code property='rdfs:range' resource='xsd:boolean'>xsd:boolean</code>
+              </div>
+            </dd>
+            <dt about='jld:useDocumentLoader' property='rdfs:label' typeof='rdfs:Property'>use document loader</dt>
+            <dd about='jld:useDocumentLoader'>
+              <span property='rdfs:comment'>
+                <p>Test runners must implement a callback method with a method signature as defined
+                in <a href="http://json-ld.org/spec/latest/json-ld-api/index.html#idl-def-LoadDocumentCallback">LoadDocumentCallback</a>.
+                Specifying this option requires the test runner to provide this callback to the appropriate
+                API method using the <code>documentLoader</code> option.</p>
+              </span>
+              <div>
+                <strong>
+                  domain:
+                </strong>
+                <code property='rdfs:domain' resource='jld:Test'>jld:Test</code>
+              </div>
+              <div>
+                <strong>
+                  range:
+                </strong>
+                <code property='rdfs:range' resource='xsd:boolean'>xsd:boolean</code>
+              </div>
+            </dd>
+            <dt about='jld:useNativeTypes' property='rdfs:label' typeof='rdfs:Property'>use native types</dt>
+            <dd about='jld:useNativeTypes'>
+              <span property='rdfs:comment'>
+                <p>If the <em>use native types</em> flag is set to <code>true</code>, RDF literals with a datatype IRI tha
+                equals <code>xsd:integer</code> or <code>xsd:double</code> are converted to a JSON numbers and RDF literals
+                with a datatype IRI that equals <code>xsd:boolean</code> are converted to <code>true</code> or <code>false</code> based
+                on their lexical form.</p>
+              </span>
+              <div>
+                <strong>
+                  domain:
+                </strong>
+                <code property='rdfs:domain' resource='jld:FromRDFTest'>jld:FromRDFTest</code>
+              </div>
+              <div>
+                <strong>
+                  range:
+                </strong>
+                <code property='rdfs:range' resource='xsd:boolean'>xsd:boolean</code>
+              </div>
+            </dd>
+          </dl>
+        </section>
+      </div>
+    </div>
+    <div class='footer'>
+      <span property='dc:publisher'>W3C Linked JSON Community Group</span>
+    </div>
+    <script src='../static/js/bootstrap/bootstrap.js' type='text/javascript'></script>
+  </body>
 </html>
--- a/test-suite/vocab.jsonld	Fri Aug 23 18:04:23 2013 -0700
+++ b/test-suite/vocab.jsonld	Sat Aug 24 14:39:48 2013 -0700
@@ -6,138 +6,186 @@
     "mf": "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#",
     "xsd": "http://www.w3.org/2001/XMLSchema#",
     "jld": "http://json-ld.org/test-suite/vocab#",
-    "jld:Test": {"@type": "@id"},
-    "dc:identifier": {"@type": "@id"},
-    "rdfs:subClassOf": {"@type": "@id"},
-    "rdfs:domain": {"@type": "@id"},
-    "rdfs:range": {"@type": "@id"}
+    "jld:Test": {
+      "@type": "@id"
+    },
+    "dc:identifier": {
+      "@type": "@id"
+    },
+    "rdfs:subClassOf": {
+      "@type": "@id"
+    },
+    "rdfs:domain": {
+      "@type": "@id"
+    },
+    "rdfs:range": {
+      "@type": "@id"
+    }
   },
-  "@graph": [{
-    "@id": "../test-suite/vocab",
-    "jld:Test": "rdf:type",
-    "dc:creator": "Gregg Kellogg",
-    "dc:date": "2013-09-23",
-    "dc:description": "Test case manifest vocabulary extensions",
-    "dc:identifier": "../test-suite/vocab",
-    "dc:publisher": "W3C Linked JSON Community Group",
-    "dc:title": "Test case manifest vocabulary extensions",
-    "rdfs:comment": "Manifest vocabulary for JSON-LD test cases"
-  }, {
-    "@id": "jld:CompactTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A CompactTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,\n    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the compact method\n    (http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-compact-Promise-any-input-JsonLdContext-context-JsonLdOptions-options)\n    with the input argument from mf:action referencing a JSON-LD file in expanded form, context from :input and optional options\n    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.\n  ",
-    "rdfs:label": "Compact Evaluation Test"
-  }, {
-    "@id": "jld:ExpandTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A ExpandTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,\n    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the expand method\n    (http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-expand-Promise-any-input-JsonLdOptions-options)\n    with the input argument from mf:action referencing a JSON-LD file, and optional options\n    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.\n  ",
-    "rdfs:label": "Expand Evaluation Test"
-  }, {
-    "@id": "jld:FlattenTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A FlattenTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,\n    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the flatten method\n    (http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-flatten-Promise-any-input-JsonLdContext-context-JsonLdOptions-options)\n    with the input argument from mf:action referencing a JSON-LD file, optional context from :input and optional options\n    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.\n  ",
-    "rdfs:label": "Flatten Evaluation Test"
-  }, {
-    "@id": "jld:FrameTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A FrameTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,\n    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the frame method\n    (http://json-ld.org/spec/latest/json-ld-framing/#widl-JsonLdProcessor-frame-void-object-or-object---or-IRI-input-object-or-IRI-frame-JsonLdCallback-callback-JsonLdOptions-options)\n    with the input argument from mf:action referencing a JSON-LD file, frame from :input and optional options\n    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.\n  ",
-    "rdfs:label": "Frame Evaluation Test"
-  }, {
-    "@id": "jld:FromRDFTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A FromRDFTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,\n    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the \"RDF to Object Conversion\" algorithm\n    (http://json-ld.org/spec/latest/json-ld-api/index.html#rdf-to-object-conversion)\n    with the input argument from mf:action referencing an N-Quads file and optional options\n    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.\n  ",
-    "rdfs:label": "From RDF Evaluation Test"
-  }, {
-    "@id": "jld:NegativeEvaluationTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A Negative Evaluation test is successful when the result of processing\n    the input file specified as mf:action results in the error identified\n    by the literal value of mf:result. The specifics of invoking test, including\n    the interpretation of options (:option) and other input files are\n    specified through another class.\n  ",
-    "rdfs:label": "Positive Evaluation Test",
-    "rdfs:subClassOf": "jld:Test"
-  }, {
-    "@id": "jld:NegativeSyntaxTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A type of test specifically for syntax testing.\n    Syntax tests are not required to have an associated result, only an action.\n    Negative syntax tests are tests of which the result should be a parser error.\n  ",
-    "rdfs:label": "Negative Syntax Test",
-    "rdfs:subClassOf": "jld:Test"
-  }, {
-    "@id": "jld:NormalizeTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A NormalizeTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,\n    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the \"Normalization\" algorithm\n    (http://json-ld.org/spec/latest/rdf-graph-normalization/#normalization-algorithm)\n    with the input argument from mf:action referencing an JSON-LD file and optional options\n    from :option. The expected results for a PositiveEvaluationTest are N-Quads serialized in lexographical order\n    and MUST be compared using string comparison.\n  ",
-    "rdfs:label": "Normalization Evaluation Test"
-  }, {
-    "@id": "jld:Option",
-    "@type": "rdfs:Class",
-    "rdfs:label": "Processor Options"
-  }, {
-    "@id": "jld:PositiveEvaluationTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A Positive Evaluation test is successful when the result of processing\n    the input file specified as mf:action exactly matches the output file\n    specified as mf:result using the comparison defined in\n    another class. The specifics of invoking test, including\n    the interpretation of options (:option) and other input files are\n    specified through another class.\n  ",
-    "rdfs:label": "Positive Evaluation Test",
-    "rdfs:subClassOf": "jld:Test"
-  }, {
-    "@id": "jld:PositiveSyntaxTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "A type of test specifically for syntax testing. Syntax tests are not required to have an associated result, only an action.",
-    "rdfs:label": "Positive Syntax Test",
-    "rdfs:subClassOf": "jld:Test"
-  }, {
-    "@id": "jld:ToRDFTest",
-    "@type": "rdfs:Class",
-    "rdfs:comment": "\n    A ToRDFTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,\n    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the \"Deserialize JSON-LD to RDF algorithm\" algorithm\n    (http://json-ld.org/spec/latest/json-ld-api/index.html#deserialize-json-ld-to-rdf-algorithm)\n    with the input argument from mf:action referencing an JSON-LD file and optional options\n    from :option. The expected results for a PositiveEvaluationTest are N-Quads serialized in lexographical order\n    and MUST be compared either string comparison or Dataset as defined\n    in [RDF11-CONCEPTS](http://www.w3.org/TR/rdf11-concepts/#section-dataset-isomorphism).\n  ",
-    "rdfs:label": "To RDF Evaluation Test"
-  }, {
-    "@id": "jld:base",
-    "@type": "rdf:Property",
-    "rdfs:comment": "The base IRI to use when expanding or compacting the document. If set, this overrides the input document's IRI.",
-    "rdfs:domain": "jld:Test",
-    "rdfs:range": "rdfs:Resource"
-  }, {
-    "@id": "jld:compactArrays",
-    "@type": "rdf:Property",
-    "rdfs:comment": "If set to true, the JSON-LD processor replaces arrays with just one element with that element during compaction. If set to false, all arrays will remain arrays even if they have just one element.",
-    "rdfs:domain": "jld:Test",
-    "rdfs:range": "xsd:boolean"
-  }, {
-    "@id": "jld:documentLoader",
-    "@type": "rdf:Property",
-    "rdfs:comment": "The callback of the loader to be used to retrieve remote documents and contexts. If specified, it must be used to retrieve remote documents and contexts; otherwise, if not specified, the processor's built-in loader must be used.",
-    "rdfs:domain": "jld:Test",
-    "rdfs:range": "xsd:string"
-  }, {
-    "@id": "jld:expandContext",
-    "@type": "rdf:Property",
-    "rdfs:comment": "A context that is used to initialize the active context when expanding a document.",
-    "rdfs:domain": "jld:Test",
-    "rdfs:range": "rdfs:Resource"
-  }, {
-    "@id": "jld:input",
-    "@type": "rdf:Property",
-    "rdfs:comment": "Secondary input file",
-    "rdfs:domain": "jld:Test",
-    "rdfs:range": "rdfs:Resource"
-  }, {
-    "@id": "jld:option",
-    "@type": "rdf:Property",
-    "rdfs:comment": "Options affecting processing",
-    "rdfs:domain": "jld:Test",
-    "rdfs:range": "jld:Option"
-  }, {
-    "@id": "jld:processingMode",
-    "@type": "rdf:Property",
-    "rdfs:comment": "\n    If set to json-ld-1.0, the JSON-LD processor must produce exactly the same results as\n    the algorithms defined in this specification.\n    If set to another value, the JSON-LD processor is allowed to extend or modify\n    the algorithms defined in this specification to enable application-specific optimizations.\n    The definition of such optimizations is beyond the scope of this specification and thus not defined.\n    Consequently, different implementations may implement different optimizations.\n    Developers must not define modes beginning with json-ld as they are reserved for future versions of this specification.\n    ",
-    "rdfs:domain": "jld:Test",
-    "rdfs:range": "xsd:string"
-  }, {
-    "@id": "jld:produceGeneralizedRDF",
-    "@type": "rdf:Property",
-    "rdfs:comment": "Unless the produce generalized RDF flag is set to true, RDF triples containing a blank node predicate are excluded from output.",
-    "rdfs:domain": "jld:ToRDFTest",
-    "rdfs:range": "xsd:boolean"
-  }, {
-    "@id": "jld:useNativeTypes",
-    "@type": "rdf:Property",
-    "rdfs:comment": "\n      If the use native types flag is set to true, RDF literals with a datatype IRI tha\n      equals xsd:integer or xsd:double are converted to a JSON numbers and RDF literals\n      with a datatype IRI that equals xsd:boolean are converted to true or false based\n      on their lexical form.\n      ",
-    "rdfs:domain": "jld:FromRDFTest",
-    "rdfs:range": "xsd:boolean"
-  }]
+  "@graph": [
+    {
+      "@id": "http://json-ld.org/test-suite/vocab#",
+      "dc:creator": "Gregg Kellogg",
+      "dc:date": "2013-09-23",
+      "dc:description": "Test case manifest vocabulary extensions",
+      "dc:identifier": "http://json-ld.org/test-suite/vocab#",
+      "dc:publisher": "W3C Linked JSON Community Group",
+      "dc:title": "Test case manifest vocabulary extensions",
+      "rdfs:comment": "Manifest vocabulary for JSON-LD test cases"
+    },
+    {
+      "@id": "jld:CompactTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A `CompactTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,\n    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the\n    [compact](http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-compact-Promise-any-input-JsonLdContext-context-JsonLdOptions-options)\n    method with the input argument from `mf:action` referencing a JSON-LD file in expanded form, context from `:input` and optional options\n    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.\n  ",
+      "rdfs:label": "Compact Evaluation Test"
+    },
+    {
+      "@id": "jld:ExpandTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A `ExpandTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,\n    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the\n    [expand](http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-expand-Promise-any-input-JsonLdOptions-options)\n    method with the input argument from mf:action referencing a JSON-LD file, and optional options\n    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.\n  ",
+      "rdfs:label": "Expand Evaluation Test"
+    },
+    {
+      "@id": "jld:FlattenTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A `FlattenTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,\n    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the flatten method\n    (http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-flatten-Promise-any-input-JsonLdContext-context-JsonLdOptions-options)\n    with the input argument from mf:action referencing a JSON-LD file, optional context from `:input` and optional options\n    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.\n  ",
+      "rdfs:label": "Flatten Evaluation Test"
+    },
+    {
+      "@id": "jld:FrameTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A `FrameTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,\n    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the\n    [frame](http://json-ld.org/spec/latest/json-ld-framing/#widl-JsonLdProcessor-frame-void-object-or-object---or-IRI-input-object-or-IRI-frame-JsonLdCallback-callback-JsonLdOptions-options)\n    method with the input argument from `mf:action` referencing a JSON-LD file, frame from `:input` and optional options\n    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.\n  ",
+      "rdfs:label": "Frame Evaluation Test"
+    },
+    {
+      "@id": "jld:FromRDFTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A `FromRDFTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,\n    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the\n    [RDF to Object Conversion](http://json-ld.org/spec/latest/json-ld-api/index.html#rdf-to-object-conversion)\n    algorithm with the input argument from `mf:action` referencing an N-Quads file and optional options\n    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.\n  ",
+      "rdfs:label": "From RDF Evaluation Test"
+    },
+    {
+      "@id": "jld:NegativeEvaluationTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A Negative Evaluation test is successful when the result of processing\n    the input file specified as `mf:action` results in the error identified\n    by the literal value of `mf:result`. The specifics of invoking test, including\n    the interpretation of options (`:option`) and other input files are\n    specified through another class.\n  ",
+      "rdfs:label": "Positive Evaluation Test",
+      "rdfs:subClassOf": "jld:Test"
+    },
+    {
+      "@id": "jld:NegativeSyntaxTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A type of test specifically for syntax testing.\n    Syntax tests are not required to have an associated result, only an action.\n    Negative syntax tests are tests of which the result should be a parser error.\n  ",
+      "rdfs:label": "Negative Syntax Test",
+      "rdfs:subClassOf": "jld:Test"
+    },
+    {
+      "@id": "jld:NormalizeTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A `NormalizeTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,\n    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the\n    [Normalization](http://json-ld.org/spec/latest/rdf-graph-normalization/#normalization-algorithm)\n    algorithmwith the input argument from mf:action referencing an JSON-LD file and optional options\n    from :option. The expected results for a PositiveEvaluationTest are N-Quads serialized in lexographical order\n    and MUST be compared using string comparison.\n  ",
+      "rdfs:label": "Normalization Evaluation Test"
+    },
+    {
+      "@id": "jld:Option",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "Options passed to the test runner to affect invocation of the appropriate API method.",
+      "rdfs:label": "Processor Options"
+    },
+    {
+      "@id": "jld:PositiveEvaluationTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A Positive Evaluation test is successful when the result of processing\n    the input file specified as `mf:action` exactly matches the output file\n    specified as `mf:result` using the comparison defined in\n    another class. The specifics of invoking test, including\n    the interpretation of options (:option) and other input files are\n    specified through another class.\n  ",
+      "rdfs:label": "Positive Evaluation Test",
+      "rdfs:subClassOf": "jld:Test"
+    },
+    {
+      "@id": "jld:PositiveSyntaxTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "A type of test specifically for syntax testing. Syntax tests are not required to have an associated result, only an action.",
+      "rdfs:label": "Positive Syntax Test",
+      "rdfs:subClassOf": "jld:Test"
+    },
+    {
+      "@id": "jld:Test",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    All JSON-LD tests have an input file referenced using `mf:action`.\n    Positive and Negative Evaluation Tests also have a result file\n    referenced using `mf:result`. Other tests may take different inputs\n    and options as defined for each test class. Tests should be run\n    with the processingMode option set to \"json-ld-1.0\", unless specified\n    explicitly as a test option.\n  ",
+      "rdfs:label": "Superclass of all JSON-LD tests"
+    },
+    {
+      "@id": "jld:ToRDFTest",
+      "@type": "rdfs:Class",
+      "rdfs:comment": "\n    A `ToRDFTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,\n    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the\n    [Deserialize JSON-LD to RDF algorithm](http://json-ld.org/spec/latest/json-ld-api/index.html#deserialize-json-ld-to-rdf-algorithm)\n    with the input argument from `mf:action` referencing an JSON-LD file and optional options\n    from `:option`. The expected results for a `PositiveEvaluationTest` are N-Quads serialized in lexographical order\n    and MUST be compared either string comparison or Dataset as defined\n    in [RDF11-CONCEPTS](http://www.w3.org/TR/rdf11-concepts/#section-dataset-isomorphism).\n  ",
+      "rdfs:label": "To RDF Evaluation Test"
+    },
+    {
+      "@id": "jld:base",
+      "@type": "rdfs:Property",
+      "rdfs:comment": "The base IRI to use when expanding or compacting the document. If set, this overrides the input document's IRI.",
+      "rdfs:domain": "jld:Test",
+      "rdfs:label": "base",
+      "rdfs:range": "rdfs:Resource"
+    },
+    {
+      "@id": "jld:compactArrays",
+      "@type": "rdfs:Property",
+      "rdfs:comment": "If set to `true`, the JSON-LD processor replaces arrays with just one element with that element during compaction. If set to false, all arrays will remain arrays even if they have just one element.",
+      "rdfs:domain": "jld:Test",
+      "rdfs:label": "compact arrays",
+      "rdfs:range": "xsd:boolean"
+    },
+    {
+      "@id": "jld:expandContext",
+      "@type": "rdfs:Property",
+      "rdfs:comment": "A context that is used to initialize the active context when expanding a document.",
+      "rdfs:domain": "jld:Test",
+      "rdfs:label": "expand context",
+      "rdfs:range": "rdfs:Resource"
+    },
+    {
+      "@id": "jld:input",
+      "@type": "rdfs:Property",
+      "rdfs:comment": "Secondary input file",
+      "rdfs:domain": "jld:Test",
+      "rdfs:label": "input",
+      "rdfs:range": "rdfs:Resource"
+    },
+    {
+      "@id": "jld:option",
+      "@type": "rdfs:Property",
+      "rdfs:comment": "Options affecting processing",
+      "rdfs:domain": "jld:Test",
+      "rdfs:label": "option",
+      "rdfs:range": "jld:Option"
+    },
+    {
+      "@id": "jld:processingMode",
+      "@type": "rdfs:Property",
+      "rdfs:comment": "\n    If set to \"json-ld-1.0\", the JSON-LD processor must produce exactly the same results as\n    the algorithms defined in this specification.\n    If set to another value, the JSON-LD processor is allowed to extend or modify\n    the algorithms defined in this specification to enable application-specific optimizations.\n    The definition of such optimizations is beyond the scope of this specification and thus not defined.\n    Consequently, different implementations may implement different optimizations.\n    Developers must not define modes beginning with json-ld as they are reserved for future versions of this specification.\n  ",
+      "rdfs:domain": "jld:Test",
+      "rdfs:label": "processing mode",
+      "rdfs:range": "xsd:string"
+    },
+    {
+      "@id": "jld:produceGeneralizedRDF",
+      "@type": "rdfs:Property",
+      "rdfs:comment": "Unless the produce generalized RDF flag is set to true, RDF triples containing a blank node predicate are excluded from output.",
+      "rdfs:domain": "jld:ToRDFTest",
+      "rdfs:label": "produce generalized RDF",
+      "rdfs:range": "xsd:boolean"
+    },
+    {
+      "@id": "jld:useDocumentLoader",
+      "@type": "rdfs:Property",
+      "rdfs:comment": "\n    Test runners must implement a callback method with a method signature as defined\n    in [LoadDocumentCallback](http://json-ld.org/spec/latest/json-ld-api/index.html#idl-def-LoadDocumentCallback).\n    Specifying this option requires the test runner to provide this callback to the appropriate\n    API method using the `documentLoader` option.\n  ",
+      "rdfs:domain": "jld:Test",
+      "rdfs:label": "use document loader",
+      "rdfs:range": "xsd:boolean"
+    },
+    {
+      "@id": "jld:useNativeTypes",
+      "@type": "rdfs:Property",
+      "rdfs:comment": "\n    If the _use native types_ flag is set to `true`, RDF literals with a datatype IRI tha\n    equals `xsd:integer` or `xsd:double` are converted to a JSON numbers and RDF literals\n    with a datatype IRI that equals `xsd:boolean` are converted to `true` or `false` based\n    on their lexical form.\n    ",
+      "rdfs:domain": "jld:FromRDFTest",
+      "rdfs:label": "use native types",
+      "rdfs:range": "xsd:boolean"
+    }
+  ]
 }
\ No newline at end of file
--- a/test-suite/vocab.ttl	Fri Aug 23 18:04:23 2013 -0700
+++ b/test-suite/vocab.ttl	Sat Aug 24 14:39:48 2013 -0700
@@ -15,42 +15,50 @@
   dc:title         "Test case manifest vocabulary extensions" ;
   dc:description   "Test case manifest vocabulary extensions" ;
   dc:date          "2013-09-23" ;
-  dc:identifier    : ;
-
-## ---- Test Case Type ---
+  dc:identifier    : .
 
-:Test rdf:type rdfs:Class ;
-  rdfs:label "Superclass of all JSON-LD tests" .
+## ---- Test Case Classes ---
 
-:PositiveEvaluationTest rdf:type rdfs:Class ;
+:Test a rdfs:Class ;
+  rdfs:label "Superclass of all JSON-LD tests" ;
+  rdfs:comment """
+    All JSON-LD tests have an input file referenced using `mf:action`.
+    Positive and Negative Evaluation Tests also have a result file
+    referenced using `mf:result`. Other tests may take different inputs
+    and options as defined for each test class. Tests should be run
+    with the processingMode option set to "json-ld-1.0", unless specified
+    explicitly as a test option.
+  """ .
+
+:PositiveEvaluationTest a rdfs:Class ;
   rdfs:label "Positive Evaluation Test" ;
   rdfs:subClassOf :Test ;
   rdfs:comment """
     A Positive Evaluation test is successful when the result of processing
-    the input file specified as mf:action exactly matches the output file
-    specified as mf:result using the comparison defined in
+    the input file specified as `mf:action` exactly matches the output file
+    specified as `mf:result` using the comparison defined in
     another class. The specifics of invoking test, including
     the interpretation of options (:option) and other input files are
     specified through another class.
   """ .
 
-:NegativeEvaluationTest rdf:type rdfs:Class ;
+:NegativeEvaluationTest a rdfs:Class ;
   rdfs:label "Positive Evaluation Test" ;
   rdfs:subClassOf :Test ;
   rdfs:comment """
     A Negative Evaluation test is successful when the result of processing
-    the input file specified as mf:action results in the error identified
-    by the literal value of mf:result. The specifics of invoking test, including
-    the interpretation of options (:option) and other input files are
+    the input file specified as `mf:action` results in the error identified
+    by the literal value of `mf:result`. The specifics of invoking test, including
+    the interpretation of options (`:option`) and other input files are
     specified through another class.
   """ .
 
-:PositiveSyntaxTest rdf:type rdfs:Class ;
+:PositiveSyntaxTest a rdfs:Class ;
   rdfs:subClassOf :Test ;
   rdfs:label "Positive Syntax Test" ;
   rdfs:comment "A type of test specifically for syntax testing. Syntax tests are not required to have an associated result, only an action." .
 
-:NegativeSyntaxTest rdf:type rdfs:Class ;
+:NegativeSyntaxTest a rdfs:Class ;
   rdfs:subClassOf :Test ;
   rdfs:label "Negative Syntax Test" ;
   rdfs:comment """
@@ -59,138 +67,153 @@
     Negative syntax tests are tests of which the result should be a parser error.
   """ .
 
-:CompactTest rdf:type rdfs:Class ;
+:CompactTest a rdfs:Class ;
   rdfs:label "Compact Evaluation Test" ;
   rdfs:comment """
-    A CompactTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,
-    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the compact method
-    (http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-compact-Promise-any-input-JsonLdContext-context-JsonLdOptions-options)
-    with the input argument from mf:action referencing a JSON-LD file in expanded form, context from :input and optional options
-    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.
+    A `CompactTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
+    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the
+    [compact](http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-compact-Promise-any-input-JsonLdContext-context-JsonLdOptions-options)
+    method with the input argument from `mf:action` referencing a JSON-LD file in expanded form, context from `:input` and optional options
+    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.
   """ .
 
-:ExpandTest rdf:type rdfs:Class ;
+:ExpandTest a rdfs:Class ;
   rdfs:label "Expand Evaluation Test" ;
   rdfs:comment """
-    A ExpandTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,
-    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the expand method
-    (http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-expand-Promise-any-input-JsonLdOptions-options)
-    with the input argument from mf:action referencing a JSON-LD file, and optional options
-    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.
+    A `ExpandTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
+    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the
+    [expand](http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-expand-Promise-any-input-JsonLdOptions-options)
+    method with the input argument from mf:action referencing a JSON-LD file, and optional options
+    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.
   """ .
 
-:FlattenTest rdf:type rdfs:Class ;
+:FlattenTest a rdfs:Class ;
   rdfs:label "Flatten Evaluation Test" ;
   rdfs:comment """
-    A FlattenTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,
-    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the flatten method
+    A `FlattenTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
+    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the flatten method
     (http://json-ld.org/spec/latest/json-ld-api/index.html#widl-JsonLdProcessor-flatten-Promise-any-input-JsonLdContext-context-JsonLdOptions-options)
-    with the input argument from mf:action referencing a JSON-LD file, optional context from :input and optional options
-    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.
-  """ .
-
-:FrameTest rdf:type rdfs:Class ;
-  rdfs:label "Frame Evaluation Test" ;
-  rdfs:comment """
-    A FrameTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,
-    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the frame method
-    (http://json-ld.org/spec/latest/json-ld-framing/#widl-JsonLdProcessor-frame-void-object-or-object---or-IRI-input-object-or-IRI-frame-JsonLdCallback-callback-JsonLdOptions-options)
-    with the input argument from mf:action referencing a JSON-LD file, frame from :input and optional options
-    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.
+    with the input argument from mf:action referencing a JSON-LD file, optional context from `:input` and optional options
+    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.
   """ .
 
-:FromRDFTest rdf:type rdfs:Class ;
+:FrameTest a rdfs:Class ;
+  rdfs:label "Frame Evaluation Test" ;
+  rdfs:comment """
+    A `FrameTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
+    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the
+    [frame](http://json-ld.org/spec/latest/json-ld-framing/#widl-JsonLdProcessor-frame-void-object-or-object---or-IRI-input-object-or-IRI-frame-JsonLdCallback-callback-JsonLdOptions-options)
+    method with the input argument from `mf:action` referencing a JSON-LD file, frame from `:input` and optional options
+    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.
+  """ .
+
+:FromRDFTest a rdfs:Class ;
   rdfs:label "From RDF Evaluation Test" ;
   rdfs:comment """
-    A FromRDFTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,
-    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the "RDF to Object Conversion" algorithm
-    (http://json-ld.org/spec/latest/json-ld-api/index.html#rdf-to-object-conversion)
-    with the input argument from mf:action referencing an N-Quads file and optional options
-    from :option. The expected results for a PositiveEvaluationTest MUST be compared using JSON object comparison with the processor output.
+    A `FromRDFTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
+    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the
+    [RDF to Object Conversion](http://json-ld.org/spec/latest/json-ld-api/index.html#rdf-to-object-conversion)
+    algorithm with the input argument from `mf:action` referencing an N-Quads file and optional options
+    from `:option`. The expected results for a `PositiveEvaluationTest` MUST be compared using JSON object comparison with the processor output.
   """ .
 
-:NormalizeTest rdf:type rdfs:Class ;
+:NormalizeTest a rdfs:Class ;
   rdfs:label "Normalization Evaluation Test" ;
   rdfs:comment """
-    A NormalizeTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,
-    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the "Normalization" algorithm
-    (http://json-ld.org/spec/latest/rdf-graph-normalization/#normalization-algorithm)
-    with the input argument from mf:action referencing an JSON-LD file and optional options
+    A `NormalizeTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
+    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the
+    [Normalization](http://json-ld.org/spec/latest/rdf-graph-normalization/#normalization-algorithm)
+    algorithmwith the input argument from mf:action referencing an JSON-LD file and optional options
     from :option. The expected results for a PositiveEvaluationTest are N-Quads serialized in lexographical order
     and MUST be compared using string comparison.
   """ .
 
-:ToRDFTest rdf:type rdfs:Class ;
+:ToRDFTest a rdfs:Class ;
   rdfs:label "To RDF Evaluation Test" ;
   rdfs:comment """
-    A ToRDFTest modifies either a PositiveEvaluationTest, NegativeEvaluationTest,
-    PositiveSyntaxTest or NegativeSyntaxTest. Tests are run using the "Deserialize JSON-LD to RDF algorithm" algorithm
-    (http://json-ld.org/spec/latest/json-ld-api/index.html#deserialize-json-ld-to-rdf-algorithm)
-    with the input argument from mf:action referencing an JSON-LD file and optional options
-    from :option. The expected results for a PositiveEvaluationTest are N-Quads serialized in lexographical order
+    A `ToRDFTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
+    `PositiveSyntaxTest` or `NegativeSyntaxTest`. Tests are run using the
+    [Deserialize JSON-LD to RDF algorithm](http://json-ld.org/spec/latest/json-ld-api/index.html#deserialize-json-ld-to-rdf-algorithm)
+    with the input argument from `mf:action` referencing an JSON-LD file and optional options
+    from `:option`. The expected results for a `PositiveEvaluationTest` are N-Quads serialized in lexographical order
     and MUST be compared either string comparison or Dataset as defined
     in [RDF11-CONCEPTS](http://www.w3.org/TR/rdf11-concepts/#section-dataset-isomorphism).
   """ .
 
-:Option rdf:type rdfs:Class ;
-  rdfs:label "Processor Options" .
+:Option a rdfs:Class ;
+  rdfs:label "Processor Options" ;
+  rdfs:comment "Options passed to the test runner to affect invocation of the appropriate API method." .
   
 ## ---- Property declarations for each test ----
 
-:input rdf:type rdf:Property ;
-    rdfs:comment "Secondary input file" ;
-    rdfs:domain	 :Test ;
-    rdfs:range   rdfs:Resource .
-
-:option rdf:type rdf:Property ;
-    rdfs:comment "Options affecting processing" ;
-    rdfs:domain	 :Test ;
-    rdfs:range   :Option .
-
-:base rdf:type rdf:Property ;
-    rdfs:comment "The base IRI to use when expanding or compacting the document. If set, this overrides the input document's IRI." ;
-    rdfs:domain	 :Test ;
-    rdfs:range   rdfs:Resource .
+:input a rdfs:Property ;
+  rdfs:label "input";
+  rdfs:comment "Secondary input file" ;
+  rdfs:domain	 :Test ;
+  rdfs:range   rdfs:Resource .
 
-:compactArrays rdf:type rdf:Property ;
-    rdfs:comment "If set to true, the JSON-LD processor replaces arrays with just one element with that element during compaction. If set to false, all arrays will remain arrays even if they have just one element." ;
-    rdfs:domain	 :Test ;
-    rdfs:range   xsd:boolean .
+:option a rdfs:Property ;
+  rdfs:label "option";
+  rdfs:comment "Options affecting processing" ;
+  rdfs:domain	 :Test ;
+  rdfs:range   :Option .
 
-:documentLoader rdf:type rdf:Property ;
-    rdfs:comment "The callback of the loader to be used to retrieve remote documents and contexts. If specified, it must be used to retrieve remote documents and contexts; otherwise, if not specified, the processor's built-in loader must be used." ;
-    rdfs:domain	 :Test ;
-    rdfs:range   xsd:string .
+:base a rdfs:Property ;
+  rdfs:label "base";
+  rdfs:comment "The base IRI to use when expanding or compacting the document. If set, this overrides the input document's IRI." ;
+  rdfs:domain	 :Test ;
+  rdfs:range   rdfs:Resource .
 
-:expandContext rdf:type rdf:Property ;
-    rdfs:comment "A context that is used to initialize the active context when expanding a document." ;
-    rdfs:domain	 :Test ;
-    rdfs:range   rdfs:Resource .
+:compactArrays a rdfs:Property ;
+  rdfs:label "compact arrays";
+  rdfs:comment "If set to `true`, the JSON-LD processor replaces arrays with just one element with that element during compaction. If set to false, all arrays will remain arrays even if they have just one element." ;
+  rdfs:domain	 :Test ;
+  rdfs:range   xsd:boolean .
 
-:processingMode rdf:type rdf:Property ;
-    rdfs:comment """
-    If set to json-ld-1.0, the JSON-LD processor must produce exactly the same results as
+:useDocumentLoader a rdfs:Property ;
+  rdfs:label "use document loader";
+  rdfs:comment """
+    Test runners must implement a callback method with a method signature as defined
+    in [LoadDocumentCallback](http://json-ld.org/spec/latest/json-ld-api/index.html#idl-def-LoadDocumentCallback).
+    Specifying this option requires the test runner to provide this callback to the appropriate
+    API method using the `documentLoader` option.
+  """ ;
+  rdfs:domain	 :Test ;
+  rdfs:range   xsd:boolean .
+
+:expandContext a rdfs:Property ;
+  rdfs:label "expand context";
+  rdfs:comment "A context that is used to initialize the active context when expanding a document." ;
+  rdfs:domain	 :Test ;
+  rdfs:range   rdfs:Resource .
+
+:processingMode a rdfs:Property ;
+  rdfs:label "processing mode";
+  rdfs:comment """
+    If set to "json-ld-1.0", the JSON-LD processor must produce exactly the same results as
     the algorithms defined in this specification.
     If set to another value, the JSON-LD processor is allowed to extend or modify
     the algorithms defined in this specification to enable application-specific optimizations.
     The definition of such optimizations is beyond the scope of this specification and thus not defined.
     Consequently, different implementations may implement different optimizations.
     Developers must not define modes beginning with json-ld as they are reserved for future versions of this specification.
-    """ ;
-    rdfs:domain	 :Test ;
-    rdfs:range   xsd:string .
-
-:produceGeneralizedRDF rdf:type rdf:Property ;
-    rdfs:comment "Unless the produce generalized RDF flag is set to true, RDF triples containing a blank node predicate are excluded from output." ;
-    rdfs:domain	 :ToRDFTest ;
-    rdfs:range   xsd:boolean .
+  """ ;
+  rdfs:domain	 :Test ;
+  rdfs:range   xsd:string .
 
-:useNativeTypes rdf:type rdf:Property ;
-    rdfs:comment """
-      If the use native types flag is set to true, RDF literals with a datatype IRI tha
-      equals xsd:integer or xsd:double are converted to a JSON numbers and RDF literals
-      with a datatype IRI that equals xsd:boolean are converted to true or false based
-      on their lexical form.
-      """ ;
-    rdfs:domain	 :FromRDFTest ;
-    rdfs:range   xsd:boolean .
+:produceGeneralizedRDF a rdfs:Property ;
+  rdfs:label "produce generalized RDF";
+  rdfs:comment "Unless the produce generalized RDF flag is set to true, RDF triples containing a blank node predicate are excluded from output." ;
+  rdfs:domain	 :ToRDFTest ;
+  rdfs:range   xsd:boolean .
+
+:useNativeTypes a rdfs:Property ;
+  rdfs:label "use native types";
+  rdfs:comment """
+    If the _use native types_ flag is set to `true`, RDF literals with a datatype IRI tha
+    equals `xsd:integer` or `xsd:double` are converted to a JSON numbers and RDF literals
+    with a datatype IRI that equals `xsd:boolean` are converted to `true` or `false` based
+    on their lexical form.
+    """ ;
+  rdfs:domain	 :FromRDFTest ;
+  rdfs:range   xsd:boolean .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/vocab_context.jsonld	Sat Aug 24 14:39:48 2013 -0700
@@ -0,0 +1,15 @@
+{
+  "@context": {
+    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
+    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
+    "dc": "http://purl.org/dc/elements/1.1/",
+    "mf": "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#",
+    "xsd": "http://www.w3.org/2001/XMLSchema#",
+    "jld": "http://json-ld.org/test-suite/vocab#",
+    "jld:Test": {"@type": "@id"},
+    "dc:identifier": {"@type": "@id"},
+    "rdfs:subClassOf": {"@type": "@id"},
+    "rdfs:domain": {"@type": "@id"},
+    "rdfs:range": {"@type": "@id"}
+  }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/vocab_gen.rb	Sat Aug 24 14:39:48 2013 -0700
@@ -0,0 +1,28 @@
+#!/usr/bin/env ruby
+# Generate vocab.jsonld and vocab.html from vocab.ttl and vocab_template.
+#
+# Generating vocab.jsonld is equivalent to running the following:
+#
+#    jsonld --compact --context vocab_context.jsonld --input-format ttl vocab.ttl  -o vocab.jsonld
+require 'linkeddata'
+require 'haml'
+
+File.open("vocab.jsonld", "w") do |f|
+  r = RDF::Repository.load("vocab.ttl")
+  JSON::LD::API.fromRDF(r) do |expanded|
+    JSON::LD::API.compact(expanded, File.open("vocab_context.jsonld")) do |compacted|
+      # Create vocab.jsonld
+      f.write(compacted.to_json(JSON::LD::JSON_STATE))
+
+      # Create vocab.html using vocab_template.haml and compacted vocabulary
+      template = File.read("vocab_template.haml")
+      
+      html = Haml::Engine.new(template, :format => :html5).render(self,
+        :ontology => compacted['@graph'].detect {|o| o['@id'] == "http://json-ld.org/test-suite/vocab#"},
+        :classes => compacted['@graph'].select {|o| o['@type'] == "rdfs:Class"}.sort_by {|o| o['rdfs:label']},
+        :properties => compacted['@graph'].select {|o| o['@type'] == "rdfs:Property"}.sort_by {|o| o['rdfs:label']}
+      )
+      File.open("vocab.html", "w") {|fh| fh.write html}
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-suite/vocab_template.haml	Sat Aug 24 14:39:48 2013 -0700
@@ -0,0 +1,121 @@
+!!! 5
+%html{:prefix => "jld: http://jsonld.org/test-suite/vocab# mf: http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#"}
+  %head
+    %meta{"http-equiv" => "Content-Type", :content => "text/html;charset=utf-8"}
+    %meta{:name => "viewport", :content => "width=device-width, initial-scale=1.0"}
+    %link{:rel => "stylesheet", :type => "text/css", :href => "../static/css/bootstrap/bootstrap.css"}
+    %link{:rel => "stylesheet", :type => "text/css", :href => "../static/css/bootstrap/bootstrap-responsive.css"}
+    %link{:rel => "stylesheet", :type => "text/css", :href => "../static/css/bootstrap/font-awesome.css"}
+    %script{:type => "text/javascript", :src => "https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"}
+    %script{:type => "text/javascript", :src => "//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.3/handlebars.min.js"}
+    :css
+      dd code {display: inline;}
+    %title
+      = ontology['dc:title']
+  %body{:resource => ontology['@id']}
+    %meta{:property => "dc:creator", :value => ontology["dc:creator"]}
+    %link{:property => "dc:identifier", :href => ontology["@id"]}
+    %div.navbar.navbar-static-top
+      %div.navbar-inner
+        %div.row-fluid
+          %a.btn.btn-navbar{"data-toggle" => "collapse", "data-target" => ".nav-collapse"}
+            %span.icon-bar
+            %span.icon-bar
+            %span.icon-bar
+          %a.brand.active{:href => "../"}
+            %img{:src => "../images/json-ld-data-24.png", :alt => "JSON-LD logo"}
+            JSON-LD
+          %div.nav-collapse
+          %ul.nav
+            %li
+              %a{:href => "../playground/index.html"}
+                %span.icon-beer
+                Playground
+            %li
+              %a{:href => "../learn.html"}
+                %span.icon-book
+                Documentation
+            %li.dropdown
+              %a.dropdown-toggle{:href => "#", "data-toggle" => "dropdown"}
+                %span.icon-folder-open
+                Specifications
+                %b.caret
+              %ul.dropdown-menu
+                %li.nav-header
+                  %strong
+                    Latest
+                %li
+                  %a{:href => "../spec/latest/json-ld/"}
+                    Syntax
+                %li
+                  %a{:href => "../spec/latest/json-ld-api/"}
+                    API
+                %li
+                  %a{:href => "../spec/latest/json-ld-framing/"}
+                    Framing
+                %li
+                  %a{:href => "../spec/latest/rdf-graph-normalization/"}
+                    Normalization
+                %li.divider
+                %li.nav-header
+                  %strong
+                    Previous Drafts
+                %li
+                  %a{:href => "../spec#syntax"}
+                    Syntax
+                %li
+                  %a{:href => "../spec#api"}
+                    API
+                %li
+                  %a{:href => "../spec#framing"}
+                    Framing
+                %li
+                  %a{:href => "../spec#normalization"}
+                    Normalization
+            %li
+              %a{:href => "../images/index.html"}
+                %span.icon-picture
+                  Branding
+    %div.hero-unit
+      %h1{:property => "dc:title"}<= ontology["dc:title"]
+      %p{:property => "dc:description rdfs:comment"}<=ontology["dc:description"]
+
+    %div.container
+      %div.row
+        %h2.span12#classes{:style => "text-align: center;"}
+          Test Case Classes
+      %div.row
+        %section.offset2.span8
+          %dl
+            - classes.each do |cls|
+              %dt{:about => cls['@id'], :typeof => cls['@type'], :property => "rdfs:label"}<~cls["rdfs:label"]
+              %dd{:about => cls['@id'], :property => "rdfs:comment"}
+                :markdown
+                  #{cls["rdfs:comment"].to_s.gsub(/^\s+/, '')}
+      %div.row
+        %h2.span12#classes{:style => "text-align: center;"}
+          Test Case Properties
+      %div.row
+        %section.offset2.span8
+          %dl
+            - properties.each do |prop|
+              %dt{:about => prop['@id'], :typeof => prop['@type'], :property => "rdfs:label"}<~prop["rdfs:label"]
+              %dd{:about => prop['@id']}
+                %span{:property => "rdfs:comment"}
+                  :markdown
+                    #{prop["rdfs:comment"].to_s.gsub(/^\s+/, '')}
+                - if prop["rdfs:domain"]
+                  %div
+                    %strong
+                      domain:
+                    %code{:property => "rdfs:domain", :resource => prop["rdfs:domain"]}
+                      = prop["rdfs:domain"]
+                - if prop["rdfs:range"]
+                  %div
+                    %strong
+                      range:
+                    %code{:property => "rdfs:range", :resource => prop["rdfs:range"]}
+                      = prop["rdfs:range"]
+    %div.footer
+      %span{:property => "dc:publisher"}<= ontology["dc:publisher"]
+    %script{:type => "text/javascript", :src => "../static/js/bootstrap/bootstrap.js"}
\ No newline at end of file