¿Cómo validar HTML desde Java?

¿Cuál es una forma rápida y sencilla de validar HTML desde Java? Estoy buscando una clase de código abierto / PD (o un conjunto de clases) que describa las diversas propiedades de las etiquetas HTML de aproximadamente 100, como:

¿La etiqueta es opcional? ¿Vacío? ¿Es legal omitir su etiqueta de cierre?¿Qué otras etiquetas puede contener esta etiqueta (si hay alguna)?¿Qué atributos son legales para esta etiqueta y cuáles son sus tipos? (no es obligatorio, pero es bueno tenerlo)

¡Gracias!

EDITAR

Estoy buscando hacer un análisis etiqueta por etiqueta de un documento HTML, por lo que me interesa menos si el documento en su conjunto es válido, sino cuáles son los requisitos específicos para cada tipo de etiqueta. Podría codificar las reglas basadas en la especificación W3C, pero quería ver qué soluciones listas están disponibles primero.

Respuestas a la pregunta(2)

Su respuesta a la pregunta