Конфликт между набором данных и каталогом

#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, семантически это не имеет значения.