public function specification($pattern = 'html', $value = '', $attributes = [], $contract = [])
    {
        if (!is_array($contract)) {
            return;
        }

        // create the root specification element.
        $this->appendChild(
                $this->create($pattern, $value, $attributes, $contract)
        );

        return $this;
    }