 jsonapi.services.yml                               |  8 ++---
 src/Normalizer/DocumentRootNormalizerInterface.php | 21 -------------
 ...r.php => JsonApiDocumentTopLevelNormalizer.php} | 14 ++++-----
 src/Normalizer/RelationshipItemNormalizer.php      | 18 ++++++-----
 src/Normalizer/RelationshipNormalizer.php          | 12 +-------
 src/Plugin/JsonApiResourceManager.php              |  1 -
 src/Resource/DocumentWrapperInterface.php          | 21 -------------
 src/Resource/EntityResource.php                    |  2 +-
 ...mentWrapper.php => JsonApiDocumentTopLevel.php} | 19 ++++++++----
 src/Routing/Routes.php                             |  6 ++--
 .../Normalizer/DocumentRootNormalizerTest.php      | 12 ++++----
 tests/src/Kernel/Resource/EntityResourceTest.php   | 36 +++++++++++-----------
 .../Unit/Normalizer/ConfigEntityNormalizerTest.php |  2 +-
 .../Unit/Normalizer/DocumentRootNormalizerTest.php |  6 ++--
 tests/src/Unit/Routing/RoutesTest.php              |  4 +--
 15 files changed, 68 insertions(+), 114 deletions(-)

diff --git a/jsonapi.services.yml b/jsonapi.services.yml
index ef95a3c..a1ac343 100644
--- a/jsonapi.services.yml
+++ b/jsonapi.services.yml
@@ -1,7 +1,7 @@
 services:
   serializer.normalizer.entity_reference_item.jsonapi:
     class: Drupal\jsonapi\Normalizer\RelationshipItemNormalizer
-    arguments: ['@jsonapi.resource.manager', '@serializer.normalizer.document_root.jsonapi',]
+    arguments: ['@jsonapi.resource.manager', '@serializer.normalizer.jsonapi_document_toplevel.jsonapi',]
     tags:
       - { name: normalizer, priority: 21 }
   serializer.normalizer.field_item.jsonapi:
@@ -23,7 +23,7 @@ services:
       - { name: normalizer, priority: 31 }
   serializer.normalizer.relationship.jsonapi:
     class: Drupal\jsonapi\Normalizer\RelationshipNormalizer
-    arguments: ['@jsonapi.resource.manager', '@serializer.normalizer.document_root.jsonapi', '@jsonapi.link_manager']
+    arguments: ['@jsonapi.resource.manager', '@jsonapi.link_manager']
     tags:
       - { name: normalizer, priority: 21 }
   serializer.normalizer.entity.jsonapi:
@@ -36,8 +36,8 @@ services:
     arguments: ['@jsonapi.link_manager', '@jsonapi.current_context']
     tags:
       - { name: normalizer, priority: 21 }
-  serializer.normalizer.document_root.jsonapi:
-    class: Drupal\jsonapi\Normalizer\DocumentRootNormalizer
+  serializer.normalizer.jsonapi_document_toplevel.jsonapi:
+    class: Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer
     arguments: ['@jsonapi.link_manager', '@jsonapi.current_context']
     tags:
       - { name: normalizer, priority: 22 }
diff --git a/src/Normalizer/DocumentRootNormalizerInterface.php b/src/Normalizer/DocumentRootNormalizerInterface.php
deleted file mode 100644
index 6e8cf7e..0000000
--- a/src/Normalizer/DocumentRootNormalizerInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-
-namespace Drupal\jsonapi\Normalizer;
-
-/**
- * Class DocumentRootNormalizerInterface.
- *
- * @package Drupal\jsonapi\Normalizer
- */
-interface DocumentRootNormalizerInterface {
-
-  /**
-   * Build the normalizer value.
-   *
-   * @return \Drupal\jsonapi\Normalizer\Value\EntityNormalizerValueInterface
-   *   The normalizer value.
-   */
-  public function buildNormalizerValue($data, $format = NULL, array $context = array());
-
-}
diff --git a/src/Normalizer/DocumentRootNormalizer.php b/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
similarity index 93%
rename from src/Normalizer/DocumentRootNormalizer.php
rename to src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
index 107f7e0..25f7ee4 100644
--- a/src/Normalizer/DocumentRootNormalizer.php
+++ b/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
@@ -5,25 +5,23 @@ namespace Drupal\jsonapi\Normalizer;
 use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
 use Drupal\jsonapi\Context\CurrentContextInterface;
 use Drupal\jsonapi\EntityCollectionInterface;
-use Drupal\jsonapi\Resource\DocumentWrapperInterface;
 use Drupal\jsonapi\LinkManager\LinkManagerInterface;
+use Drupal\jsonapi\Resource\JsonApiDocumentTopLevel;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
 use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
 
 /**
- * Class DocumentRootNormalizer.
+ * @see \Drupal\jsonapi\Resource\JsonApiDocumentTopLevel
  *
- * @package Drupal\jsonapi\Normalizer
+ * @internal
  */
-class DocumentRootNormalizer extends NormalizerBase implements DenormalizerInterface, NormalizerInterface, DocumentRootNormalizerInterface {
+class JsonApiDocumentTopLevelNormalizer extends NormalizerBase implements DenormalizerInterface, NormalizerInterface {
 
   /**
-   * The interface or class that this Normalizer supports.
-   *
-   * @var string
+   * {@inheritdoc}
    */
-  protected $supportedInterfaceOrClass = DocumentWrapperInterface::class;
+  protected $supportedInterfaceOrClass = JsonApiDocumentTopLevel::class;
 
   /**
    * The link manager to get the links.
diff --git a/src/Normalizer/RelationshipItemNormalizer.php b/src/Normalizer/RelationshipItemNormalizer.php
index d1e32b1..4a14a69 100644
--- a/src/Normalizer/RelationshipItemNormalizer.php
+++ b/src/Normalizer/RelationshipItemNormalizer.php
@@ -11,6 +11,8 @@ use Drupal\serialization\EntityResolver\UuidReferenceInterface;
 
 /**
  * Converts the Drupal entity reference item object to a JSON API structure.
+ *
+ * @todo Remove the dependency on \Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer
  */
 class RelationshipItemNormalizer extends FieldItemNormalizer implements UuidReferenceInterface, RefinableCacheableDependencyInterface {
 
@@ -31,23 +33,23 @@ class RelationshipItemNormalizer extends FieldItemNormalizer implements UuidRefe
   protected $resourceManager;
 
   /**
-   * The document normalizer.
+   * The JSON API document top level normalizer.
    *
-   * @var \Drupal\jsonapi\Normalizer\DocumentRootNormalizerInterface
+   * @var \Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer
    */
-  protected $documentRootNormalizer;
+  protected $jsonapiDocumentToplevelNormalizer;
 
   /**
-   * Instantiates a EntityReferenceItemNormalizer object.
+   * Instantiates a RelationshipItemNormalizer object.
    *
    * @param \Drupal\jsonapi\Configuration\ResourceManagerInterface $resource_manager
    *   The resource manager.
-   * @param \Drupal\jsonapi\Normalizer\DocumentRootNormalizerInterface $document_root_normalizer
+   * @param \Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer $jsonapi_document_toplevel_normalizer
    *   The document root normalizer for the include.
    */
-  public function __construct(ResourceManagerInterface $resource_manager, DocumentRootNormalizerInterface $document_root_normalizer) {
+  public function __construct(ResourceManagerInterface $resource_manager, JsonApiDocumentTopLevelNormalizer $jsonapi_document_toplevel_normalizer) {
     $this->resourceManager = $resource_manager;
-    $this->documentRootNormalizer = $document_root_normalizer;
+    $this->jsonapiDocumentToplevelNormalizer = $jsonapi_document_toplevel_normalizer;
   }
 
   /**
@@ -74,7 +76,7 @@ class RelationshipItemNormalizer extends FieldItemNormalizer implements UuidRefe
     // TODO Only include if the target entity type has the resource enabled.
     if (!empty($context['include']) && in_array($host_field_name, $context['include'])) {
       $context = $this->buildSubContext($context, $target_entity, $host_field_name);
-      $included_normalizer_value = $this->documentRootNormalizer->buildNormalizerValue($target_entity, $format, $context);
+      $included_normalizer_value = $this->jsonapiDocumentToplevelNormalizer->buildNormalizerValue($target_entity, $format, $context);
       $normalizer_value->setInclude($included_normalizer_value);
       $normalizer_value->addCacheableDependency($included_normalizer_value);
       // Add the cacheable dependency of the included item directly to the
diff --git a/src/Normalizer/RelationshipNormalizer.php b/src/Normalizer/RelationshipNormalizer.php
index 41e8c7f..3541567 100644
--- a/src/Normalizer/RelationshipNormalizer.php
+++ b/src/Normalizer/RelationshipNormalizer.php
@@ -39,25 +39,15 @@ class RelationshipNormalizer extends NormalizerBase {
   protected $linkManager;
 
   /**
-   * The document normalizer.
-   *
-   * @var \Drupal\jsonapi\Normalizer\DocumentRootNormalizerInterface
-   */
-  protected $documentRootNormalizer;
-
-  /**
    * RelationshipNormalizer constructor.
    *
    * @param \Drupal\jsonapi\Configuration\ResourceManagerInterface $resource_manager
    *   The resource manager.
-   * @param \Drupal\jsonapi\Normalizer\DocumentRootNormalizerInterface $document_root_normalizer
-   *   The document root normalizer for the include.
    * @param \Drupal\jsonapi\LinkManager\LinkManagerInterface $link_manager
    *   The link manager.
    */
-  public function __construct(ResourceManagerInterface $resource_manager, DocumentRootNormalizerInterface $document_root_normalizer, LinkManagerInterface $link_manager) {
+  public function __construct(ResourceManagerInterface $resource_manager, LinkManagerInterface $link_manager) {
     $this->resourceManager = $resource_manager;
-    $this->documentRootNormalizer = $document_root_normalizer;
     $this->linkManager = $link_manager;
   }
 
diff --git a/src/Plugin/JsonApiResourceManager.php b/src/Plugin/JsonApiResourceManager.php
index 47e0559..a6c982e 100644
--- a/src/Plugin/JsonApiResourceManager.php
+++ b/src/Plugin/JsonApiResourceManager.php
@@ -5,7 +5,6 @@ namespace Drupal\jsonapi\Plugin;
 use Drupal\Core\Plugin\DefaultPluginManager;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\jsonapi\Resource\DocumentWrapperInterface;
 use Drupal\jsonapi\Routing\Routes;
 
 /**
diff --git a/src/Resource/DocumentWrapperInterface.php b/src/Resource/DocumentWrapperInterface.php
deleted file mode 100644
index 16c02a2..0000000
--- a/src/Resource/DocumentWrapperInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-
-namespace Drupal\jsonapi\Resource;
-
-/**
- * Class DocumentWrapperInterface.
- *
- * @package Drupal\jsonapi\Resource
- */
-interface DocumentWrapperInterface {
-
-  /**
-   * Gets the data.
-   *
-   * @return \Drupal\Core\Entity\EntityInterface|\Drupal\jsonapi\EntityCollectionInterface
-   *   The data.
-   */
-  public function getData();
-
-}
diff --git a/src/Resource/EntityResource.php b/src/Resource/EntityResource.php
index 2c79e19..1a8bf14 100644
--- a/src/Resource/EntityResource.php
+++ b/src/Resource/EntityResource.php
@@ -460,7 +460,7 @@ class EntityResource implements EntityResourceInterface {
    *   The response.
    */
   protected function buildWrappedResponse($data, $response_code = 200, array $headers = []) {
-    return new ResourceResponse(new DocumentWrapper($data), $response_code, $headers);
+    return new ResourceResponse(new JsonApiDocumentTopLevel($data), $response_code, $headers);
   }
 
   /**
diff --git a/src/Resource/DocumentWrapper.php b/src/Resource/JsonApiDocumentTopLevel.php
similarity index 51%
rename from src/Resource/DocumentWrapper.php
rename to src/Resource/JsonApiDocumentTopLevel.php
index 2ed30c7..9aad1a5 100644
--- a/src/Resource/DocumentWrapper.php
+++ b/src/Resource/JsonApiDocumentTopLevel.php
@@ -2,13 +2,17 @@
 
 namespace Drupal\jsonapi\Resource;
 
-
 /**
- * Class DocumentWrapper.
+ * Represents a JSON API document's "top level".
+ *
+ * @see http://jsonapi.org/format/#document-top-level
  *
- * @package Drupal\jsonapi\Resource
+ * @internal
+ *
+ * @todo Add the missing required members: 'error' and 'meta' or document why not.
+ * @todo Add support for the missing optional members: 'jsonapi', 'links' and 'included' or document why not.
  */
-class DocumentWrapper implements DocumentWrapperInterface {
+class JsonApiDocumentTopLevel {
 
   /**
    * The data to normalize.
@@ -18,7 +22,7 @@ class DocumentWrapper implements DocumentWrapperInterface {
   protected $data;
 
   /**
-   * Instantiates a DocumentRootNormalizerValue object.
+   * Instantiates a JsonApiDocumentTopLevel object.
    *
    * @param \Drupal\Core\Entity\EntityInterface|\Drupal\jsonapi\EntityCollectionInterface $data
    *   The data to normalize. It can be either a straight up entity or a
@@ -29,7 +33,10 @@ class DocumentWrapper implements DocumentWrapperInterface {
   }
 
   /**
-   * {@inheritdoc}
+   * Gets the data.
+   *
+   * @return \Drupal\Core\Entity\EntityInterface|\Drupal\jsonapi\EntityCollectionInterface
+   *   The data.
    */
   public function getData() {
     return $this->data;
diff --git a/src/Routing/Routes.php b/src/Routing/Routes.php
index 2cd1413..a534f46 100644
--- a/src/Routing/Routes.php
+++ b/src/Routing/Routes.php
@@ -6,7 +6,7 @@ use Drupal\Core\Authentication\AuthenticationCollectorInterface;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Field\EntityReferenceFieldItemList;
 use Drupal\jsonapi\Plugin\JsonApiResourceManager;
-use Drupal\jsonapi\Resource\DocumentWrapperInterface;
+use Drupal\jsonapi\Resource\JsonApiDocumentTopLevel;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\Routing\Route;
@@ -104,7 +104,7 @@ class Routes implements ContainerInjectionInterface {
         ->setRequirement('_permission', $plugin_definition['permission'])
         ->setRequirement('_format', 'api_json')
         ->setRequirement('_custom_parameter_names', 'TRUE')
-        ->setOption('serialization_class', DocumentWrapperInterface::class)
+        ->setOption('serialization_class', JsonApiDocumentTopLevel::class)
         ->setMethods(['GET', 'POST']);
       if ($bundle) {
         $route_collection->setRequirement('_bundle', $bundle);
@@ -122,7 +122,7 @@ class Routes implements ContainerInjectionInterface {
         ->setRequirement('_custom_parameter_names', 'TRUE')
         ->setOption('parameters', $parameters)
         ->setOption('_auth', $this->authProviderList())
-        ->setOption('serialization_class', DocumentWrapperInterface::class)
+        ->setOption('serialization_class', JsonApiDocumentTopLevel::class)
         ->setMethods(['GET', 'PATCH', 'DELETE']);
       if ($bundle) {
         $route_individual->setRequirement('_bundle', $bundle);
diff --git a/tests/src/Kernel/Normalizer/DocumentRootNormalizerTest.php b/tests/src/Kernel/Normalizer/DocumentRootNormalizerTest.php
index d5a8954..6402e0c 100644
--- a/tests/src/Kernel/Normalizer/DocumentRootNormalizerTest.php
+++ b/tests/src/Kernel/Normalizer/DocumentRootNormalizerTest.php
@@ -7,7 +7,7 @@ use Drupal\Core\Cache\Cache;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\jsonapi\LinkManager\LinkManagerInterface;
 use Drupal\jsonapi\Normalizer\DocumentRootNormalizerInterface;
-use Drupal\jsonapi\Resource\DocumentWrapper;
+use Drupal\jsonapi\Resource\JsonApiDocumentTopLevel;
 use Drupal\jsonapi\Configuration\ResourceConfigInterface;
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
@@ -174,7 +174,7 @@ class DocumentRootNormalizerTest extends JsonapiKernelTestBase {
     $query->get('include')->willReturn('uid');
     $query->getIterator()->willReturn(new \ArrayIterator());
     $request->query = $query->reveal();
-    $document_wrapper = $this->prophesize(DocumentWrapper::class);
+    $document_wrapper = $this->prophesize(JsonApiDocumentTopLevel::class);
     $document_wrapper->getData()->willReturn($this->node);
 
     $response = new ResourceResponse();
@@ -238,7 +238,7 @@ class DocumentRootNormalizerTest extends JsonapiKernelTestBase {
     $query->get('include')->willReturn('roles');
     $query->getIterator()->willReturn(new \ArrayIterator());
     $request->query = $query->reveal();
-    $document_wrapper = $this->prophesize(DocumentWrapper::class);
+    $document_wrapper = $this->prophesize(JsonApiDocumentTopLevel::class);
     $author = $this->node->get('uid')->entity;
     $document_wrapper->getData()->willReturn($author);
 
@@ -271,7 +271,7 @@ class DocumentRootNormalizerTest extends JsonapiKernelTestBase {
    */
   public function testNormalizeUuid() {
     list($request, $resource_config) = $this->generateProphecies('node', 'article', 'uuid');
-    $document_wrapper = $this->prophesize(DocumentWrapper::class);
+    $document_wrapper = $this->prophesize(JsonApiDocumentTopLevel::class);
     $document_wrapper->getData()->willReturn($this->node);
     $query = $this->prophesize(ParameterBag::class);
     $query->get('fields')->willReturn([
@@ -310,7 +310,7 @@ class DocumentRootNormalizerTest extends JsonapiKernelTestBase {
    */
   public function testNormalizeException() {
     list($request, $resource_config) = $this->generateProphecies('node', 'article', 'id');
-    $document_wrapper = $this->prophesize(DocumentWrapper::class);
+    $document_wrapper = $this->prophesize(JsonApiDocumentTopLevel::class);
     $document_wrapper->getData()->willReturn($this->node);
     $query = $this->prophesize(ParameterBag::class);
     $query->get('fields')->willReturn([
@@ -348,7 +348,7 @@ class DocumentRootNormalizerTest extends JsonapiKernelTestBase {
    */
   public function testNormalizeConfig() {
     list($request, $resource_config) = $this->generateProphecies('node_type', 'node_type', 'id');
-    $document_wrapper = $this->prophesize(DocumentWrapper::class);
+    $document_wrapper = $this->prophesize(JsonApiDocumentTopLevel::class);
     $document_wrapper->getData()->willReturn($this->nodeType);
     $query = $this->prophesize(ParameterBag::class);
     $query->get('fields')->willReturn([
diff --git a/tests/src/Kernel/Resource/EntityResourceTest.php b/tests/src/Kernel/Resource/EntityResourceTest.php
index 93f17bd..48c9777 100644
--- a/tests/src/Kernel/Resource/EntityResourceTest.php
+++ b/tests/src/Kernel/Resource/EntityResourceTest.php
@@ -7,7 +7,7 @@ use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\jsonapi\Configuration\ResourceConfigInterface;
 use Drupal\jsonapi\EntityCollectionInterface;
-use Drupal\jsonapi\Resource\DocumentWrapper;
+use Drupal\jsonapi\Resource\JsonApiDocumentTopLevel;
 use Drupal\jsonapi\Resource\EntityResource;
 use Drupal\jsonapi\Routing\Param\Filter;
 use Drupal\jsonapi\Routing\Param\Sort;
@@ -134,7 +134,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
   public function testGetIndividual() {
     $entity_resource = $this->buildEntityResource('node', 'article', 'id');
     $response = $entity_resource->getIndividual($this->node, $this->request->reveal());
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertEquals(1, $response->getResponseData()->getData()->id());
   }
 
@@ -166,7 +166,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->getCollection($request->reveal());
 
     // Assertions.
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertInstanceOf(EntityCollectionInterface::class, $response->getResponseData()->getData());
     $this->assertEquals(1, $response->getResponseData()->getData()->getIterator()->current()->id());
     $this->assertEquals(['node:1', 'node:2', 'node_list'], $response->getCacheableMetadata()->getCacheTags());
@@ -210,7 +210,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->getCollection($request->reveal());
 
     // Assertions.
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertInstanceOf(EntityCollectionInterface::class, $response->getResponseData()->getData());
     $this->assertCount(1, $response->getResponseData()->getData());
     $this->assertEquals(['config:node_type_list'], $response->getCacheableMetadata()->getCacheTags());
@@ -254,7 +254,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->getCollection($request->reveal());
 
     // Assertions.
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertInstanceOf(EntityCollectionInterface::class, $response->getResponseData()->getData());
     $this->assertCount(2, $response->getResponseData()->getData());
     $this->assertEquals($response->getResponseData()->getData()->toArray()[0]->id(), 'lorem');
@@ -299,7 +299,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->getCollection($request->reveal());
 
     // Assertions.
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertInstanceOf(EntityCollectionInterface::class, $response->getResponseData()->getData());
     $data = $response->getResponseData()->getData();
     $this->assertCount(1, $data);
@@ -334,7 +334,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->getCollection($request->reveal());
 
     // Assertions.
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertInstanceOf(EntityCollectionInterface::class, $response->getResponseData()->getData());
     $this->assertEquals(0, $response->getResponseData()->getData()->count());
     $this->assertEquals(['node_list'], $response->getCacheableMetadata()->getCacheTags());
@@ -347,14 +347,14 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     // to-one relationship.
     $entity_resource = $this->buildEntityResource('node', 'article', 'id');
     $response = $entity_resource->getRelated($this->node, 'uid', $this->request->reveal());
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertInstanceOf(User::class, $response->getResponseData()
       ->getData());
     $this->assertEquals(1, $response->getResponseData()->getData()->id());
 
     // to-many relationship.
     $response = $entity_resource->getRelated($this->user, 'roles', $this->request->reveal());
-    $this->assertInstanceOf(DocumentWrapper::class, $response
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response
       ->getResponseData());
     $this->assertInstanceOf(EntityCollectionInterface::class, $response
       ->getResponseData()
@@ -371,7 +371,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     // to-one relationship.
     $entity_resource = $this->buildEntityResource('node', 'article', 'id');
     $response = $entity_resource->getRelationship($this->node, 'uid', $this->request->reveal());
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertInstanceOf(
       EntityReferenceFieldItemListInterface::class,
       $response->getResponseData()->getData()
@@ -405,7 +405,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->createIndividual($node, $this->request->reveal());
     // As a side effect, the node will also be saved.
     $this->assertNotEmpty($node->id());
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertEquals(3, $response->getResponseData()->getData()->id());
     $this->assertEquals(201, $response->getStatusCode());
   }
@@ -442,7 +442,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->createIndividual($node_type, $this->request->reveal());
     // As a side effect, the node type will also be saved.
     $this->assertNotEmpty($node_type->id());
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $this->assertEquals('test', $response->getResponseData()->getData()->id());
     $this->assertEquals(201, $response->getStatusCode());
   }
@@ -464,7 +464,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->patchIndividual($this->node, $parsed_node, $request->reveal());
 
     // As a side effect, the node will also be saved.
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $updated_node = $response->getResponseData()->getData();
     $this->assertInstanceOf(Node::class, $updated_node);
     $this->assertSame($values['title'], $this->node->getTitle());
@@ -492,7 +492,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->patchIndividual($this->node, $parsed_node, $request->reveal());
 
     // As a side effect, the node will also be saved.
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $updated_node = $response->getResponseData()->getData();
     $this->assertInstanceOf(Node::class, $updated_node);
     $this->assertSame($values['title'], $this->node->getTitle());
@@ -553,7 +553,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->patchIndividual($node_type, $parsed_node_type, $request->reveal());
 
     // As a side effect, the node will also be saved.
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $updated_node_type = $response->getResponseData()->getData();
     $this->assertInstanceOf(NodeType::class, $updated_node_type);
     // If the field is ignored then we should not see a difference.
@@ -673,7 +673,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
 
     // As a side effect, the node will also be saved.
     $this->assertNotEmpty($this->node->id());
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $field_list = $response->getResponseData()->getData();
     $this->assertInstanceOf(EntityReferenceFieldItemListInterface::class, $field_list);
     $this->assertSame('field_relationships', $field_list->getName());
@@ -700,7 +700,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
 
     // As a side effect, the node will also be saved.
     $this->assertNotEmpty($this->node->id());
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $field_list = $response->getResponseData()->getData();
     $this->assertInstanceOf(EntityReferenceFieldItemListInterface::class, $field_list);
     $this->assertSame('field_relationships', $field_list->getName());
@@ -742,7 +742,7 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $response = $entity_resource->deleteRelationship($this->node, 'field_relationships', $parsed_field_list, $this->request->reveal());
 
     // As a side effect, the node will also be saved.
-    $this->assertInstanceOf(DocumentWrapper::class, $response->getResponseData());
+    $this->assertInstanceOf(JsonApiDocumentTopLevel::class, $response->getResponseData());
     $field_list = $response->getResponseData()->getData();
     $this->assertInstanceOf(EntityReferenceFieldItemListInterface::class, $field_list);
     $this->assertSame('field_relationships', $field_list->getName());
diff --git a/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php b/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php
index 7be27d6..7f903df 100644
--- a/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php
+++ b/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php
@@ -30,7 +30,7 @@ class ConfigEntityNormalizerTest extends UnitTestCase {
   /**
    * The normalizer under test.
    *
-   * @var \Drupal\jsonapi\Normalizer\DocumentRootNormalizer
+   * @var \Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer
    */
   protected $normalizer;
 
diff --git a/tests/src/Unit/Normalizer/DocumentRootNormalizerTest.php b/tests/src/Unit/Normalizer/DocumentRootNormalizerTest.php
index 2699fbb..f59285a 100644
--- a/tests/src/Unit/Normalizer/DocumentRootNormalizerTest.php
+++ b/tests/src/Unit/Normalizer/DocumentRootNormalizerTest.php
@@ -4,7 +4,7 @@ namespace Drupal\Tests\jsonapi\Unit\Normalizer;
 
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\jsonapi\Configuration\ResourceConfigInterface;
-use Drupal\jsonapi\Normalizer\DocumentRootNormalizer;
+use Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer;
 use Drupal\jsonapi\LinkManager\LinkManagerInterface;
 use Drupal\jsonapi\Context\CurrentContextInterface;
 use Drupal\Tests\UnitTestCase;
@@ -27,7 +27,7 @@ class DocumentRootNormalizerTest extends UnitTestCase {
   /**
    * The normalizer under test.
    *
-   * @var \Drupal\jsonapi\Normalizer\DocumentRootNormalizer
+   * @var \Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer
    */
   protected $normalizer;
 
@@ -57,7 +57,7 @@ class DocumentRootNormalizerTest extends UnitTestCase {
       $this->resourceConfig->reveal()
     );
 
-    $this->normalizer = new DocumentRootNormalizer(
+    $this->normalizer = new JsonApiDocumentTopLevelNormalizer(
       $link_manager->reveal(),
       $current_context_manager->reveal()
     );
diff --git a/tests/src/Unit/Routing/RoutesTest.php b/tests/src/Unit/Routing/RoutesTest.php
index b2e5d1b..3eb0f87 100644
--- a/tests/src/Unit/Routing/RoutesTest.php
+++ b/tests/src/Unit/Routing/RoutesTest.php
@@ -97,7 +97,7 @@ class RoutesTest extends UnitTestCase {
     $this->assertSame(['lorem', 'ipsum'], $route->getOption('_auth'));
     $this->assertEquals(['GET', 'POST'], $route->getMethods());
     $this->assertSame('MyCustomController', $route->getDefault(RouteObjectInterface::CONTROLLER_NAME));
-    $this->assertSame('Drupal\jsonapi\Resource\DocumentWrapperInterface', $route->getOption('serialization_class'));
+    $this->assertSame('Drupal\jsonapi\Resource\JsonApiDocumentTopLevel', $route->getOption('serialization_class'));
     $this->assertFalse($iterator->offsetExists('api.dynamic.resource_type_2.collection'));
   }
 
@@ -116,7 +116,7 @@ class RoutesTest extends UnitTestCase {
     $this->assertSame('bundle_1_1', $route->getRequirement('_bundle'));
     $this->assertEquals(['GET', 'PATCH', 'DELETE'], $route->getMethods());
     $this->assertSame('MyCustomController', $route->getDefault(RouteObjectInterface::CONTROLLER_NAME));
-    $this->assertSame('Drupal\jsonapi\Resource\DocumentWrapperInterface', $route->getOption('serialization_class'));
+    $this->assertSame('Drupal\jsonapi\Resource\JsonApiDocumentTopLevel', $route->getOption('serialization_class'));
     $this->assertSame(['lorem', 'ipsum'], $route->getOption('_auth'));
     $this->assertEquals(['entity_type_1' => ['type' => 'entity:entity_type_1']], $route->getOption('parameters'));
     $this->assertFalse($iterator->offsetExists('api.dynamic.resource_type_2.individual'));
