Exhibit memory of learned materials by recalling facts, terms, basic concepts, and answers.
Demonstrate understanding of facts and ideas by organizing, comparing, translating, interpreting, giving descriptions, and stating the main ideas
Questions like: Compare the health benefits of eating apples vs. oranges.
Using acquired knowledge. Solve problems in new situations by applying acquired knowledge, facts, techniques and rules.
Questions like: Would apples prevent scurvy, a disease caused by a deficiency in vitamin C?
Examine and break information into parts by identifying motives or causes. Make inferences and find evidence to support generalizations
Questions like: List four ways of serving foods made with apples and explain which ones have the highest health benefits. Provide references to support your statements.
Present and defend opinions by making judgments about information, validity of ideas or quality of work based on a set of criteria
Questions like: Which kinds of apples are best for baking a pie, and why?
Builds a structure or pattern from diverse elements; it also refers the act of putting parts together to form a whole (Omari, 2006). Compile information together in a different way by combining elements in a new pattern or proposing alternative solutions
Questions like: Convert an "unhealthy" recipe for apple pie to a "healthy" recipe by replacing your choice of ingredients. Explain the health benefits of using the ingredients you chose vs. the original ones.
There are five levels in the affective domain moving through the lowest order processes to the highest:
The lowest level; the student passively pays attention. Without this level no learning can occur. Receiving is about the student's memory and recognition as well.
The student actively participates in the learning process, not only attends to a stimulus; the student also reacts in some way.
The student attaches a value to an object, phenomenon, or piece of information. The student associates a value or some values to the knowledge they acquired.
The student can put together different values, information, and ideas and accommodate them within his/her own schema; comparing, relating and elaborating on what has been learned.
Bloom and his colleagues never created subcategories for skills in the psychomotor domain, but since then other educators have created their own psychomotor taxonomies. Simpson (1972) proposed the following levels:
Readiness to act. It includes mental, physical, and emotional sets. These three sets are dispositions that predetermine a person's response to different situations (sometimes called mindsets). Examples: Knows and acts upon a sequence of steps in a manufacturing process. Recognize one's abilities and limitations. Shows desire to learn a new process (motivation). NOTE: This subdivision of Psychomotor is closely related with the “Responding to phenomena” subdivision of the Affective domain. Key Words: begins, displays, explains, moves, proceeds, reacts, shows, states, volunteers.
This is the intermediate stage in learning a complex skill. Learned responses have become habitual and the movements can be performed with some confidence and proficiency. Examples: Use a personal computer. Repair a leaking tap. Drive a car. Key Words: assembles, calibrates, constructs, dismantles, displays, fastens, fixes, grinds, heats, manipulates, measures, mends, mixes, organizes, sketches.
In the appendix to Handbook I, there is a definition of knowledge which serves as the apex for an alternative, summary classification of the educational goals. This is significant as the taxonomy has been called upon significantly in other fields such as knowledge management, potentially out of context.
This was subsequently acknowledged in the discussion of the original taxonomy in its 2000 revision,[6] and the taxonomy reestablished on more systematic lines. It is generally considered that the role the taxonomy played in systematising a field was more important than any perceived lack of rigour in its construction.
Some critiques of the taxonomy's cognitive domain admit the existence of these six categories, but question the existence of a sequential, hierarchical link. Often, educators view the taxonomy as a hierarchy and dismiss the lowest levels as unworthy of teaching . The learning of the lower levels enables the building of skills in the higher levels of the taxonomy. This scaffolding process is an application of Vygotskian constructivism. Also the revised edition of Bloom's taxonomy has moved Synthesis higher in the order than Evaluation. Some consider the three lowest levels as hierarchically ordered, but the three higher levels as parallel.[6] Others say that it is sometimes better to move to Application before introducing concepts, the idea being to create a learning environment where the real world context comes first and the theory second to promote the student's grasp of the phenomenon, concept or event. This thinking would seem to relate to the method of problem-based learning.
Furthermore, the distinction between the categories can be seen as artificial since any given cognitive task may entail a number of processes. It could even be argued that any attempt to nicely categorize cognitive processes into clean, cut-and-dried classifications undermines the holistic, highly connective and interrelated nature of cognition. This is a criticism that can be directed at taxonomies of mental processes in general.
Bloom’s taxonomy serves as the backbone of many teaching philosophies, in particular those that lean more towards skills rather than content.[6] These educators would view content as a vessel for teaching skills. The emphasis on higher-order thinking inherent in such philosophies is based on the top levels of the taxonomy including analysis, evaluation, synthesis and creation. Bloom’s taxonomy can be used as a teaching tool to help balance assessment and evaluative questions in class, assignments and texts to ensure all orders of thinking are exercised in student’s learning.
The skill development that takes place at these higher orders of thinking interacts well with a developing global focus on multiple literacies and modalities in learning and the emerging field of integrated disciplines.[11] The ability to interface with and create media would draw upon skills from multiple levels of the taxonomy including analysis, application and creation. Bloom's taxonomy (and the revised taxonomy) continues to be a source of inspiration for educational philosophy and for developing new teaching strategies.
-
-
-
require('Module:No globals')
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return ''
elseif namespace == 2 and not title.isSubpage then
return ''
else
return ''
end
end
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'VIAF' )
end
local function kulturnavLink( id )
return '.. id .. ' id'
end
local function sikartLink( id )
return '.. id .. '&lng=en ' .. id .. ''
end
local function tlsLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '.. id2 .. ' ' .. id .. ''
end
local function ciniiLink( id )
return '.. id .. '?l=en ' .. id .. ''
end
local function bneLink( id )
return '.. id .. ' ' .. id .. ''
end
local function uscongressLink( id )
return '.. id .. ' ' .. id .. ''
end
local function narapersonLink( id )
return '.. id .. ' ' .. id .. ''
end
local function naraorganizationLink( id )
return '.. id .. ' ' .. id .. ''
end
local function botanistLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return '.. id2 .. ' ' .. id .. ''
end
local function mgpLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. ''
end
local function rslLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function leonoreLink( id ) -- Identifiants allant de LH/1/1 à LH/2794/54 (légionnaires) -- Identifiants allant de C/0/1 à C/0/84 (84 légionnaires célèbres) -- Identifiants allant de 19800035/1/1 à 19800035/385/51670 (légionnaires décédés entre 1954 et 1977, et quelques dossiers de légionnaires décédés avant 1954)
if not string.match( id, '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and
not string.match( id, '^C/0/%d%d?$' ) and
not string.match( id, '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function sbnLink( id )
if not string.match( id, '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and not string.match( id, '^IT\\ICCU\\%u%u[%d%u]%u\\%d%d%d%d%d%d$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SBN' )
end
local function nkcLink( id ) return '.. id .. '&CON_LNG=ENG ' .. id .. '' end
local function nclLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function ndlLink( id ) return '.. id .. ' ' .. id .. '' end
local function sudocLink( id )
if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function hlsLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.php ' .. id .. ''
end
local function lirLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.450.0.html ' .. id .. ''
end
local function splitLccn( id )
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )
end
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
return mw.text.split( id, '/' )
end
return false
end
local function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
local function lccnLink( id )
local parts = splitLccn( id )
if not parts then
return false
end
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )
return '.. lccnType .. '/' .. id .. ' ' .. id .. '' .. getCatForId( 'LCCN' )
end
local function mbLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. '' .. getCatForId( 'MusicBrainz' )
end
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits local function getIsniCheckDigit( isni )
local total = 0
for i = 1, 15 do
local digit = isni:byte( i ) - 48 --Get integer value
total = (total + digit) * 2
end
local remainder = total % 11
local result = (12 - remainder) % 11
if result == 10 then
return "X"
end
return tostring( result )
end
--Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid --See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier local function validateIsni( id )
id = id:gsub( '[ %-]', ):upper()
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then
return false
end
if getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then
return false
end
return id
end
local function isniLink( id )
id = validateIsni( id )
if not id then
return false
end
return '.. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. '' .. getCatForId( 'ISNI' )
end
local function orcidLink( id )
id = validateIsni( id )
if not id then
return false
end
id = id:sub( 1, 4 ) .. '-' .. id:sub( 5, 8 ) .. '-' .. id:sub( 9, 12 ) .. '-' .. id:sub( 13, 16 )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ORCID' )
end
local function gndLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'GND' )
end
local function selibrLink( id ) if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SELIBR' )
end
local function bnfLink( id )
--Add cb prefix if it has been removed
if not string.match( id, '^cb.+$' ) then
id = 'cb' .. id
end
return '.. id .. ' ' .. id .. ' .. id .. ' (data)' .. getCatForId( 'BNF' )
end
local function bpnLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'BPN' )
end
local function ridLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'RID' )
end
local function bibsysLink( id )
return '.. id .. '&feltselect=bs.autid ' .. id .. '' .. getCatForId( 'BIBSYS' )
end
local function ulanLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ULAN' )
end
local function nlaLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'NLA' ) end
local function rkdartistsLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'RKDartists' ) end
local function getIdsFromWikidata( item, property )
local ids = {}
if not item.claims[property] then
return ids
end
for _, statement in pairs( item.claims[property] ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
return ids
end
local function matchesWikidataRequirements( item, reqs )
for _, group in pairs( reqs ) do
local property = 'p' .. group[1]
local qid = group[2]
if item.claims[property] ~= nil then
for _, statement in pairs ( item.claims[property] ) do
if statement.mainsnak.datavalue ~= nil then
if statement.mainsnak.datavalue.value['numeric-id'] == qid then
return true
end
end
end
end
end
return false
end
local function createRow( id, label, rawValue, link, withUid )
if link then
if withUid then
return '* ' .. label .. ' ' .. link .. '\n'
else
return '* ' .. label .. ' ' .. link .. '\n'
end
else
return '* \n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function local conf = {
{ 'VIAF', 'VIAF', 214, viafLink },
{ 'LCCN', 'LCCN', 244, lccnLink },
{ 'ISNI', 'ISNI', 213, isniLink },
{ 'ORCID', 'ORCID', 496, orcidLink },
{ 'GND', 'GND', 227, gndLink },
{ 'SELIBR', 'SELIBR', 906, selibrLink },
{ 'SUDOC', 'SUDOC', 269, sudocLink },
{ 'BNF', 'BNF', 268, bnfLink },
{ 'BPN', 'BPN', 651, bpnLink },
{ 'RID', 'ResearcherID', 1053, ridLink },
{ 'BIBSYS', 'BIBSYS', 1015, bibsysLink },
{ 'ULAN', 'ULAN', 245, ulanLink },
{ 'HDS', 'HDS', 902, hlsLink },
{ 'LIR', 'LIR', 886, lirLink },
{ 'MBA', 'MusicBrainz', 434, mbLink },
{ 'MGP', 'MGP', 549, mgpLink },
{ 'NLA', 'NLA', 409, nlaLink },
{ 'NDL', 'NDL', 349, ndlLink },
{ 'NCL', 'NCL', 1048, nclLink },
{ 'NKC', 'NKC', 691, nkcLink },
{ 'Léonore', 'Léonore', 640, leonoreLink },
{ 'SBN', 'ICCU', 396, sbnLink },
{ 'RLS', 'RLS', 947, rslLink },
{ 'Botanist', '[[Author ci
-
-
-
require('Module:No globals')
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return ''
elseif namespace == 2 and not title.isSubpage then
return ''
else
return ''
end
end
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'VIAF' )
end
local function kulturnavLink( id )
return '.. id .. ' id'
end
local function sikartLink( id )
return '.. id .. '&lng=en ' .. id .. ''
end
local function tlsLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '.. id2 .. ' ' .. id .. ''
end
local function ciniiLink( id )
return '.. id .. '?l=en ' .. id .. ''
end
local function bneLink( id )
return '.. id .. ' ' .. id .. ''
end
local function uscongressLink( id )
return '.. id .. ' ' .. id .. ''
end
local function narapersonLink( id )
return '.. id .. ' ' .. id .. ''
end
local function naraorganizationLink( id )
return '.. id .. ' ' .. id .. ''
end
local function botanistLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return '.. id2 .. ' ' .. id .. ''
end
local function mgpLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. ''
end
local function rslLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function leonoreLink( id ) -- Identifiants allant de LH/1/1 à LH/2794/54 (légionnaires) -- Identifiants allant de C/0/1 à C/0/84 (84 légionnaires célèbres) -- Identifiants allant de 19800035/1/1 à 19800035/385/51670 (légionnaires décédés entre 1954 et 1977, et quelques dossiers de légionnaires décédés avant 1954)
if not string.match( id, '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and
not string.match( id, '^C/0/%d%d?$' ) and
not string.match( id, '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function sbnLink( id )
if not string.match( id, '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and not string.match( id, '^IT\\ICCU\\%u%u[%d%u]%u\\%d%d%d%d%d%d$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SBN' )
end
local function nkcLink( id ) return '.. id .. '&CON_LNG=ENG ' .. id .. '' end
local function nclLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function ndlLink( id ) return '.. id .. ' ' .. id .. '' end
local function sudocLink( id )
if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function hlsLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.php ' .. id .. ''
end
local function lirLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.450.0.html ' .. id .. ''
end
local function splitLccn( id )
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )
end
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
return mw.text.split( id, '/' )
end
return false
end
local function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
local function lccnLink( id )
local parts = splitLccn( id )
if not parts then
return false
end
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )
return '.. lccnType .. '/' .. id .. ' ' .. id .. '' .. getCatForId( 'LCCN' )
end
local function mbLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. '' .. getCatForId( 'MusicBrainz' )
end
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits local function getIsniCheckDigit( isni )
local total = 0
for i = 1, 15 do
local digit = isni:byte( i ) - 48 --Get integer value
total = (total + digit) * 2
end
local remainder = total % 11
local result = (12 - remainder) % 11
if result == 10 then
return "X"
end
return tostring( result )
end
--Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid --See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier local function validateIsni( id )
id = id:gsub( '[ %-]', ):upper()
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then
return false
end
if getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then
return false
end
return id
end
local function isniLink( id )
id = validateIsni( id )
if not id then
return false
end
return '.. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. '' .. getCatForId( 'ISNI' )
end
local function orcidLink( id )
id = validateIsni( id )
if not id then
return false
end
id = id:sub( 1, 4 ) .. '-' .. id:sub( 5, 8 ) .. '-' .. id:sub( 9, 12 ) .. '-' .. id:sub( 13, 16 )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ORCID' )
end
local function gndLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'GND' )
end
local function selibrLink( id ) if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SELIBR' )
end
local function bnfLink( id )
--Add cb prefix if it has been removed
if not string.match( id, '^cb.+$' ) then
id = 'cb' .. id
end
return '.. id .. ' ' .. id .. ' .. id .. ' (data)' .. getCatForId( 'BNF' )
end
local function bpnLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'BPN' )
end
local function ridLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'RID' )
end
local function bibsysLink( id )
return '.. id .. '&feltselect=bs.autid ' .. id .. '' .. getCatForId( 'BIBSYS' )
end
local function ulanLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ULAN' )
end
local function nlaLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'NLA' ) end
local function rkdartistsLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'RKDartists' ) end
local function getIdsFromWikidata( item, property )
local ids = {}
if not item.claims[property] then
return ids
end
for _, statement in pairs( item.claims[property] ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
return ids
end
local function matchesWikidataRequirements( item, reqs )
for _, group in pairs( reqs ) do
local property = 'p' .. group[1]
local qid = group[2]
if item.claims[property] ~= nil then
for _, statement in pairs ( item.claims[property] ) do
if statement.mainsnak.datavalue ~= nil then
if statement.mainsnak.datavalue.value['numeric-id'] == qid then
return true
end
end
end
end
end
return false
end
local function createRow( id, label, rawValue, link, withUid )
if link then
if withUid then
return '* ' .. label .. ' ' .. link .. '\n'
else
return '* ' .. label .. ' ' .. link .. '\n'
end
else
return '* \n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function local conf = {
{ 'VIAF', 'VIAF', 214, viafLink },
{ 'LCCN', 'LCCN', 244, lccnLink },
{ 'ISNI', 'ISNI', 213, isniLink },
{ 'ORCID', 'ORCID', 496, orcidLink },
{ 'GND', 'GND', 227, gndLink },
{ 'SELIBR', 'SELIBR', 906, selibrLink },
{ 'SUDOC', 'SUDOC', 269, sudocLink },
{ 'BNF', 'BNF', 268, bnfLink },
{ 'BPN', 'BPN', 651, bpnLink },
{ 'RID', 'ResearcherID', 1053, ridLink },
{ 'BIBSYS', 'BIBSYS', 1015, bibsysLink },
{ 'ULAN', 'ULAN', 245, ulanLink },
{ 'HDS', 'HDS', 902, hlsLink },
{ 'LIR', 'LIR', 886, lirLink },
{ 'MBA', 'MusicBrainz', 434, mbLink },
{ 'MGP', 'MGP', 549, mgpLink },
{ 'NLA', 'NLA', 409, nlaLink },
{ 'NDL', 'NDL', 349, ndlLink },
{ 'NCL', 'NCL', 1048, nclLink },
{ 'NKC', 'NKC', 691, nkcLink },
{ 'Léonore', 'Léonore', 640, leonoreLink },
{ 'SBN', 'ICCU', 396, sbnLink },
{ 'RLS', 'RLS', 947, rslLink },
{ 'Botanist', '[[Author ci
-
-
-
require('Module:No globals')
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return ''
elseif namespace == 2 and not title.isSubpage then
return ''
else
return ''
end
end
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'VIAF' )
end
local function kulturnavLink( id )
return '.. id .. ' id'
end
local function sikartLink( id )
return '.. id .. '&lng=en ' .. id .. ''
end
local function tlsLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '.. id2 .. ' ' .. id .. ''
end
local function ciniiLink( id )
return '.. id .. '?l=en ' .. id .. ''
end
local function bneLink( id )
return '.. id .. ' ' .. id .. ''
end
local function uscongressLink( id )
return '.. id .. ' ' .. id .. ''
end
local function narapersonLink( id )
return '.. id .. ' ' .. id .. ''
end
local function naraorganizationLink( id )
return '.. id .. ' ' .. id .. ''
end
local function botanistLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return '.. id2 .. ' ' .. id .. ''
end
local function mgpLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. ''
end
local function rslLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function leonoreLink( id ) -- Identifiants allant de LH/1/1 à LH/2794/54 (légionnaires) -- Identifiants allant de C/0/1 à C/0/84 (84 légionnaires célèbres) -- Identifiants allant de 19800035/1/1 à 19800035/385/51670 (légionnaires décédés entre 1954 et 1977, et quelques dossiers de légionnaires décédés avant 1954)
if not string.match( id, '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and
not string.match( id, '^C/0/%d%d?$' ) and
not string.match( id, '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function sbnLink( id )
if not string.match( id, '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and not string.match( id, '^IT\\ICCU\\%u%u[%d%u]%u\\%d%d%d%d%d%d$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SBN' )
end
local function nkcLink( id ) return '.. id .. '&CON_LNG=ENG ' .. id .. '' end
local function nclLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function ndlLink( id ) return '.. id .. ' ' .. id .. '' end
local function sudocLink( id )
if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function hlsLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.php ' .. id .. ''
end
local function lirLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.450.0.html ' .. id .. ''
end
local function splitLccn( id )
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )
end
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
return mw.text.split( id, '/' )
end
return false
end
local function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
local function lccnLink( id )
local parts = splitLccn( id )
if not parts then
return false
end
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )
return '.. lccnType .. '/' .. id .. ' ' .. id .. '' .. getCatForId( 'LCCN' )
end
local function mbLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. '' .. getCatForId( 'MusicBrainz' )
end
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits local function getIsniCheckDigit( isni )
local total = 0
for i = 1, 15 do
local digit = isni:byte( i ) - 48 --Get integer value
total = (total + digit) * 2
end
local remainder = total % 11
local result = (12 - remainder) % 11
if result == 10 then
return "X"
end
return tostring( result )
end
--Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid --See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier local function validateIsni( id )
id = id:gsub( '[ %-]', ):upper()
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then
return false
end
if getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then
return false
end
return id
end
local function isniLink( id )
id = validateIsni( id )
if not id then
return false
end
return '.. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. '' .. getCatForId( 'ISNI' )
end
local function orcidLink( id )
id = validateIsni( id )
if not id then
return false
end
id = id:sub( 1, 4 ) .. '-' .. id:sub( 5, 8 ) .. '-' .. id:sub( 9, 12 ) .. '-' .. id:sub( 13, 16 )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ORCID' )
end
local function gndLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'GND' )
end
local function selibrLink( id ) if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SELIBR' )
end
local function bnfLink( id )
--Add cb prefix if it has been removed
if not string.match( id, '^cb.+$' ) then
id = 'cb' .. id
end
return '.. id .. ' ' .. id .. ' .. id .. ' (data)' .. getCatForId( 'BNF' )
end
local function bpnLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'BPN' )
end
local function ridLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'RID' )
end
local function bibsysLink( id )
return '.. id .. '&feltselect=bs.autid ' .. id .. '' .. getCatForId( 'BIBSYS' )
end
local function ulanLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ULAN' )
end
local function nlaLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'NLA' ) end
local function rkdartistsLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'RKDartists' ) end
local function getIdsFromWikidata( item, property )
local ids = {}
if not item.claims[property] then
return ids
end
for _, statement in pairs( item.claims[property] ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
return ids
end
local function matchesWikidataRequirements( item, reqs )
for _, group in pairs( reqs ) do
local property = 'p' .. group[1]
local qid = group[2]
if item.claims[property] ~= nil then
for _, statement in pairs ( item.claims[property] ) do
if statement.mainsnak.datavalue ~= nil then
if statement.mainsnak.datavalue.value['numeric-id'] == qid then
return true
end
end
end
end
end
return false
end
local function createRow( id, label, rawValue, link, withUid )
if link then
if withUid then
return '* ' .. label .. ' ' .. link .. '\n'
else
return '* ' .. label .. ' ' .. link .. '\n'
end
else
return '* \n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function local conf = {
{ 'VIAF', 'VIAF', 214, viafLink },
{ 'LCCN', 'LCCN', 244, lccnLink },
{ 'ISNI', 'ISNI', 213, isniLink },
{ 'ORCID', 'ORCID', 496, orcidLink },
{ 'GND', 'GND', 227, gndLink },
{ 'SELIBR', 'SELIBR', 906, selibrLink },
{ 'SUDOC', 'SUDOC', 269, sudocLink },
{ 'BNF', 'BNF', 268, bnfLink },
{ 'BPN', 'BPN', 651, bpnLink },
{ 'RID', 'ResearcherID', 1053, ridLink },
{ 'BIBSYS', 'BIBSYS', 1015, bibsysLink },
{ 'ULAN', 'ULAN', 245, ulanLink },
{ 'HDS', 'HDS', 902, hlsLink },
{ 'LIR', 'LIR', 886, lirLink },
{ 'MBA', 'MusicBrainz', 434, mbLink },
{ 'MGP', 'MGP', 549, mgpLink },
{ 'NLA', 'NLA', 409, nlaLink },
{ 'NDL', 'NDL', 349, ndlLink },
{ 'NCL', 'NCL', 1048, nclLink },
{ 'NKC', 'NKC', 691, nkcLink },
{ 'Léonore', 'Léonore', 640, leonoreLink },
{ 'SBN', 'ICCU', 396, sbnLink },
{ 'RLS', 'RLS', 947, rslLink },
{ 'Botanist', '[[Author ci
-
require('Module:No globals')
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return ''
elseif namespace == 2 and not title.isSubpage then
return ''
else
return ''
end
end
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'VIAF' )
end
local function kulturnavLink( id )
return '.. id .. ' id'
end
local function sikartLink( id )
return '.. id .. '&lng=en ' .. id .. ''
end
local function tlsLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '.. id2 .. ' ' .. id .. ''
end
local function ciniiLink( id )
return '.. id .. '?l=en ' .. id .. ''
end
local function bneLink( id )
return '.. id .. ' ' .. id .. ''
end
local function uscongressLink( id )
return '.. id .. ' ' .. id .. ''
end
local function narapersonLink( id )
return '.. id .. ' ' .. id .. ''
end
local function naraorganizationLink( id )
return '.. id .. ' ' .. id .. ''
end
local function botanistLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return '.. id2 .. ' ' .. id .. ''
end
local function mgpLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. ''
end
local function rslLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function leonoreLink( id ) -- Identifiants allant de LH/1/1 à LH/2794/54 (légionnaires) -- Identifiants allant de C/0/1 à C/0/84 (84 légionnaires célèbres) -- Identifiants allant de 19800035/1/1 à 19800035/385/51670 (légionnaires décédés entre 1954 et 1977, et quelques dossiers de légionnaires décédés avant 1954)
if not string.match( id, '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and
not string.match( id, '^C/0/%d%d?$' ) and
not string.match( id, '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function sbnLink( id )
if not string.match( id, '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and not string.match( id, '^IT\\ICCU\\%u%u[%d%u]%u\\%d%d%d%d%d%d$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SBN' )
end
local function nkcLink( id ) return '.. id .. '&CON_LNG=ENG ' .. id .. '' end
local function nclLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function ndlLink( id ) return '.. id .. ' ' .. id .. '' end
local function sudocLink( id )
if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function hlsLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.php ' .. id .. ''
end
local function lirLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.450.0.html ' .. id .. ''
end
local function splitLccn( id )
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )
end
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
return mw.text.split( id, '/' )
end
return false
end
local function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
local function lccnLink( id )
local parts = splitLccn( id )
if not parts then
return false
end
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )
return '.. lccnType .. '/' .. id .. ' ' .. id .. '' .. getCatForId( 'LCCN' )
end
local function mbLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. '' .. getCatForId( 'MusicBrainz' )
end
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits local function getIsniCheckDigit( isni )
local total = 0
for i = 1, 15 do
local digit = isni:byte( i ) - 48 --Get integer value
total = (total + digit) * 2
end
local remainder = total % 11
local result = (12 - remainder) % 11
if result == 10 then
return "X"
end
return tostring( result )
end
--Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid --See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier local function validateIsni( id )
id = id:gsub( '[ %-]', ):upper()
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then
return false
end
if getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then
return false
end
return id
end
local function isniLink( id )
id = validateIsni( id )
if not id then
return false
end
return '.. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. '' .. getCatForId( 'ISNI' )
end
local function orcidLink( id )
id = validateIsni( id )
if not id then
return false
end
id = id:sub( 1, 4 ) .. '-' .. id:sub( 5, 8 ) .. '-' .. id:sub( 9, 12 ) .. '-' .. id:sub( 13, 16 )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ORCID' )
end
local function gndLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'GND' )
end
local function selibrLink( id ) if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SELIBR' )
end
local function bnfLink( id )
--Add cb prefix if it has been removed
if not string.match( id, '^cb.+$' ) then
id = 'cb' .. id
end
return '.. id .. ' ' .. id .. ' .. id .. ' (data)' .. getCatForId( 'BNF' )
end
local function bpnLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'BPN' )
end
local function ridLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'RID' )
end
local function bibsysLink( id )
return '.. id .. '&feltselect=bs.autid ' .. id .. '' .. getCatForId( 'BIBSYS' )
end
local function ulanLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ULAN' )
end
local function nlaLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'NLA' ) end
local function rkdartistsLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'RKDartists' ) end
local function getIdsFromWikidata( item, property )
local ids = {}
if not item.claims[property] then
return ids
end
for _, statement in pairs( item.claims[property] ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
return ids
end
local function matchesWikidataRequirements( item, reqs )
for _, group in pairs( reqs ) do
local property = 'p' .. group[1]
local qid = group[2]
if item.claims[property] ~= nil then
for _, statement in pairs ( item.claims[property] ) do
if statement.mainsnak.datavalue ~= nil then
if statement.mainsnak.datavalue.value['numeric-id'] == qid then
return true
end
end
end
end
end
return false
end
local function createRow( id, label, rawValue, link, withUid )
if link then
if withUid then
return '* ' .. label .. ' ' .. link .. '\n'
else
return '* ' .. label .. ' ' .. link .. '\n'
end
else
return '* \n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function local conf = {
{ 'VIAF', 'VIAF', 214, viafLink },
{ 'LCCN', 'LCCN', 244, lccnLink },
{ 'ISNI', 'ISNI', 213, isniLink },
{ 'ORCID', 'ORCID', 496, orcidLink },
{ 'GND', 'GND', 227, gndLink },
{ 'SELIBR', 'SELIBR', 906, selibrLink },
{ 'SUDOC', 'SUDOC', 269, sudocLink },
{ 'BNF', 'BNF', 268, bnfLink },
{ 'BPN', 'BPN', 651, bpnLink },
{ 'RID', 'ResearcherID', 1053, ridLink },
{ 'BIBSYS', 'BIBSYS', 1015, bibsysLink },
{ 'ULAN', 'ULAN', 245, ulanLink },
{ 'HDS', 'HDS', 902, hlsLink },
{ 'LIR', 'LIR', 886, lirLink },
{ 'MBA', 'MusicBrainz', 434, mbLink },
{ 'MGP', 'MGP', 549, mgpLink },
{ 'NLA', 'NLA', 409, nlaLink },
{ 'NDL', 'NDL', 349, ndlLink },
{ 'NCL', 'NCL', 1048, nclLink },
{ 'NKC', 'NKC', 691, nkcLink },
{ 'Léonore', 'Léonore', 640, leonoreLink },
{ 'SBN', 'ICCU', 396, sbnLink },
{ 'RLS', 'RLS', 947, rslLink },
{ 'Botanist', '[[Author ci
-
require('Module:No globals')
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return ''
elseif namespace == 2 and not title.isSubpage then
return ''
else
return ''
end
end
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'VIAF' )
end
local function kulturnavLink( id )
return '.. id .. ' id'
end
local function sikartLink( id )
return '.. id .. '&lng=en ' .. id .. ''
end
local function tlsLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '.. id2 .. ' ' .. id .. ''
end
local function ciniiLink( id )
return '.. id .. '?l=en ' .. id .. ''
end
local function bneLink( id )
return '.. id .. ' ' .. id .. ''
end
local function uscongressLink( id )
return '.. id .. ' ' .. id .. ''
end
local function narapersonLink( id )
return '.. id .. ' ' .. id .. ''
end
local function naraorganizationLink( id )
return '.. id .. ' ' .. id .. ''
end
local function botanistLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return '.. id2 .. ' ' .. id .. ''
end
local function mgpLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. ''
end
local function rslLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function leonoreLink( id ) -- Identifiants allant de LH/1/1 à LH/2794/54 (légionnaires) -- Identifiants allant de C/0/1 à C/0/84 (84 légionnaires célèbres) -- Identifiants allant de 19800035/1/1 à 19800035/385/51670 (légionnaires décédés entre 1954 et 1977, et quelques dossiers de légionnaires décédés avant 1954)
if not string.match( id, '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and
not string.match( id, '^C/0/%d%d?$' ) and
not string.match( id, '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function sbnLink( id )
if not string.match( id, '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and not string.match( id, '^IT\\ICCU\\%u%u[%d%u]%u\\%d%d%d%d%d%d$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SBN' )
end
local function nkcLink( id ) return '.. id .. '&CON_LNG=ENG ' .. id .. '' end
local function nclLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function ndlLink( id ) return '.. id .. ' ' .. id .. '' end
local function sudocLink( id )
if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function hlsLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.php ' .. id .. ''
end
local function lirLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.450.0.html ' .. id .. ''
end
local function splitLccn( id )
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )
end
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
return mw.text.split( id, '/' )
end
return false
end
local function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
local function lccnLink( id )
local parts = splitLccn( id )
if not parts then
return false
end
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )
return '.. lccnType .. '/' .. id .. ' ' .. id .. '' .. getCatForId( 'LCCN' )
end
local function mbLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. '' .. getCatForId( 'MusicBrainz' )
end
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits local function getIsniCheckDigit( isni )
local total = 0
for i = 1, 15 do
local digit = isni:byte( i ) - 48 --Get integer value
total = (total + digit) * 2
end
local remainder = total % 11
local result = (12 - remainder) % 11
if result == 10 then
return "X"
end
return tostring( result )
end
--Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid --See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier local function validateIsni( id )
id = id:gsub( '[ %-]', ):upper()
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then
return false
end
if getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then
return false
end
return id
end
local function isniLink( id )
id = validateIsni( id )
if not id then
return false
end
return '.. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. '' .. getCatForId( 'ISNI' )
end
local function orcidLink( id )
id = validateIsni( id )
if not id then
return false
end
id = id:sub( 1, 4 ) .. '-' .. id:sub( 5, 8 ) .. '-' .. id:sub( 9, 12 ) .. '-' .. id:sub( 13, 16 )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ORCID' )
end
local function gndLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'GND' )
end
local function selibrLink( id ) if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SELIBR' )
end
local function bnfLink( id )
--Add cb prefix if it has been removed
if not string.match( id, '^cb.+$' ) then
id = 'cb' .. id
end
return '.. id .. ' ' .. id .. ' .. id .. ' (data)' .. getCatForId( 'BNF' )
end
local function bpnLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'BPN' )
end
local function ridLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'RID' )
end
local function bibsysLink( id )
return '.. id .. '&feltselect=bs.autid ' .. id .. '' .. getCatForId( 'BIBSYS' )
end
local function ulanLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ULAN' )
end
local function nlaLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'NLA' ) end
local function rkdartistsLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'RKDartists' ) end
local function getIdsFromWikidata( item, property )
local ids = {}
if not item.claims[property] then
return ids
end
for _, statement in pairs( item.claims[property] ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
return ids
end
local function matchesWikidataRequirements( item, reqs )
for _, group in pairs( reqs ) do
local property = 'p' .. group[1]
local qid = group[2]
if item.claims[property] ~= nil then
for _, statement in pairs ( item.claims[property] ) do
if statement.mainsnak.datavalue ~= nil then
if statement.mainsnak.datavalue.value['numeric-id'] == qid then
return true
end
end
end
end
end
return false
end
local function createRow( id, label, rawValue, link, withUid )
if link then
if withUid then
return '* ' .. label .. ' ' .. link .. '\n'
else
return '* ' .. label .. ' ' .. link .. '\n'
end
else
return '* \n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function local conf = {
{ 'VIAF', 'VIAF', 214, viafLink },
{ 'LCCN', 'LCCN', 244, lccnLink },
{ 'ISNI', 'ISNI', 213, isniLink },
{ 'ORCID', 'ORCID', 496, orcidLink },
{ 'GND', 'GND', 227, gndLink },
{ 'SELIBR', 'SELIBR', 906, selibrLink },
{ 'SUDOC', 'SUDOC', 269, sudocLink },
{ 'BNF', 'BNF', 268, bnfLink },
{ 'BPN', 'BPN', 651, bpnLink },
{ 'RID', 'ResearcherID', 1053, ridLink },
{ 'BIBSYS', 'BIBSYS', 1015, bibsysLink },
{ 'ULAN', 'ULAN', 245, ulanLink },
{ 'HDS', 'HDS', 902, hlsLink },
{ 'LIR', 'LIR', 886, lirLink },
{ 'MBA', 'MusicBrainz', 434, mbLink },
{ 'MGP', 'MGP', 549, mgpLink },
{ 'NLA', 'NLA', 409, nlaLink },
{ 'NDL', 'NDL', 349, ndlLink },
{ 'NCL', 'NCL', 1048, nclLink },
{ 'NKC', 'NKC', 691, nkcLink },
{ 'Léonore', 'Léonore', 640, leonoreLink },
{ 'SBN', 'ICCU', 396, sbnLink },
{ 'RLS', 'RLS', 947, rslLink },
{ 'Botanist', '[[Author ci
-
-
-
-
-
require('Module:No globals')
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return ''
elseif namespace == 2 and not title.isSubpage then
return ''
else
return ''
end
end
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'VIAF' )
end
local function kulturnavLink( id )
return '.. id .. ' id'
end
local function sikartLink( id )
return '.. id .. '&lng=en ' .. id .. ''
end
local function tlsLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '.. id2 .. ' ' .. id .. ''
end
local function ciniiLink( id )
return '.. id .. '?l=en ' .. id .. ''
end
local function bneLink( id )
return '.. id .. ' ' .. id .. ''
end
local function uscongressLink( id )
return '.. id .. ' ' .. id .. ''
end
local function narapersonLink( id )
return '.. id .. ' ' .. id .. ''
end
local function naraorganizationLink( id )
return '.. id .. ' ' .. id .. ''
end
local function botanistLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return '.. id2 .. ' ' .. id .. ''
end
local function mgpLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. ''
end
local function rslLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function leonoreLink( id ) -- Identifiants allant de LH/1/1 à LH/2794/54 (légionnaires) -- Identifiants allant de C/0/1 à C/0/84 (84 légionnaires célèbres) -- Identifiants allant de 19800035/1/1 à 19800035/385/51670 (légionnaires décédés entre 1954 et 1977, et quelques dossiers de légionnaires décédés avant 1954)
if not string.match( id, '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and
not string.match( id, '^C/0/%d%d?$' ) and
not string.match( id, '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function sbnLink( id )
if not string.match( id, '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and not string.match( id, '^IT\\ICCU\\%u%u[%d%u]%u\\%d%d%d%d%d%d$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SBN' )
end
local function nkcLink( id ) return '.. id .. '&CON_LNG=ENG ' .. id .. '' end
local function nclLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function ndlLink( id ) return '.. id .. ' ' .. id .. '' end
local function sudocLink( id )
if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function hlsLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.php ' .. id .. ''
end
local function lirLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.450.0.html ' .. id .. ''
end
local function splitLccn( id )
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )
end
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
return mw.text.split( id, '/' )
end
return false
end
local function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
local function lccnLink( id )
local parts = splitLccn( id )
if not parts then
return false
end
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )
return '.. lccnType .. '/' .. id .. ' ' .. id .. '' .. getCatForId( 'LCCN' )
end
local function mbLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. '' .. getCatForId( 'MusicBrainz' )
end
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits local function getIsniCheckDigit( isni )
local total = 0
for i = 1, 15 do
local digit = isni:byte( i ) - 48 --Get integer value
total = (total + digit) * 2
end
local remainder = total % 11
local result = (12 - remainder) % 11
if result == 10 then
return "X"
end
return tostring( result )
end
--Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid --See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier local function validateIsni( id )
id = id:gsub( '[ %-]', ):upper()
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then
return false
end
if getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then
return false
end
return id
end
local function isniLink( id )
id = validateIsni( id )
if not id then
return false
end
return '.. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. '' .. getCatForId( 'ISNI' )
end
local function orcidLink( id )
id = validateIsni( id )
if not id then
return false
end
id = id:sub( 1, 4 ) .. '-' .. id:sub( 5, 8 ) .. '-' .. id:sub( 9, 12 ) .. '-' .. id:sub( 13, 16 )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ORCID' )
end
local function gndLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'GND' )
end
local function selibrLink( id ) if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SELIBR' )
end
local function bnfLink( id )
--Add cb prefix if it has been removed
if not string.match( id, '^cb.+$' ) then
id = 'cb' .. id
end
return '.. id .. ' ' .. id .. ' .. id .. ' (data)' .. getCatForId( 'BNF' )
end
local function bpnLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'BPN' )
end
local function ridLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'RID' )
end
local function bibsysLink( id )
return '.. id .. '&feltselect=bs.autid ' .. id .. '' .. getCatForId( 'BIBSYS' )
end
local function ulanLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ULAN' )
end
local function nlaLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'NLA' ) end
local function rkdartistsLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'RKDartists' ) end
local function getIdsFromWikidata( item, property )
local ids = {}
if not item.claims[property] then
return ids
end
for _, statement in pairs( item.claims[property] ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
return ids
end
local function matchesWikidataRequirements( item, reqs )
for _, group in pairs( reqs ) do
local property = 'p' .. group[1]
local qid = group[2]
if item.claims[property] ~= nil then
for _, statement in pairs ( item.claims[property] ) do
if statement.mainsnak.datavalue ~= nil then
if statement.mainsnak.datavalue.value['numeric-id'] == qid then
return true
end
end
end
end
end
return false
end
local function createRow( id, label, rawValue, link, withUid )
if link then
if withUid then
return '* ' .. label .. ' ' .. link .. '\n'
else
return '* ' .. label .. ' ' .. link .. '\n'
end
else
return '* \n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function local conf = {
{ 'VIAF', 'VIAF', 214, viafLink },
{ 'LCCN', 'LCCN', 244, lccnLink },
{ 'ISNI', 'ISNI', 213, isniLink },
{ 'ORCID', 'ORCID', 496, orcidLink },
{ 'GND', 'GND', 227, gndLink },
{ 'SELIBR', 'SELIBR', 906, selibrLink },
{ 'SUDOC', 'SUDOC', 269, sudocLink },
{ 'BNF', 'BNF', 268, bnfLink },
{ 'BPN', 'BPN', 651, bpnLink },
{ 'RID', 'ResearcherID', 1053, ridLink },
{ 'BIBSYS', 'BIBSYS', 1015, bibsysLink },
{ 'ULAN', 'ULAN', 245, ulanLink },
{ 'HDS', 'HDS', 902, hlsLink },
{ 'LIR', 'LIR', 886, lirLink },
{ 'MBA', 'MusicBrainz', 434, mbLink },
{ 'MGP', 'MGP', 549, mgpLink },
{ 'NLA', 'NLA', 409, nlaLink },
{ 'NDL', 'NDL', 349, ndlLink },
{ 'NCL', 'NCL', 1048, nclLink },
{ 'NKC', 'NKC', 691, nkcLink },
{ 'Léonore', 'Léonore', 640, leonoreLink },
{ 'SBN', 'ICCU', 396, sbnLink },
{ 'RLS', 'RLS', 947, rslLink },
{ 'Botanist', '[[Author ci
-
require('Module:No globals')
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return ''
elseif namespace == 2 and not title.isSubpage then
return ''
else
return ''
end
end
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'VIAF' )
end
local function kulturnavLink( id )
return '.. id .. ' id'
end
local function sikartLink( id )
return '.. id .. '&lng=en ' .. id .. ''
end
local function tlsLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '.. id2 .. ' ' .. id .. ''
end
local function ciniiLink( id )
return '.. id .. '?l=en ' .. id .. ''
end
local function bneLink( id )
return '.. id .. ' ' .. id .. ''
end
local function uscongressLink( id )
return '.. id .. ' ' .. id .. ''
end
local function narapersonLink( id )
return '.. id .. ' ' .. id .. ''
end
local function naraorganizationLink( id )
return '.. id .. ' ' .. id .. ''
end
local function botanistLink( id ) local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return '.. id2 .. ' ' .. id .. ''
end
local function mgpLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. ''
end
local function rslLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function leonoreLink( id ) -- Identifiants allant de LH/1/1 à LH/2794/54 (légionnaires) -- Identifiants allant de C/0/1 à C/0/84 (84 légionnaires célèbres) -- Identifiants allant de 19800035/1/1 à 19800035/385/51670 (légionnaires décédés entre 1954 et 1977, et quelques dossiers de légionnaires décédés avant 1954)
if not string.match( id, '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and
not string.match( id, '^C/0/%d%d?$' ) and
not string.match( id, '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function sbnLink( id )
if not string.match( id, '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and not string.match( id, '^IT\\ICCU\\%u%u[%d%u]%u\\%d%d%d%d%d%d$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SBN' )
end
local function nkcLink( id ) return '.. id .. '&CON_LNG=ENG ' .. id .. '' end
local function nclLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '&CON_LNG=ENG ' .. id .. ''
end
local function ndlLink( id ) return '.. id .. ' ' .. id .. '' end
local function sudocLink( id )
if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then
return false
end
return '.. id .. ' ' .. id .. ''
end
local function hlsLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.php ' .. id .. ''
end
local function lirLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. '.450.0.html ' .. id .. ''
end
local function splitLccn( id )
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )
end
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
return mw.text.split( id, '/' )
end
return false
end
local function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
local function lccnLink( id )
local parts = splitLccn( id )
if not parts then
return false
end
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )
return '.. lccnType .. '/' .. id .. ' ' .. id .. '' .. getCatForId( 'LCCN' )
end
local function mbLink( id )
-- TODO Implement some sanity checking regex
return '.. id .. ' ' .. id .. '' .. getCatForId( 'MusicBrainz' )
end
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits local function getIsniCheckDigit( isni )
local total = 0
for i = 1, 15 do
local digit = isni:byte( i ) - 48 --Get integer value
total = (total + digit) * 2
end
local remainder = total % 11
local result = (12 - remainder) % 11
if result == 10 then
return "X"
end
return tostring( result )
end
--Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid --See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier local function validateIsni( id )
id = id:gsub( '[ %-]', ):upper()
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then
return false
end
if getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then
return false
end
return id
end
local function isniLink( id )
id = validateIsni( id )
if not id then
return false
end
return '.. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. '' .. getCatForId( 'ISNI' )
end
local function orcidLink( id )
id = validateIsni( id )
if not id then
return false
end
id = id:sub( 1, 4 ) .. '-' .. id:sub( 5, 8 ) .. '-' .. id:sub( 9, 12 ) .. '-' .. id:sub( 13, 16 )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ORCID' )
end
local function gndLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'GND' )
end
local function selibrLink( id ) if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'SELIBR' )
end
local function bnfLink( id )
--Add cb prefix if it has been removed
if not string.match( id, '^cb.+$' ) then
id = 'cb' .. id
end
return '.. id .. ' ' .. id .. ' .. id .. ' (data)' .. getCatForId( 'BNF' )
end
local function bpnLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '.. id .. ' ' .. id .. '' .. getCatForId( 'BPN' )
end
local function ridLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'RID' )
end
local function bibsysLink( id )
return '.. id .. '&feltselect=bs.autid ' .. id .. '' .. getCatForId( 'BIBSYS' )
end
local function ulanLink( id )
return '.. id .. ' ' .. id .. '' .. getCatForId( 'ULAN' )
end
local function nlaLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'NLA' ) end
local function rkdartistsLink( id ) return '.. id .. ' ' .. id .. '' .. getCatForId( 'RKDartists' ) end
local function getIdsFromWikidata( item, property )
local ids = {}
if not item.claims[property] then
return ids
end
for _, statement in pairs( item.claims[property] ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
return ids
end
local function matchesWikidataRequirements( item, reqs )
for _, group in pairs( reqs ) do
local property = 'p' .. group[1]
local qid = group[2]
if item.claims[property] ~= nil then
for _, statement in pairs ( item.claims[property] ) do
if statement.mainsnak.datavalue ~= nil then
if statement.mainsnak.datavalue.value['numeric-id'] == qid then
return true
end
end
end
end
end
return false
end
local function createRow( id, label, rawValue, link, withUid )
if link then
if withUid then
return '* ' .. label .. ' ' .. link .. '\n'
else
return '* ' .. label .. ' ' .. link .. '\n'
end
else
return '* \n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function local conf = {
{ 'VIAF', 'VIAF', 214, viafLink },
{ 'LCCN', 'LCCN', 244, lccnLink },
{ 'ISNI', 'ISNI', 213, isniLink },
{ 'ORCID', 'ORCID', 496, orcidLink },
{ 'GND', 'GND', 227, gndLink },
{ 'SELIBR', 'SELIBR', 906, selibrLink },
{ 'SUDOC', 'SUDOC', 269, sudocLink },
{ 'BNF', 'BNF', 268, bnfLink },
{ 'BPN', 'BPN', 651, bpnLink },
{ 'RID', 'ResearcherID', 1053, ridLink },
{ 'BIBSYS', 'BIBSYS', 1015, bibsysLink },
{ 'ULAN', 'ULAN', 245, ulanLink },
{ 'HDS', 'HDS', 902, hlsLink },
{ 'LIR', 'LIR', 886, lirLink },
{ 'MBA', 'MusicBrainz', 434, mbLink },
{ 'MGP', 'MGP', 549, mgpLink },
{ 'NLA', 'NLA', 409, nlaLink },
{ 'NDL', 'NDL', 349, ndlLink },
{ 'NCL', 'NCL', 1048, nclLink },
{ 'NKC', 'NKC', 691, nkcLink },
{ 'Léonore', 'Léonore', 640, leonoreLink },
{ 'SBN', 'ICCU', 396, sbnLink },
{ 'RLS', 'RLS', 947, rslLink },
{ 'Botanist', '[[Author ci