Служебный модуль для Модуль:Wikidata, документация пока отсутствует.
formatEntityWithGenderClaim используется для род занятий (P106) и позиция в команде / специализация (P413).
applyDefaultTemplate используется для биржа (P414).
local WDS = require( 'Module:WikidataSelectors' ); local p = {}; local categoryLinksToEntitiesWithMissingLabel = '[[Категория:Википедия:Статьи со ссылками на элементы Викиданных без русской подписи]]'; local function getGenderLabelForEntityId( entityId, gender ) local genderPropertyId if gender == 1 then genderPropertyId = 'P3321' elseif gender == 2 then genderPropertyId = 'P2521' else return mw.wikibase.label( entityId ) end local genderLabels = mw.wikibase.getAllStatements( entityId, genderPropertyId ) if genderLabels then genderLabels = WDS.filterByLanguage( WDS.filterByRank( genderLabels, 'deprecated', true ), 'ru' ); end if genderLabels and genderLabels[ 1 ] and genderLabels[ 1 ].mainsnak and genderLabels[ 1 ].mainsnak.datatype == 'monolingualtext' then return genderLabels[ 1 ].mainsnak.datavalue.value.text; end return mw.wikibase.label( entityId ) end local function formatOccupationLinkForEntityId( entityId, gender ) local label = getGenderLabelForEntityId( entityId, gender ); -- first try to link to occupation article local link = mw.wikibase.sitelink( entityId ) if link and not label then label = link end -- if we don't have article for occupation, try to link to field of occupation if not link then local fooEntity = mw.wikibase.getEntity( entityId ); if fooEntity and fooEntity.claims and fooEntity.claims.P425 then fooEntity = WDS.filterByRank( fooEntity.claims.P425, 'deprecated', true ); if fooEntity ~= nil and fooEntity[1] and fooEntity[1].mainsnak and fooEntity[1].mainsnak.datavalue and fooEntity[1].mainsnak.datavalue.value and fooEntity[1].mainsnak.datavalue.value.id then link = mw.wikibase.sitelink( fooEntity[1].mainsnak.datavalue.value.id ); end end end -- no article about occupation or field, link to wikidata if not link then link = ':d:' .. entityId end if label then return '[[' .. link .. '|' .. label .. ']]' end -- сообщение об отсутвии локализованного названия -- not good, but better than nothing return '[[' .. link .. '|' .. entityId .. ']]?' .. categoryLinksToEntitiesWithMissingLabel; end function p.formatEntityWithGenderClaim( context, options, statement ) if ( not context ) then error( 'context not specified'); end; if ( not options ) then error( 'options not specified'); end; if ( not options.entity ) then error( 'options.entity is missing'); end; if ( not statement ) then error( 'statement not specified'); end; local gender = 0 -- per [[ISO/IEC 5218]] if options.entity.claims.P21 and options.entity.claims.P21[1] and options.entity.claims.P21[1].mainsnak and options.entity.claims.P21[1].mainsnak.datavalue and options.entity.claims.P21[1].mainsnak.datavalue.value then local genderId = options.entity.claims.P21[1].mainsnak.datavalue.value.id if genderId == 'Q6581097' or genderId == 'Q2449503' or genderId == 'Q44148' then gender = 1 elseif genderId == 'Q6581072' or genderId == 'Q1052281' or genderId == 'Q43445' then gender = 2 end end local snak = statement.mainsnak; if snak and snak.datavalue and snak.datavalue.value and snak.datavalue.value.id then local entityId = snak.datavalue.value.id; local value = formatOccupationLinkForEntityId( entityId, gender ) return context.wrapSnak( value, snak.hash ) end return context.formatSnak( options, snak ) end function p.applyDefaultTemplate( context, options, statement ) local snak = context.formatSnak( options, statement.mainsnak ) if ( statement.qualifiers and statement.qualifiers.P249 and statement.qualifiers.P249[1].snaktype == 'value') then snak = statement.qualifiers.P249[1].datavalue.value entityId = statement.mainsnak.datavalue.value.id wbStatus, entity = pcall( mw.wikibase.getEntity, entityId ); if ( entity.claims and entity.claims.P1424 ) then wbStatus, template = pcall( mw.wikibase.getEntity, entity.claims.P1424[1].mainsnak.datavalue.value.id ) if template:getSitelink( ) then snak = options.frame:preprocess( string.gsub( template:getSitelink( ), 'Шаблон:', '{{' ) .. '|' .. statement.qualifiers.P249[1].datavalue.value .. '}}' ) end end end --References if ( options.references and snak ) then snak = snak .. context.formatRefs( options, statement ); end return snak end function p.formatCategoryOnly( context, options, value ) return context.extractCategory( options, value ) end return p