UNPKG

wikidata-filter

Version:

Filter and format a newline-delimited JSON stream of Wikidata entities

42 lines (36 loc) 1.43 kB
const { propertyClaims: simplifyPropertyClaims } = require('wikibase-sdk').simplify const haveAMatch = require('./have_a_match') const every = require('lodash.every') const some = require('lodash.some') module.exports = (claims, conjonctiveClaimsFilter) => { if (!conjonctiveClaimsFilter) return true // console.log({ conjonctiveClaimsFilter }) // ex: P31:Q571&P50|P110 => P31:Q571 && (P50 || P110) return every(conjonctiveClaimsFilter, anyDisjonctiveFilter(claims)) } const anyDisjonctiveFilter = claims => disjonctiveClaimsFilter => { return some(disjonctiveClaimsFilter, validClaim(claims)) } const validClaim = claims => claimsFilterData => { const { P, QHash, negatedProp, filterByClaimValue } = claimsFilterData // filter-out this entity unless it has claims of the desired property var propClaims = claims[P] if (propClaims && propClaims.length > 0) { if (negatedProp && !filterByClaimValue) return false } else { if (!negatedProp) return false } // let the possibility to let the claim value unspecified // ex: wikidata-filter --claim P184 if (filterByClaimValue) { // filter-out this entity unless it has a claim // of the desired property with the desired value propClaims = simplifyPropertyClaims(propClaims) if (haveAMatch(QHash, propClaims)) { if (negatedProp) return false } else { if (!negatedProp) return false } } return true }