如何用YARRRML匹配JSON特定值关联影片与导演实体?
解决YARRRML中影片与导演关联的问题
给定如下JSON数据源:
[ { "crew":[ { "id":123, "job":"Director", "name":"Director Testname" }, { "id":456, "job":"Screenplay", "name":"Crew Testname" } ], "id":789 } ]
要实现生成Director实体并让影片通过hasDirector关联对应导演的需求,可使用以下YARRRML映射配置,同时解决关联缺失或错误关联所有crew成员的问题:
prefixes: ex: http://example.org/ rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# mappings: # 生成影片实体并关联对应导演 movie-mapping: sources: - ['input.json~jsonpath', '$[*]'] s: ex:movie/$(id) po: - [rdf:type, ex:Movie] # 仅关联job为Director的crew成员 - p: ex:hasDirector o: ex:director/$(crew[*].id) condition: function: equal parameters: - [str1, $(crew[*].job)] - [str2, "Director"] # 生成导演实体(仅筛选job为Director的crew条目) director-mapping: sources: - ['input.json~jsonpath', '$[*].crew[?(@.job == "Director")]'] s: ex:director/$(id) po: - [rdf:type, ex:Director] - [ex:name, $(name)] - [ex:job, $(job)]
关键配置说明
影片映射(movie-mapping)
- 通过
condition的equal函数,严格匹配crew条目中job等于"Director"的记录,确保只有导演被关联到影片的hasDirector属性,避免错误关联其他crew成员。 - 用影片自身的
id生成唯一URI,保证实体标识正确。
- 通过
导演映射(director-mapping)
- 直接在
sources的JSONPath中筛选crew[?(@.job == "Director")],只处理导演相关的条目,不会生成其他crew角色的实体。
- 直接在
常见问题排查
- 若之前未生成
hasDirector属性:检查影片映射中是否正确引用了crew[*].id作为对象值,同时确认条件判断的参数是否正确(比如字符串大小写是否匹配)。 - 若错误关联所有crew成员:说明影片映射的
hasDirector字段未添加条件筛选,导致所有crew条目都被当作导演关联,加上condition即可解决。
内容的提问来源于stack exchange,提问作者lost_ds
相关产品推荐
相关产品推荐

