#python #xml #dataset #rdf #ckan
#python #xml #набор данных #rdf #ckan
Вопрос:
Я пытаюсь добавить некоторые теги внутри определения набора данных в моем XML. Согласно структуре европейского портала данных, я должен следовать тегу
<foaf:Agent rdf:about="URI/of/the/publisher">
<foaf:name xml:lang="es"> Name of the publisher</foaf:name>
</foaf:Agent>
<dct:publisher rdf:resource=”URI/of/the/publisher”>
Прямо сейчас внутри моего dcat:Dataset я могу добавить только dct:publisher, пропустив два других тега.
В моем коде я присвоил имя литералу, а для URI — URIref, поскольку это должны быть значения для RDF.
g = self.g
g.add((dataset_ref, RDF.type, DCAT.Dataset))
publishers = dataset_dict.get(dhc.EXPORT_AVAILABLE_PUBLISHERS, {})
organization_id = dataset_dict.get('publisher')
if organization_id in publishers:
publisher = publishers.get(organization_id)
else:
publisher = []
org = h.get_organization(organization_id, False)
publisher = [org.get('title'), None, None]
if org and org['extras']:
for extra in org.get('extras'):
if extra and 'key' in extra and extra['key'] == dhc.ORG_ID_:
notation = extra.get('value')
publisher[1] = dhc.PUBLISHER_PREFIX notation
publisher[2] = notation
publishers[organization_id] = publisher
dataset_dict[dhc.EXPORT_AVAILABLE_PUBLISHERS] = publishers
if publisher:
# self._add_resource_list_triple(dataset_ref, DCT.publisher, publisher[1], publisher[0], None, None, publisher[2])
EDP_publisher = URIRef(publisher[1])
g.add((dataset_ref, DCT.publisher, EDP_publisher))
g.add((dataset_ref, FOAF.Agent, EDP_publisher))
g.add((EDP_publisher, FOAF.name, Literal(publisher[0])))
Поэтому каждый раз, когда я использую g.add с FOAF.name и ФОАФ.Агент, он отправляет мой тег из тега dataset (dcat:Dataset) и преобразует его из about в определение ресурса.
Я чувствую, что это может быть конфликт кода. Где я мог ошибиться с определением?
Обновлено: после дополнительных попыток я обнаружил, что проблема, связанная с тем, что структура не попадает в «основной тег», является конфликтом из-за использования определения «RDF.type», поскольку основной структурой является g.add((dataset_ref, RDF.type, DCAT.Dataset))
, и когда я пытаюсь создать ее родительский и дочерний тег, родительскийполучите дубликат с основным тегом, поскольку он получает те же значения, поскольку я обнаружил в документации, что если дочерняя структура не находит в родительской «RDF.type», она автоматически сгенерирует его, вызвав его «rdf: Description»
Мне удалось получить только следующую структуру, хотя это не то, что мне нужно получить.
<dcat:Dataset rdf:about="URI-ref">
<dct:description xml:lang="es"> Description of the dataset </dct:description>
<dct:title xml:lang="en">Title of dataset</dct:title>
<dct:publisher rdf:resource="URI-ref"/>
</dcat:Dataset>
<foaf:Agent rdf:about="URI-ref">
<foaf:name>Name of the publisher</foaf:name>
</foaf:Agent>
Мне не удается добавить Foaf:Agent и foaf:name внутри dcat:Dataset.
Комментарии:
1.
g.add((dataset_ref, FOAF.Agent, EDP_publisher))
-> есть ли причина для использованияfoaf:Agent
в качестве свойства? Я имею в виду, что это явно класс в словаре FOAF, не так ли?2. Я также не понимаю, что вы подразумеваете под «вне набора данных» — вы просто добавляете тройки к графику RDF.
3. Используется Foaf: agent, потому что европейский портал данных объявил этот тег таким.
4. Я имею в виду за пределами набора данных:
<dcat:Dataset rdf:about="URIref"> <dct:title xml:lang="en">Title</dct:title> <dct:language rdf:resource="URIlanguage"/> <dcat:distribution rdf:resource="URIref"/> <dct:publisher rdf:resource="URIpublisher"/> <foaf:Agent rdf:resource="URIpublisher"/> <dct:description xml:lang="en">TEXT.</dct:description> </dcat:Dataset> <foaf:name>Name publisher</foaf:name>
Я пытаюсь получить <foaf:Agent rdf:resource=»URIpublisher»> <foaf:name>Имя издателя </foaf:name> </foaf:name> Внутри <dcat:Dataset>5. опять же,
foaf:Agent
это не свойство… и, отвечая на ваш другой вопрос, я не понимаю, почему это имеет значение. Это просто XML-сериализация RDF, семантически это не имеет значения.