/** * Completes the metadata by setting missing fields that can be inferred * by other fields * * Furthermore, the type of properties which is returned as string by * the metadata driver is replaced with a ClassMetadata instance. * * @param ClassMetadata $class The metadata to complete */ protected function completeMetadata(ClassMetadata $class) { $className = $class->getName(); if (null === $class->getIri()) { $class->setIri($this->namingStrategy->classIriFragment($className)); } if (null === $class->getExposeAs()) { $class->setExposeAs($this->namingStrategy->classShortName($className)); } // If no title has been set for this class, use it's short name if (null === $class->getTitle()) { $class->setTitle($this->namingStrategy->classShortName($className)); } foreach ($class->getProperties() as $property) { $propertyName = $property->getName(); if (null === $property->getIri()) { $property->setIri($this->namingStrategy->propertyIriFragment($className, $propertyName)); } if (null === $property->getExposeAs()) { $property->setExposeAs($this->namingStrategy->propertyShortName($className, $propertyName)); } // If no title has been set for this property, use it's short name if (null === $property->getTitle()) { $property->setTitle($this->namingStrategy->propertyShortName($className, $propertyName)); } } }
/** * Documents the properties of the passed ClassMetadata object * * @param ML\HydraBundle\Mapping\ClassMetadata $class The class metadata * * @return array The JSON-LD serialization of the class' properties. */ private function documentClassProperties(\ML\HydraBundle\Mapping\ClassMetadata $class) { $result = array(); $propertyDomain = $this->getTypeReferenceIri($class->getName()); foreach ($class->getProperties() as $property) { if (0 === strncmp('@', $property->getExposeAs(), 1)) { continue; // ignore properties that are mapped to keywords } $result[] = array('property' => $property->isExternalReference() ? $property->getIri() : array('@id' => 'vocab:' . $property->getIri(), '@type' => $property->getRoute() ? 'hydra:Link' : 'rdf:Property', 'label' => $property->getTitle(), 'description' => $property->getDescription(), 'domain' => $propertyDomain, 'range' => $this->getTypeReferenceIri($property->getType()), 'supportedOperation' => $this->documentOperations($property->getOperations())), 'hydra:title' => $property->getTitle(), 'hydra:description' => $property->getDescription(), 'required' => $property->getRequired(), 'readonly' => $property->isReadOnly(), 'writeonly' => $property->isWriteOnly()); } return $result; }