This interface has been imported and adapted from the Symfony project. The constants in this interface define the different types of resource references that are declared in RFC 3986: http://tools.ietf.org/html/rfc3986 We are using the term "URL" instead of "URI" as this is more common in web applications and we do not need to distinguish them as the difference is mostly semantical and less technical. Generating URIs, i.e. representation-independent resource identifiers, is also possible.
Author: Fabien Potencier (fabien@symfony.com)
 /**
  * {@inheritdoc}
  */
 public function normalize($object, $format = null, array $context = [])
 {
     $violations = [];
     $messages = [];
     foreach ($object as $violation) {
         $violations[] = ['propertyPath' => $violation->getPropertyPath(), 'message' => $violation->getMessage()];
         $propertyPath = $violation->getPropertyPath();
         $prefix = $propertyPath ? sprintf('%s: ', $propertyPath) : '';
         $messages[] = $prefix . $violation->getMessage();
     }
     return ['@context' => $this->urlGenerator->generate('api_jsonld_context', ['shortName' => 'ConstraintViolationList']), '@type' => 'ConstraintViolationList', 'hydra:title' => $context['title'] ?? 'An error occurred', 'hydra:description' => $messages ? implode("\n", $messages) : (string) $object, 'violations' => $violations];
 }