Я использую python3 для выполнения запросов SPARQL. Мне нужно прочитать базу данных Virtuoso и вывести триплеты. Некоторые данные в триплетах содержат специальные символы, такие как перевод строки и тому подобное.
Во всяком случае, я могу получить данные следующим образом:
queryString = "some query"
sparql.setQuery(queryString)
sparql.setReturnFormat(JSON)
try:
jsonData = sparql.query()
for result in jsonData:
print('Result: ***')
f.write(str(result) + '\n')
except:
print("Oops:", sys.exc_info()[0], file=sys.stderr)
Когда я это делаю, я получаю следующий вывод в файле:
b'{\n'
b' "head" : {\n'
b' "vars" : [\n'
b' "subject",\n'
b' "predicate",\n'
b' "object"\n'
b' ]\n'
b' },\n'
b' "results" : {\n'
b' "bindings" : [\n'
b' {\n'
b' "predicate" : {\n'
b' "type" : "uri",\n'
b' "value" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"\n'
b' },\n'
b' "subject" : {\n'
b' "type" : "uri",\n'
b' "value" : "http://www.ontologyrepository.com/CommonCoreOntologies/delimits"\n'
b' },\n'
b' "object" : {\n'
b' "type" : "uri",\n'
b' "value" : "http://www.w3.org/2002/07/owl#InverseFunctionalProperty"\n'
b' }\n'
b' },\n'
и так далее. Я не уверен, что делает префикс b
в этих строках. Во всяком случае, у меня проблемы с чтением этого с библиотеками JSON. Поэтому я бы предпочел написать его в формате JSON.
Я хотел бы заменить цикл for простой вещью, например
json.dump(jsonData, f)
or
json.dumps(jsonData, f)
Когда я это делаю, я получаю сообщение об ошибке Oops: <class 'TypeError'>
. Я заметил, что тип jsonData
равен <class 'SPARQLWrapper.Wrapper.QueryResult'>
.
Запрос SPARQL не возвращает JSON? Есть ли какое-то другое преобразование, которое я должен сделать?
b' '
(т. е. это не просто префиксb
), а переводы строк в JSON заменяются на\n
— что я не могу сразу объяснить, но кажется, что очистка должна быть довольно легко с любым количеством инструментов, если мы не можем понять, как предотвратить это. - person TallTed   schedule 23.07.2018define output:format "fmt"
прагму вывода от Virtuoso, чтобы запустить запрос строка, указывающая JSON вместо Pythonsparql.setReturnFormat(JSON)
- person TallTed   schedule 23.07.2018