public static function frame($input, $frame, $options = null)
    {
        $options = self::mergeOptions($options);

        $input = self::expand($input, $options);
        $frame = (is_string($frame))
            ? $options->documentLoader->loadDocument($frame)->document
            : $frame;

        if (false === is_object($frame)) {
            throw new JsonLdException(
                JsonLdException::UNSPECIFIED,
                'Invalid frame detected. It must be an object.',
                $frame
            );
        }

        $processor = new Processor($options);

        // Store the frame's context as $frame gets modified
        $frameContext = new JsonObject();
        if (property_exists($frame, '@context')) {
            $frameContext->{'@context'} = $frame->{'@context'};
        }

        // Expand the frame
        $processor->expand($frame, array(), null, true);

        // and optimize away default graph (@graph as the only property at the top-level object)
        if (is_object($frame) && property_exists($frame, '@graph') && (1 === count(get_object_vars($frame)))) {
            $frame = $frame->{'@graph'};
        }

        if (false === is_array($frame)) {
            $frame = array($frame);
        }

        // Frame the input document
        $result = $processor->frame($input, $frame);

        // Compact the result using the frame's active context
        return self::doCompact($result, $frameContext, $options, true);
    }
public static function frame($input, $frame, $options = null)
    {
        $options = self::mergeOptions($options);

        $input = self::expand($input, $options);
        $frame = (is_string($frame))
            ? $options->documentLoader->loadDocument($frame)->document
            : $frame;

        if (false === is_object($frame)) {
            throw new JsonLdException(
                JsonLdException::UNSPECIFIED,
                'Invalid frame detected. It must be an object.',
                $frame
            );
        }

        $processor = new Processor($options);

        // Store the frame's context as $frame gets modified
        $frameContext = new JsonObject();
        if (property_exists($frame, '@context')) {
            $frameContext->{'@context'} = $frame->{'@context'};
        }

        // Expand the frame
        $processor->expand($frame, array(), null, true);

        // and optimize away default graph (@graph as the only property at the top-level object)
        if (is_object($frame) && property_exists($frame, '@graph') && (1 === count(get_object_vars($frame)))) {
            $frame = $frame->{'@graph'};
        }

        if (false === is_array($frame)) {
            $frame = array($frame);
        }

        // Frame the input document
        $result = $processor->frame($input, $frame);

        // Compact the result using the frame's active context
        return self::doCompact($result, $frameContext, $options, true);
    }
public static function frame ( $ input , $ frame , $ options = null ) { $ options = self :: mergeOptions ( $ options ) ; $ input = self :: expand ( $ input , $ options ) ; $ frame = ( is_string ( $ frame ) ) ? $ options -> documentLoader -> loadDocument ( $ frame ) -> document : $ frame ; if ( false === is_object ( $ frame ) ) { throw new JsonLdException ( JsonLdException :: UNSPECIFIED , 'Invalid frame detected. It must be an object.' , $ frame ) ; } $ processor = new Processor ( $ options ) ; // Store the frame's context as $frame gets modified $ frameContext = new JsonObject ( ) ; if ( property_exists ( $ frame , '@context' ) ) { $ frameContext -> { '@context' } = $ frame -> { '@context' } ; } // Expand the frame $ processor -> expand ( $ frame , array ( ) , null , true ) ; // and optimize away default graph (@graph as the only property at the top-level object) if ( is_object ( $ frame ) && property_exists ( $ frame , '@graph' ) && ( 1 === count ( get_object_vars ( $ frame ) ) ) ) { $ frame = $ frame -> { '@graph' } ; } if ( false === is_array ( $ frame ) ) { $ frame = array ( $ frame ) ; } // Frame the input document $ result = $ processor -> frame ( $ input , $ frame ) ; // Compact the result using the frame's active context return self :: doCompact ( $ result , $ frameContext , $ options , true ) ; }
Frame a JSON-LD document according a supplied frame

Both the document and the frame can be supplied directly as string,
by passing a file path, or by passing a URL.

Usage:

$result = JsonLD::frame('document.jsonld', 'frame.jsonldf');
print_r($compacted);

It is possible to configure the framing process by setting the options
parameter accordingly. Available options are:

<dl>
<dt>base</dt>
<dd>The base IRI of the input document.</dd>

<dt>expandContext</dt>
<dd>An optional context to use additionally to the context embedded
in input when expanding the input.</dd>

<dt>optimize</dt>
<dd>If set to true, the processor is free to optimize the result to
produce an even compacter representation than the algorithm
described by the official JSON-LD specification.</dd>

<dt>compactArrays</dt>
<dd>If set to true, arrays holding just one element are compacted
to scalars, otherwise the arrays are kept as arrays.</dd>

<dt>documentLoader</dt>
<dd>The document loader.</dd>
</dl>

The options parameter might be passed as associative array or as
object.

@param string|JsonObject|array $input   The JSON-LD document to compact.
@param string|JsonObject       $frame   The frame.
@param null|array|JsonObject   $options Options to configure the framing
process.

@return JsonObject The framed JSON-LD document.

@throws JsonLdException

@api
Frame a JSON - LD document according a supplied frame