/**
  * @param PropertyId|EntityId|int $propertyId
  * @param DataValue $dataValue
  * @param DataValue[] $derivedDataValues
  *
  * @throws InvalidArgumentException
  */
 public function __construct($propertyId, DataValue $dataValue, array $derivedDataValues)
 {
     parent::__construct($propertyId, $dataValue);
     foreach ($derivedDataValues as $key => $extensionDataValue) {
         if (!$extensionDataValue instanceof DataValue || !is_string($key)) {
             throw new InvalidArgumentException('$derivedDataValues must be an array of DataValue objects with string keys');
         }
     }
     $this->derivedDataValues = $derivedDataValues;
 }