def rule_katakana_middle_dot(value, offset, ucd):
    """Return true if context permits KATAKANA MIDDLE DOT (U+30FB).

    From https://tools.ietf.org/html/rfc5892#appendix-A.7:

      "Note that the Script of Katakana Middle Dot is not any of
      "Hiragana", "Katakana", or "Han".  The effect of this rule is to
      require at least one character in the label to be in one of those
      scripts."

    Args:
        value (str): String value to check.
        offset (int): Position within `value`.
        ucd (UnicodeData): Unicode character database.

    Returns:
        bool: True if value is allowed.
    """
    assert value[offset] == '\u30fb'
    return any(ucd.hiragana_katakana_han_script(ord(x)) for x in value)