2012-06-27 15 views
8

Deseo obtener resultados de la consulta sparql y los resultados no contienen espacio de nombres. ejemplo: existe como resultado de triple formato como:Sparql Query Results sin espacio de nombres

"http://www.xyz.com#Raxit" "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" "http://www.xyz.com#Name" 

así que quiero obtener sólo siguiente:

Raxit type Name 

quiero conseguir esto se traduce directamente de consulta SPARQL. Estoy usando virtuoso.

¿Es posible obtener esto de sparql?

Por favor, comparta sus ideas al respecto.

Gracias de antemano.

Respuesta

7

Si los datos es regular, y usted sabe que la sub-cadena que desea siempre se produce después de un carácter #, a continuación, puede utilizar la función strafter de SPARQL 1.1. No sé si esto está disponible en la implementación de Virtuoso o no.

Sin embargo, es, en general, una estrategia muy arriesgada. No todos los URI están formateados con una parte de nombre local después de un carácter #. De hecho, en general, un URI puede no tener un nombre local legal o útil en absoluto. Entonces debería preguntarse: ¿por qué cree que necesita esto? En términos generales, una aplicación web semántica utiliza el URI completo como un identificador indivisible. Si su necesidad es realmente que se muestre algo amigable para los seres humanos en una interfaz de usuario, haga que su consulta también busque propiedades rdfs:label o skos:label. En el peor de los casos, trate de abreviar el formulario URI a nombre q (es decir, prefix:name), usando los prefijos del modelo o un servicio como prefix.cc

+0

Sí, lo necesito. Quiero mostrar los datos al usuario y no quiero utilizar el split o el indexof de la función en java. Es por eso que quiero obtener directamente de la consulta sparql. – Raxit

+1

Me parece un tanto increíble que tan pocas herramientas tengan una opción para esto. Supongo que las personas que trabajan con rdf rara vez trabajan con el formato de texto? La salida 'arq' de Apache Jena está prefijada por defecto en lugar de uris completo, aunque – olejorgenb

1

La forma más sencilla de lograr esto es no molestarse en adaptar su consulta, sino simplemente procesar el resultado usted mismo. Dependiendo de la biblioteca de cliente que use para comunicarse con Virtuoso, normalmente encontrará que tiene soporte de API para analizar el resultado, recuperar valores y para cada valor, obtener solo el nombre local (le sugiero que busque un método URI.getLocalName() o algo similar)

Cuestiones relacionadas