1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
<?php
namespace Gedcomx\Rs\Client;
use Gedcomx\Rs\Client\Util\RdfCollection;
use Gedcomx\Rs\Client\Util\RdfNode;
use Gedcomx\Vocab\VocabElement;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
use ML\JsonLD\JsonLD;
class VocabElementState extends GedcomxApplicationState
{
private $rdfCollection;
protected function reconstruct(Request $request, Response $response)
{
return new VocabElementState($this->client, $request, $response, $this->accessToken, $this->stateFactory);
}
protected function loadEntity()
{
$input = (string) $this->getResponse()->getBody(true);
$options = array("");
$this->rdfCollection = new RdfCollection(JsonLD::toRdf($input, $options));
return null;
}
protected function getScope()
{
return null;
}
public function getSelfRel()
{
return Rel::DESCRIPTION;
}
public function getVocabElement(){
$vocabElement = new VocabElement();
$idQuad = $this->rdfCollection->getPropertyQuad(VocabConstants::DC_NAMESPACE . "identifier");
$vocabElement->setId(RdfNode::getValue($idQuad->getObject()));
$vocabElement->setUri(RdfNode::getValue($this->rdfCollection->first()->getSubject()));
$subclass = $this->rdfCollection->getPropertyQuad(VocabConstants::RDFS_NAMESPACE . "subClassOf");
if ($subclass != null) {
$vocabElement->setSubclass(RdfNode::getValue($subclass->getObject()));
}
$type = $this->rdfCollection->getPropertyQuad(VocabConstants::DC_NAMESPACE . "type");
if ($type != null) {
$vocabElement->setType(RdfNode::getValue($type->getObject()));
}
$labels = $this->rdfCollection->quadsMatchingProperty(VocabConstants::RDFS_NAMESPACE . "label");
if ($labels->count()) {
foreach ($labels as $label) {
$node = $label->getObject();
$vocabElement->addLabel(RdfNode::getValue($node), RdfNode::getLanguage($node));
}
}
$comments = $this->rdfCollection->quadsMatchingProperty(VocabConstants::RDFS_NAMESPACE . "comment");
if ($comments->count()) {
foreach ($comments as $comment) {
$node = $comment->getObject();
$vocabElement->addDescription(RdfNode::getValue($node), RdfNode::getLanguage($node));
}
}
return $vocabElement;
}
}