query('rdfs:Class') ->map(static function (array $jsonLdArray): ?Type { return call_user_func(ParseType::fromJsonLdArray($jsonLdArray)); }) ->filter(); $properties = $definitions ->query('rdf:Property') ->map(static function (array $jsonLdArray): ?Property { return call_user_func(ParseProperty::fromJsonLdArray($jsonLdArray)); }) ->filter(); $constants = collect([]); foreach ($types as $type) { $constants = $constants->merge( $definitions ->query($type->resource) ->map(static function (array $constant) use ($type): ?Constant { $constant = call_user_func(ParseConstant::fromJsonLdArray($constant)); if (is_null($constant)) { return null; } $constant->type = $type->name; return $constant; }) ->filter() ); } return new TypeCollection($types, $properties, $constants); } }