简体   繁体   中英

How to remove parenthesis in dbpedia query result in SPARQL?

I am trying to query DBpedia with SPARQL by using CONSTRUCT to get a list of countries and their capitals and parse the result back in Turtle format:

CONSTRUCT {
  ?country dbo:capital ?city.
  ?country a dbo:Country.
} WHERE {
  ?country dbo:capital ?city.
  ?country a dbo:Country
}

However, when there are parenthesis () or a _ in the country name, the result does not use the prefixes properly.

Example:

dbr:Virginia  dbo:capital  <http://dbpedia.org/resource/Richmond,_Virginia>

Is there any automated way to fix this? I don't really look forward to fixing this manually...

To be honest, I don't understand why you want to do this and it remains open how you want to handle cases which aren't (can't be) prefixed in Turtle syntax. But, to give you a rough idea:

CONSTRUCT {
  ?country dbo:capital ?city. 
  ?country a dbo:Country.
} WHERE {
  ?country dbo:capital ?city_tmp. 
  ?country a dbo:Country
  ## here you would handle the "fix", e.g. use a regex and find some replacement
  BIND(uri(REPLACE(str(?city_tmp), ",_", "_", "i")) AS ?city)
}

You can see in the query that I used just a dummy regex matching ,_ and a replacement string _ . For example, http://dbpedia.org/resource/Nancy,_France will be replaced to dbr:Nancy_France

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM