¿Cuál es la forma más fácil de validar que una cadena es válida URN?¿Hay una biblioteca de Java que valide los URN?
Editar ¡El uso de URI no es una solución correcta! URIs se les permite tener todo tipo de cosas que los URN no puede, como &
¿Cuál es la forma más fácil de validar que una cadena es válida URN?¿Hay una biblioteca de Java que valide los URN?
Editar ¡El uso de URI no es una solución correcta! URIs se les permite tener todo tipo de cosas que los URN no puede, como &
Si solo necesita validarlo, puede usar una expresión regular. El siguiente coincidirá URN compatibles solamente RFC2141:
import java.util.regex.Pattern;
public class UrnTest {
public final static Pattern URN_PATTERN = Pattern.compile(
"^urn:[a-z0-9][a-z0-9-]{0,31}:([a-z0-9()+,\\-.:[email protected];$_!*']|%[0-9a-f]{2})+$",
Pattern.CASE_INSENSITIVE);
public static void main(String[] args) throws Exception {
for(String urn : args) {
boolean isUrn = URN_PATTERN.matcher(urn).matches();
System.out.println(urn+" : "+(isUrn ? "valid" : "not valid"));
}
}
}
Desafortunadamente 'java.net.URI' permite esto:' URI.create ("urn: ejemplo.com: foo") 'cuando el punto no es válido. –
Usted puede intentar jcabi-urn y su clase com.jcabi.urn.URN
(como se puede encontrar en jcabi java-doc v.0.8): "AVISO: la implementación no es totalmente compatible con RFC 2141 Se convertirá en compatible en una de nuestras versiones futuras. Una vez que cumpla totalmente este aviso, se eliminará ". – matthaeus
recientemente Liberé urnlib. Implementa una clase para representar un nombre de recurso uniforme (URN). También implementa el análisis sintáctico y la serialización de acuerdo con las restricciones definidas en RFC 2141.
Se lanzó en Maven Central y su objetivo es servir como un identificador de red que maneja la biblioteca al igual que las clases nativas Java URL y URI.
Me gusta esto. Por supuesto, esto solo verifica si una cadena es una posible URN, no es que realmente cumpla con algún espacio de nombres URN registrado. Para esto necesitaría una base de datos de espacio de nombres URN. –
La expresión regular no es compatible con [RFC2141] (http://www.ietf.org/rfc/rfc2141.txt). Por ejemplo, el espacio de nombres permite caracteres en mayúscula, mientras que su expresión regular no. – yegor256
¡Un buen punto! Lo he modificado para hacer coincidencias insensibles a mayúsculas y minúsculas. –