要将XML数据导入neo4j数据库,我首先将该XML解析为python字典,然后使用CYPHER查询:
WITH $pubmed_dict as pubmed_article
UNWIND pubmed_article as particle
MERGE (p:Publication {pmid: particle.MedlineCitation.PMID.text})
ON CREATE SET p.title = COALESCE (particle.MedlineCitation.Article.Journal.Title, particle.MedlineCitation.Article.ArticleTitle)
ON MATCH SET p.title = COALESCE (particle.MedlineCitation.Article.Journal.Title, particle.MedlineCitation.Article.ArticleTitle)
FOREACH (author IN particle.MedlineCitation.Article.AuthorList.Author |
MERGE (a:Author {last_name: COALESCE(author.LastName, 'LAST NAME MISSING!'), first_name: COALESCE(author.ForeName, 'FIRST NAME MISSING!')})
MERGE (p)<-[:WROTE]-(a)
)设置a.affiliation = author.AffiliationInfo.Affiliation很好,但前提是在Author下面没有多个从属关系,如下所示:
...
<Author ValidYN="Y">
<LastName>Tatarsky</LastName>
<ForeName>Rose L</ForeName>
<Initials>RL</Initials>
<AffiliationInfo>
<Affiliation>Department of Zoology, University of Wisconsin, Madison, WI, 53706, USA.</Affiliation>
</AffiliationInfo>
<AffiliationInfo>
<Affiliation>Department of Neuroscience, University of Wisconsin, Madison, WI, 53706, USA.</Affiliation>
</AffiliationInfo>
</Author>
...这将导致一个错误:
neo4j.exceptions.CypherTypeError: Type mismatch: expected a map but was List{Map{Affiliation -> String("Department of Zoology, University of Wisconsin, Madison, WI, 53706, USA.")}, Map{Affiliation -> String("Department of Neuroscience, University of Wisconsin, Madison, WI, 53706, USA.")}}是否有一种方法来签入ON CREATE/MATCH SET大小写,如果这是在赋值之前的地图或列表?
如果识别了一个列表,我想迭代它并设置属性,如affiliation1、affiliation2等,如果可能的话。
发布于 2018-06-20 06:48:02
您可以设置字符串列表,因此在您的python代码中,您必须将这些数据库列表转换为字符串列表。
为什么在这里使用FOREACH,而不使用另一个展开?我不知道你是在哪里创造作者的?
WITH $pubmed_dict as pubmed_article
UNWIND pubmed_article as particle
UNWIND particle.MedlineCitation.Article.AuthorList.Author as author
MERGE (a:Author {last_name: COALESCE(author.LastName, 'LAST NAME MISSING!')})
SET a.first_name = author.ForeName, a.affiliation = author.AffiliationInfo.Affiliation
MERGE (p)<-[:WROTE]-(a) https://stackoverflow.com/questions/50893486
复制相似问题