- From: Daniel Hernandez <daniel@degu.cl>
- Date: Mon, 06 Dec 2021 15:39:26 +0100
- To: public-rdf-ruby@w3.org
Hi, Regarding the second question, an answer is that after checking that a URI is presented as a CURI with the method to_sxp, then I can get the prefix as follows: def prefix_for_curi(curi) curi_pair = uri.to_sxp.split(':') prefix_name = "#{curi_pair[0]}:".to_sym prefix_value = URI.new uri.to_s.sub(/#{curi_pair[1]}$/, '') [prefix_name, prefix_value] end Daniel Daniel Hernandez <daniel@degu.cl> writes: > Hi, > > I am surprised because URIs are translated to S-expressions in different > ways. That means that I can get: > > uri1 == uri2 #=> true > uri1.to_sxp #=> wdt:P31 > uri2.to_sxp #=> <http://www.wikidata.org/prop/direct/P31> > > In this case uri1 is translated using a prefix. To create a URI that is > translated using a prefix, this URI have to be inside a query using that > prefix. For instance, the following query: > > query = <<~QUERY > PREFIX wdt: <http://www.wikidata.org/prop/direct/> > PREFIX wd: <http://www.wikidata.org/entity/> > SELECT * > WHERE { ?person wdt:P31 wd:Q5 } > QUERY > exp = SPARQL.parse(query).to_sxp_bin > > => [:prefix, > [[:"wdt:", #<RDF::URI:0xfe4 URI:http://www.wikidata.org/prop/direct/>], > [:"wd:", #<RDF::URI:0xff0 URI:http://www.wikidata.org/entity/>]], > [:bgp, > [:triple, > #<RDF::Query::Variable:0xfb8(?person)>, > #<RDF::URI:0x1004 URI:http://www.wikidata.org/prop/direct/P31>, > #<RDF::URI:0xfbc URI:http://www.wikidata.org/entity/Q5>]]] > > Then I can print the query as a S-expression: > > puts exp.to_sxp > > => "(prefix ((wdt: <http://www.wikidata.org/prop/direct/>) > (wd: <http://www.wikidata.org/entity/>)) > (bgp (triple ?person wdt:P31 wd:Q5)))" > > An I can print a part of the query: > > puts exp[2].to_sxp > > => "(bgp (triple ?person wdt:P31 wd:Q5))" > > However, the second sxp is wrong, because does not define the prefixes. > I also noticed that to equivalent URIs can be printed differently: > > uri1 = exp[2][1][2] > uri2 = RDF::URI.new uri1.to_s > > uri1 == uri2 #=> true > uri1.to_sxp #=> wdt:P31 > uri2.to_sxp #=> <http://www.wikidata.org/prop/direct/P31> > > I see two ways to fix the second pattern: > > 1. Generate the sxp without prefixes. > (i.e., print <http://www.wikidata.org/prop/direct/P31>) > > 2. Add the prefixes to the second expression > (i.e., add the prefix wd: <http://www.wikidata.org/prop/direct/> > to the expression. > > Hence, I have two questions: > > 1) Can I get the respresentation without prefixes of an expression. > For instance, with a parameter like this: > > exp[2].to_sxp(with_prefixes: false) > > => (bgp (triple ?person > <http://www.wikidata.org/prop/direct/P31> > <http://www.wikidata.org/entity/Q5>)) > > 2) Can I get the prefixed that each URI as follows: > > uri1.get_prefix #=> [:"wdt:", #<RDF::URI:0xfe4 URI:http://www.wikidata.org/prop/direct/>] > > > Thanks, > Daniel
Received on Monday, 6 December 2021 14:39:55 UTC