 defmodule Xema.Format do
   @moduledoc """
-  TODO: add docs
-  """
-
-  @formats [:date_time, :email, :hostname, :ipv4, :ipv6, :uri]
-  @type format :: :date_time | :email | :hostname | :ipv4 | :ipv6 | :uri
+  This module contains semantic validators for strings.
+  """
+
+  @formats [
+    :date_time,
+    :email,
+    :hostname,
+    :ipv4,
+    :ipv6,
+    :uri,
+    :uri_fragment,
+    :uri_path,
+    :uri_query,
+    :uri_userinfo
+  ]
+  @typedoc "The list of supported validators."
+  @type format ::
+          :date_time
+          | :email
+          | :hostname
+          | :ipv4
+          | :ipv6
+          | :uri
+          | :uri_fragment
+          | :uri_path
+          | :uri_query
+          | :uri_userinfo
 
   defmacro __using__(_opts) do
     quote do

    Regex.match?(regex, string)
  end

  @spec is_uri?(any) :: boolean
  def is_uri?(string) when is_binary(string), do: is_uri?(URI.parse(string))


    end
  end

  @doc """
  Checks if the value is a valid date time.

  This function returns `true` if the value is a string and is formatted as
  defined by [RFC 3339](https://tools.ietf.org/html/rfc3339), `false` otherwise.
  """
  @spec is_date_time?(any) :: boolean
  def is_date_time?(string) when is_binary(string) do
    regex = ~r/^
