💭
Content Negotiationを使って、PythonでURIからRDFを取得する
概要
WikidataのエンティティのURIからRDFデータを取得する機会がありましたので、備忘録です。
Content Negotiationを使用しない
まず以下のように、headers
を空のままリクエストします。
import requests
# URL for the Wikidata entity in RDF format
url = "http://www.wikidata.org/entity/Q12418"
headers = {
}
# Sending a GET request to the URL
response = requests.get(url, headers=headers)
# Checking if the request was successful
if response.status_code == 200:
text = response.text
print(text[:5000])
else:
print("Failed to retrieve RDF data. Status code:", response.status_code)
この場合、以下のように、json形式のテキストデータを取得することができます。
{"entities":{"Q12418":{"pageid":14002,"ns":0,"title":"Q12418","lastrevid":2176343952,"modified":"2024-06-11T11:43:44Z","type":"item","id":"Q12418","labels":{"fr":{"language":"fr","value":"La Joconde"},"es":{"language":"es","value":"La Gioconda"},"en":{"language":"en","value":"Mona Lisa"},"af":{"language":"af","value":"Mona Lisa"},"am":{"language":"am","value":"\u121e\u1293 \u120a\u12db"},"ar":
...
ただし、求めているRDFデータは取得できません。
Content Negotiationを使用する
次にheaders
にRDF/XML
を指定します。
import requests
from lxml import etree
# URL for the Wikidata entity in RDF format
url = "http://www.wikidata.org/entity/Q12418"
# Headers to request RDF/XML format
headers = {
'Accept': 'application/rdf+xml'
}
# Sending a GET request to the URL
response = requests.get(url, headers=headers)
# Checking if the request was successful
if response.status_code == 200:
tree = etree.fromstring(response.content)
# Convert _Element to _ElementTree
tree = etree.ElementTree(tree)
# Now you can use the write method
tree.write("output.xml", pretty_print=True, xml_declaration=True, encoding='UTF-8')
else:
print("Failed to retrieve RDF data. Status code:", response.status_code)
結果、以下のようにRDFデータを取得することができました。
<?xml version='1.0' encoding='UTF-8'?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:ontolex="http://www.w3.org/ns/lemon/ontolex#" xmlns:dct="http://purl.org/dc/terms/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:wikibase="http://wikiba.se/ontology#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:schema="http://schema.org/" xmlns:cc="http://creativecommons.org/ns#" xmlns:geo="http://www.opengis.net/ont/geosparql#" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:wd="http://www.wikidata.org/entity/" xmlns:data="https://www.wikidata.org/wiki/Special:EntityData/" xmlns:s="http://www.wikidata.org/entity/statement/" xmlns:ref="http://www.wikidata.org/reference/" xmlns:v="http://www.wikidata.org/value/" xmlns:wdt="http://www.wikidata.org/prop/direct/" xmlns:wdtn="http://www.wikidata.org/prop/direct-normalized/" xmlns:p="http://www.wikidata.org/prop/" xmlns:ps="http://www.wikidata.org/prop/statement/" xmlns:psv="http://www.wikidata.org/prop/statement/value/" xmlns:psn="http://www.wikidata.org/prop/statement/value-normalized/" xmlns:pq="http://www.wikidata.org/prop/qualifier/" xmlns:pqv="http://www.wikidata.org/prop/qualifier/value/" xmlns:pqn="http://www.wikidata.org/prop/qualifier/value-normalized/" xmlns:pr="http://www.wikidata.org/prop/reference/" xmlns:prv="http://www.wikidata.org/prop/reference/value/" xmlns:prn="http://www.wikidata.org/prop/reference/value-normalized/" xmlns:wdno="http://www.wikidata.org/prop/novalue/">
<rdf:Description rdf:about="https://www.wikidata.org/wiki/Special:EntityData/Q12418">
<rdf:type rdf:resource="http://schema.org/Dataset"/>
<schema:about rdf:resource="http://www.wikidata.org/entity/Q12418"/>
<cc:license rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/"/>
<schema:softwareVersion>1.0.0</schema:softwareVersion>
<schema:version rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">2176343952</schema:version>
<schema:dateModified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-06-11T11:43:44Z</schema:dateModified>
<wikibase:statements rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">141</wikibase:statements>
<wikibase:sitelinks rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">138</wikibase:sitelinks>
<wikibase:identifiers rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">69</wikibase:identifiers>
</rdf:Description>
まとめ
間違った理解をしている点もあるかもしれませんが、参考になりましたら幸いです。
Discussion