Módulo:BibRules: mudanças entre as edições
Ir para navegação
Ir para pesquisar
Sem resumo de edição |
Sem resumo de edição |
||
Linha 1: | Linha 1: | ||
local p = {} |
local p = {} |
||
function p.BibRules( |
function p.BibRules(frame) |
||
-- Define o alvo das regras |
|||
local target = frame:getParent().args[1] |
|||
if target == "" or target == nil then |
|||
target = mw.uri.decode(frame:callParserFunction("#urlget", "fullpagename")) |
|||
end |
|||
if target == "" or target == nil then |
|||
target = mw.title.getCurrentTitle().prefixedText |
|||
end |
|||
-- Semantic Scribunto foi carregado? |
|||
if not mw.smw then |
|||
return "mw.smw module not found" |
|||
end |
|||
-- Define variáveis básicas |
|||
local test, info, queryResult, f110existance, f110 |
|||
local infos = {} |
|||
-- Somente realize as análises de existir o campo 245 |
|||
if frame:expandTemplate {title = "Exist", args = {"245"}} ~= "" then |
|||
-- Record status |
|||
test = frame:expandTemplate {title = "Field data string", args = {"000", "5", "1", property = "Leader"}} or false |
|||
if test == "n" then |
|||
info = |
|||
"* Segundo o Líder, este é um registro '''novo''' (não um alterado ou revisado, expandido, excluído, etc.)." |
|||
table.insert(infos, info) |
|||
elseif test == "c" then |
|||
info = |
|||
"* Segundo o Líder, este é um registro '''alterado ou revisado''' (não um novo, expandido, excluído, etc.)." |
|||
table.insert(infos, info) |
|||
elseif test == "a" or test == "d" or test == "p" then |
|||
info = "* Segundo o Líder, este é um registro '''expandido''' ou '''excluído''' (não novo)." |
|||
table.insert(infos, info) |
|||
end |
end |
||
-- Type of record |
|||
if target == '' or target == nil then |
|||
test = frame:expandTemplate {title = "Field data string", args = {"000", "6", "1", property = "Leader"}} or false |
|||
target = mw.title.getCurrentTitle().prefixedText |
|||
if test == "a" then |
|||
info = "* Segundo o Líder, este registro descreve um '''material textual'''." |
|||
table.insert(infos, info) |
|||
end |
end |
||
-- Bibliographic level |
|||
-- Semantic Scribunto foi carregado? |
|||
test = frame:expandTemplate {title = "Field data string", args = {"000", "7", "1", property = "Leader"}} or false |
|||
if not mw.smw then |
|||
if test == "m" then |
|||
info = |
|||
"* Segundo o Líder, este registro descreve um '''item monográfico''' (não parte de um item, não um item seriado, não uma coleção, etc.)." |
|||
table.insert(infos, info) |
|||
end |
|||
-- Encoding level |
|||
test = frame:expandTemplate {title = "Field data string", args = {"000", "17", "1", property = "Leader"}} or false |
|||
if test == "1" then |
|||
info = |
|||
"* Segundo o Líder, este registro tem um nível '''completo''' de catalogação (mas o material não foi examinado)." |
|||
table.insert(infos, info) |
|||
elseif test == "#" then |
|||
info = |
|||
"* Segundo o Líder, este registro tem um nível '''completo''' de catalogação (a descrição foi realizada com o material em mãos)." |
|||
table.insert(infos, info) |
|||
end |
end |
||
-- |
-- Descriptive cataloging form |
||
test = frame:expandTemplate {title = "Field data string", args = {"000", "18", "1", property = "Leader"}} or false |
|||
local test, info, queryResult, f110existance, f110 |
|||
if test == "a" then |
|||
info = "* Segundo o Líder, este registro possui uma catalogação '''compatível com as regras do AACR 2'''." |
|||
-- Somente realize as análises de existir o campo 245 |
|||
table.insert(infos, info) |
|||
if frame:expandTemplate{ title = 'Exist', args = { '245' } } ~= '' then |
|||
else |
|||
-- Record status |
|||
info = "* Segundo o Líder, este registro possui uma catalogação '''não compatível com as regras da ISBD'''." |
|||
test = frame:expandTemplate{ title = 'Field data string', args = { '000', '5', '1', property = 'Leader' } } or false |
|||
table.insert(infos, info) |
|||
if test == 'n' then |
|||
end |
|||
info = "* Segundo o Líder, este é um registro '''novo''' (não um alterado ou revisado, expandido, excluído, etc.)." |
|||
-- Explica a sintaxe "(Biblioteca)NúmeroDeControle" |
|||
local f001 = |
|||
frame:expandTemplate {title = "Field data string", args = {"001", "0", "", property = "Control field data"}} |
|||
info = |
|||
'* Internamente, este registro é identificado pelo código "' .. |
|||
f001 .. |
|||
'"; para sistemas externos, o código é "(' .. |
|||
frame:expandTemplate { |
|||
title = "Field data string", |
|||
args = {"003", "0", "", property = "Control field data"} |
|||
} .. |
|||
")" .. f001 .. '".' |
|||
table.insert(infos, info) |
|||
-- Campo 005 |
|||
queryResult = mw.smw.ask("[[" .. target .. "]]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") |
|||
local creationDate = "" |
|||
if type(queryResult) == "table" then |
|||
for _, row in pairs(queryResult) do |
|||
for _, data in pairs(row) do |
|||
creationDate = data |
|||
end |
|||
end |
|||
end |
|||
queryResult = |
|||
mw.smw.ask("[[" .. target .. "]]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") |
|||
local modificationDate = "" |
|||
if type(queryResult) == "table" then |
|||
for _, row in pairs(queryResult) do |
|||
for _, data in pairs(row) do |
|||
modificationDate = data |
|||
end |
|||
end |
|||
end |
|||
info = |
|||
"* O registro foi criado em: " .. creationDate .. ". Sua última transação foi em: " .. modificationDate .. "." |
|||
table.insert(infos, info) |
|||
-- Campo 008 |
|||
local invalidCode = "<strong class='error'>código inválido para o local de publicação</strong>" |
|||
local pubPlace_tbl = { |
|||
["acb"] = "Acre", |
|||
["alb"] = "Alagoas", |
|||
["amb"] = "Amazonas", |
|||
["apb"] = "Amapá", |
|||
["bab"] = "Bahia", |
|||
["ceb"] = "Ceará", |
|||
["dfb"] = "Distrito Federal", |
|||
["esb"] = "Espírito Santo", |
|||
["gob"] = "Goiás", |
|||
["mab"] = "Maranhão", |
|||
["mgb"] = "Minas Gerais", |
|||
["msb"] = "Mato Grosso do Sul", |
|||
["mtb"] = "Mato Grosso", |
|||
["pab"] = "Pará", |
|||
["pbb"] = "Paraíba", |
|||
["peb"] = "Pernambuco", |
|||
["pib"] = "Piauí", |
|||
["prb"] = "Paraná", |
|||
["rjb"] = "Rio de Janeiro", |
|||
["rnb"] = "Rio Grande do Norte", |
|||
["rob"] = "Rondônia", |
|||
["rrb"] = "Roraima", |
|||
["rsb"] = "Rio Grande do Sul", |
|||
["scb"] = "Santa Catarina", |
|||
["seb"] = "Sergipe", |
|||
["spb"] = "São Paulo", |
|||
["tob"] = "Tocantins", |
|||
["bl "] = "Brasil", |
|||
["xxu"] = "Estados Unidos", |
|||
["flu"] = "Flórida, EUA", |
|||
["nyu"] = "Nova York, EUA", |
|||
["po "] = "Portugal", |
|||
["xxk"] = "Reino Unido", |
|||
["fr "] = "França", |
|||
["sp "] = "Espanha", |
|||
["gw "] = "Alemanha", |
|||
["xx "] = "<strong class='error'>não foi identificado um local de publicação no campo 008</strong>", |
|||
["vp "] = "há vários locais de publicação", |
|||
["esp"] = invalidCode, |
|||
["eua"] = invalidCode, |
|||
["fra"] = invalidCode, |
|||
[" "] = "<strong class='error'>é necessário informar um código de local de publicação, campo 008.</strong>" |
|||
} |
|||
local f008pubPlace = |
|||
frame:expandTemplate { |
|||
title = "Field data string", |
|||
args = {"008", "15", "3", property = "Control field data"} |
|||
} |
|||
if string.match(f008pubPlace, "^[A-Z]") then |
|||
info = "* <strong class='error'>O uso de maiúsculas não é permitido no campo 008, local de publicação.</strong>" |
|||
table.insert(infos, info) |
|||
elseif pubPlace_tbl[f008pubPlace] then |
|||
info = "* O item possui a seguinte origem: " .. tostring(pubPlace_tbl[f008pubPlace]) .. "." |
|||
table.insert(infos, info) |
|||
else |
|||
info = "* O item possui a seguinte origem: " .. f008pubPlace .. "." |
|||
table.insert(infos, info) |
|||
end |
|||
invalidCode = "<strong class='error'>código inválido para o idioma (campo 008 ou subcampo $h do campo 041)</strong>" |
|||
local lang_tbl = { |
|||
["por"] = "português", |
|||
["eng"] = "inglês", |
|||
["spa"] = "espanhol", |
|||
["ger"] = "alemão", |
|||
["fre"] = "francês", |
|||
["ita"] = "italiano", |
|||
["chi"] = "chinês", |
|||
["esp"] = invalidCode, |
|||
["ing"] = invalidCode, |
|||
["fra"] = invalidCode, |
|||
["pt"] = invalidCode, |
|||
["en"] = invalidCode, |
|||
["es"] = invalidCode, |
|||
[" "] = "<strong class='error'>é necessário informar um código de idioma no campo 008.</strong>" |
|||
} |
|||
local f008lang = |
|||
frame:expandTemplate { |
|||
title = "Field data string", |
|||
args = {"008", "35", "3", property = "Control field data"} |
|||
} |
|||
if string.match(f008lang, "^[A-Z]") then |
|||
info = "* <strong class='error'>O uso de maiúsculas não é permitido no campo 008, idioma.</strong>" |
|||
elseif lang_tbl[f008lang] then |
|||
info = "* Majoritariamente, o item se expressa no seguinte idioma: " .. tostring(lang_tbl[f008lang]) |
|||
else |
|||
info = "* Majoritariamente, o item se expressa no seguinte idioma: " .. f008lang |
|||
end |
|||
-- Se existe o campo 041, mostra "(traduzido do... )" na mesma linha do idioma presente no 008 |
|||
test = frame:expandTemplate {title = "Exist", args = {"041"}} |
|||
if test ~= "" then |
|||
test = frame:expandTemplate {title = "Field data string", args = {"041", "0", "1"}} or false |
|||
if test == "1" then |
|||
local f041h = frame:expandTemplate {title = "Select", args = {"041", "h"}} |
|||
f041h = lang_tbl[f041h] or f041h |
|||
info = info .. " (traduzido do " .. f041h .. ")." |
|||
end |
|||
end |
|||
table.insert(infos, info) |
|||
-- Testa se existe(m) ISBN(s) inválido(s) |
|||
test = frame:expandTemplate {title = "Exist", args = {"020"}} or false |
|||
if test ~= "" then |
|||
test = frame:expandTemplate {title = "Print ISBN"} or false |
|||
if string.match(test, "error") then |
|||
info = "* <strong class='error'>ISBN inválido, por favor, reveja os números informados.</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
|||
-- Testa se existe(m) hifen(s) ou x minúsculo no ISBN |
|||
info = "* Segundo o Líder, este é um registro '''alterado ou revisado''' (não um novo, expandido, excluído, etc.)." |
|||
queryResult = mw.smw.ask("[[" .. target .. "#020]]|?Field data#|headers=hide|mainlabel=-") |
|||
local f020 = "" |
|||
if type(queryResult) == "table" then |
|||
for _, row in pairs(queryResult) do |
|||
for _, data in pairs(row) do |
|||
f020 = mw.text.trim(table.concat(data)) |
|||
end |
|||
end |
|||
end |
|||
if string.match(f020, "-") then |
|||
info = '* <strong class=\'error\'>O ISBN não pode conter hifens. Apenas números e "X" maiúsculo.</strong>' |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
elseif |
elseif string.match(f020, "x") then |
||
info = |
|||
info = "* Segundo o Líder, este é um registro '''expandido''' ou '''excluído''' (não novo)." |
|||
'* <strong class=\'error\'>O ISBN não pode conter um x minúsculo. Apenas números e "X" maiúsculo.</strong>' |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
-- |
-- Testa se há indicadores no campo 020 |
||
if string.sub(f020, 1, 1) ~= "#" then |
|||
test = frame:expandTemplate{ title = 'Field data string', args = { '000', '6', '1', property = 'Leader' } } or false |
|||
info = |
|||
"* <strong class='error'>O primeiro indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido.</strong>" |
|||
info = "* Segundo o Líder, este registro descreve um '''material textual'''." |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
if string.sub(f020, 2, 2) ~= "#" then |
|||
-- Bibliographic level |
|||
info = |
|||
test = frame:expandTemplate{ title = 'Field data string', args = { '000', '7', '1', property = 'Leader' } } or false |
|||
"* <strong class='error'>O segundo indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido.</strong>" |
|||
if test == 'm' then |
|||
info = "* Segundo o Líder, este registro descreve um '''item monográfico''' (não parte de um item, não um item seriado, não uma coleção, etc.)." |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
end |
|||
-- Encoding level |
|||
-- Testa o uso de maiúsculas no campo 041 |
|||
test = frame:expandTemplate{ title = 'Field data string', args = { '000', '17', '1', property = 'Leader' } } or false |
|||
test = frame:expandTemplate {title = "Exist", args = {"041"}} or false |
|||
if test == '1' then |
|||
if test ~= "" then |
|||
info = "* Segundo o Líder, este registro tem um nível '''completo''' de catalogação (mas o material não foi examinado)." |
|||
test = frame:expandTemplate {title = "Field data string", args = {"041", "0", "1"}} or false |
|||
if test == "#" then |
|||
info = "* <strong class='error'>Talvez o primeiro indicador do campo 041 tenha sido esquecido.</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
|||
test = frame:expandTemplate {title = "Select", args = {"041", "a"}} or false |
|||
info = "* Segundo o Líder, este registro tem um nível '''completo''' de catalogação (a descrição foi realizada com o material em mãos)." |
|||
if string.match(test, "^[A-Z]") then |
|||
info = "* <strong class='error'>O uso de maiúsculas não é permitido nos códigos de idioma (campo 041).</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
end |
|||
-- Descriptive cataloging form |
|||
-- Verifica a presença de pontos de acesso principais 1XX |
|||
test = frame:expandTemplate{ title = 'Field data string', args = { '000', '18', '1', property = 'Leader' } } or false |
|||
-- TODO: trocar callParserFunction por mw.smw.ask |
|||
if test == 'a' then |
|||
-- queryResult = mw.smw.ask( '[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]' ) |
|||
info = "* Segundo o Líder, este registro possui uma catalogação '''compatível com as regras do AACR 2'''." |
|||
local accessPointPresence = |
|||
frame:callParserFunction { |
|||
name = "#ask:[[" .. target .. "#100||" .. target .. "#110||" .. target .. "#111||" .. target .. "#130]]", |
|||
args = {"?Field data", format = "count", mainlabel = "-"} |
|||
} |
|||
-- A seguir, testa se há subcampo $b e se há espaço no subcampo $c do campo 090 |
|||
test = frame:expandTemplate {title = "Exist", args = {"090"}} or false |
|||
if test ~= "" then |
|||
test = frame:expandTemplate {title = "Select", args = {"090", "b"}} or false |
|||
if test == "" then |
|||
info = "* <strong class='error'>Está faltando o subcampo $b do campo 090 (notação de Cutter).</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
|||
-- A seguir, testa se não foi esquecida a letra do tíulo na notação de Cutter, caso haja um ponto de acesso 1XX |
|||
info = "* Segundo o Líder, este registro possui uma catalogação '''não compatível com as regras da ISBD'''." |
|||
if tonumber(accessPointPresence) >= 1 and string.match(test, "[0-9]$") then |
|||
info = "* <strong class='error'>Falta a letra do título na notação de Cutter.</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
test = frame:expandTemplate {title = "Select", args = {"090", "c"}} or false |
|||
-- Explica a sintaxe "(Biblioteca)NúmeroDeControle" |
|||
if string.match(test, "%sed") then |
|||
local f001 = frame:expandTemplate{ title = 'Field data string', args = { '001', '0', '', property = 'Control field data' } } |
|||
info = |
|||
info = '* Internamente, este registro é identificado pelo código "' .. f001 .. '"; para sistemas externos, o código é "(' .. frame:expandTemplate{ title = 'Field data string', args = { '003', '0', '', property = 'Control field data' } } .. ')' .. f001 .. '".' |
|||
"* <strong class='error'>Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c).</strong>" |
|||
table.insert(infos, info) |
|||
table.insert(infos, info) |
|||
-- Campo 005 |
|||
queryResult = mw.smw.ask( '[[' .. target .. ']]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-' ) |
|||
local creationDate = "" |
|||
if type( queryResult ) == "table" then |
|||
for _, row in pairs( queryResult ) do |
|||
for _, data in pairs( row ) do |
|||
creationDate = data |
|||
end |
|||
end |
|||
end |
end |
||
end |
|||
queryResult = mw.smw.ask( '[[' .. target .. ']]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-' ) |
|||
-- A seguir, testa (conta) se existe mais de um ponto de acesso principal |
|||
local modificationDate = "" |
|||
local f100existance = frame:expandTemplate {title = "Exist", args = {"100"}} |
|||
if type( queryResult ) == "table" then |
|||
if tonumber(accessPointPresence) > 1 or f100existance == "multiple" then |
|||
for _, row in pairs( queryResult ) do |
|||
info = |
|||
for _, data in pairs( row ) do |
|||
"* <strong class='error'>Foi registrado '''mais de um ponto de acesso principal'''. Isso não é permitido.</strong>" |
|||
modificationDate = data |
|||
end |
|||
end |
|||
end |
|||
info = "* O registro foi criado em: " .. creationDate .. ". Sua última transação foi em: " .. modificationDate .. "." |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
|||
if f100existance ~= "" then |
|||
local invalidCode = "<strong class='error'>código inválido para o local de publicação</strong>" |
|||
local f100 = frame:expandTemplate {title = "Field data string", args = {"100", "0", "0"}} |
|||
local pubPlace_tbl = |
|||
info = "* O ponto de acesso principal foi dado a uma '''pessoa'''" |
|||
{ |
|||
if f100:sub(1, 1) == "0" then |
|||
info = info .. " e a entrada começa pelo seu '''primeiro nome'''." |
|||
["alb"] = "Alagoas", |
|||
table.insert(infos, info) |
|||
elseif f100:sub(1, 1) == "1" then |
|||
info = info .. " e a entrada começa pelo seu '''sobrenome'''." |
|||
["bab"] = "Bahia", |
|||
table.insert(infos, info) |
|||
elseif f100:sub(1, 1) == "3" then |
|||
info = info .. " e a entrada começa pelo seu '''nome de família'''." |
|||
["esb"] = "Espírito Santo", |
|||
table.insert(infos, info) |
|||
elseif f100:sub(1, 1) == "#" then |
|||
info = info .. ", porém, <strong class='error'>o primeiro indicador não foi preenchido.</strong>" |
|||
["mgb"] = "Minas Gerais", |
|||
table.insert(infos, info) |
|||
["msb"] = "Mato Grosso do Sul", |
|||
elseif |
|||
["mtb"] = "Mato Grosso", |
|||
f100:sub(1, 1) == "2" or f100:sub(1, 1) == "4" or f100:sub(1, 1) == "5" or f100:sub(1, 1) == "6" or |
|||
["pab"] = "Pará", |
|||
f100:sub(1, 1) == "7" or |
|||
f100:sub(1, 1) == "8" or |
|||
f100:sub(1, 1) == "9" |
|||
then |
|||
info = info .. ", porém, <strong class='error'>o primeiro indicador foi preenchido incorretamente.</strong>" |
|||
["rjb"] = "Rio de Janeiro", |
|||
["rnb"] = "Rio Grande do Norte", |
|||
["rob"] = "Rondônia", |
|||
["rrb"] = "Roraima", |
|||
["rsb"] = "Rio Grande do Sul", |
|||
["scb"] = "Santa Catarina", |
|||
["seb"] = "Sergipe", |
|||
["spb"] = "São Paulo", |
|||
["tob"] = "Tocantins", |
|||
["bl "] = "Brasil", |
|||
["xxu"] = "Estados Unidos", |
|||
["flu"] = "Flórida, EUA", |
|||
["nyu"] = "Nova York, EUA", |
|||
["po "] = "Portugal", |
|||
["xxk"] = "Reino Unido", |
|||
["fr "] = "França", |
|||
["sp "] = "Espanha", |
|||
["gw "] = "Alemanha", |
|||
["xx "] = "<strong class='error'>não foi identificado um local de publicação no campo 008</strong>", |
|||
["vp "] = "há vários locais de publicação", |
|||
["esp"] = invalidCode, |
|||
["eua"] = invalidCode, |
|||
["fra"] = invalidCode, |
|||
[" "] = "<strong class='error'>é necessário informar um código de local de publicação, campo 008.</strong>", |
|||
} |
|||
local f008pubPlace = frame:expandTemplate{ title = 'Field data string', args = { '008', '15', '3', property = 'Control field data' } } |
|||
if string.match(f008pubPlace, '^[A-Z]') then |
|||
info = "* <strong class='error'>O uso de maiúsculas não é permitido no campo 008, local de publicação.</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
elseif pubPlace_tbl[f008pubPlace] then |
|||
info = "* O item possui a seguinte origem: " .. tostring(pubPlace_tbl[f008pubPlace]) .. "." |
|||
table.insert(infos, info) |
|||
else |
|||
info = "* O item possui a seguinte origem: " .. f008pubPlace .. "." |
|||
table.insert(infos, info) |
|||
end |
end |
||
if f100:sub(2, 2) ~= "#" then |
|||
invalidCode = "<strong class='error'>código inválido para o idioma (campo 008 ou subcampo $h do campo 041)</strong>" |
|||
info = |
|||
"* <strong class='error'>O segundo indicador do campo 100 foi preenchido, porém, ele não deve ser preenchido.</strong>" |
|||
{ |
|||
table.insert(infos, info) |
|||
["eng"] = "inglês", |
|||
["spa"] = "espanhol", |
|||
["ger"] = "alemão", |
|||
["fre"] = "francês", |
|||
["ita"] = "italiano", |
|||
["chi"] = "chinês", |
|||
["esp"] = invalidCode, |
|||
["ing"] = invalidCode, |
|||
["fra"] = invalidCode, |
|||
["pt"] = invalidCode, |
|||
["en"] = invalidCode, |
|||
["es"] = invalidCode, |
|||
[" "] = "<strong class='error'>é necessário informar um código de idioma no campo 008.</strong>", |
|||
} |
|||
local f008lang = frame:expandTemplate{ title = 'Field data string', args = { '008', '35', '3', property = 'Control field data' } } |
|||
if string.match(f008lang, '^[A-Z]') then |
|||
info = "* <strong class='error'>O uso de maiúsculas não é permitido no campo 008, idioma.</strong>" |
|||
elseif lang_tbl[f008lang] then |
|||
info = "* Majoritariamente, o item se expressa no seguinte idioma: " .. tostring(lang_tbl[f008lang]) |
|||
else |
|||
info = "* Majoritariamente, o item se expressa no seguinte idioma: " .. f008lang |
|||
end |
end |
||
-- |
-- Testa se existe ", " no subcampo $a (Nome, Sobrenome) |
||
local f100a = frame:expandTemplate {title = "Select", args = {"100", "a"}} |
|||
if |
if f100a ~= "" then |
||
if not string.match(f100a, ".-,.") then |
|||
test = frame:expandTemplate{ title = 'Field data string', args = { '041', '0', '1' } } or false |
|||
info = |
|||
"* <strong class='error'>Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 100.</strong>" |
|||
local f041h = frame:expandTemplate{ title = 'Select', args = { '041', 'h' } } |
|||
f041h = lang_tbl[f041h] or f041h |
|||
info = info .. " (traduzido do " .. f041h .. ")." |
|||
end |
|||
end |
|||
table.insert(infos, info) |
|||
-- Testa se existe(m) ISBN(s) inválido(s) |
|||
test = frame:expandTemplate{ title = 'Exist', args = { '020' } } or false |
|||
if test ~= '' then |
|||
test = frame:expandTemplate{ title = 'Print ISBN' } or false |
|||
if string.match(test, 'error') then |
|||
info = "* <strong class='error'>ISBN inválido, por favor, reveja os números informados.</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
if string.match(f100a, "[a-zÀ-ü],[A-ZÀ-ü]") then |
|||
-- Testa se existe(m) hifen(s) ou x minúsculo no ISBN |
|||
info = "* <strong class='error'>Falta espaço após a vírgula. Verifique o campo 100.</strong>" |
|||
queryResult = mw.smw.ask( '[[' .. target .. '#020]]|?Field data#|headers=hide|mainlabel=-' ) |
|||
local f020 = "" |
|||
if type( queryResult ) == "table" then |
|||
for _, row in pairs( queryResult ) do |
|||
for _, data in pairs( row ) do |
|||
f020 = mw.text.trim( table.concat( data ) ) |
|||
end |
|||
end |
|||
end |
|||
if string.match(f020, '-') then |
|||
info = "* <strong class='error'>O ISBN não pode conter hifens. Apenas números e \"X\" maiúsculo.</strong>" |
|||
table.insert(infos, info) |
|||
elseif string.match(f020, 'x') then |
|||
info = "* <strong class='error'>O ISBN não pode conter um x minúsculo. Apenas números e \"X\" maiúsculo.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
-- Testa se há indicadores no campo 020 |
|||
if string.sub(f020, 1, 1) ~= '#' then |
|||
info = "* <strong class='error'>O primeiro indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
if string.sub(f020, 2, 2) ~= '#' then |
|||
info = "* <strong class='error'>O segundo indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido.</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
end |
end |
||
local f100q = frame:expandTemplate {title = "Select", args = {"100", "q"}} |
|||
-- Testa o uso de maiúsculas no campo 041 |
|||
if f100q ~= "" then |
|||
test = frame:expandTemplate{ title = 'Exist', args = { '041' } } or false |
|||
if |
if not string.match(f100q, "^%(") then |
||
info = "* <strong class='error'>O subcampo $q do campo 100 necessita parênteses.</strong>" |
|||
test = frame:expandTemplate{ title = 'Field data string', args = { '041', '0', '1' } } or false |
|||
if test == '#' then |
|||
info = "* <strong class='error'>Talvez o primeiro indicador do campo 041 tenha sido esquecido.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
test = frame:expandTemplate{ title = 'Select', args = { '041', 'a' } } or false |
|||
if string.match(test, '^[A-Z]') then |
|||
info = "* <strong class='error'>O uso de maiúsculas não é permitido nos códigos de idioma (campo 041).</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
end |
end |
||
local f100d = frame:expandTemplate {title = "Select", args = {"100", "d"}} |
|||
-- Verifica a presença de pontos de acesso principais 1XX |
|||
if f100d ~= "" then |
|||
-- TODO: trocar callParserFunction por mw.smw.ask |
|||
if string.match(f100, "%$d %d%d%d%d$") then |
|||
-- queryResult = mw.smw.ask( '[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]' ) |
|||
info = "* <strong class='error'>O subcampo $d do campo 100 necessita hífen.</strong>" |
|||
local accessPointPresence = frame:callParserFunction{ |
|||
name = '#ask:[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]', args = { '?Field data', format = 'count', mainlabel = '-' } |
|||
} |
|||
-- A seguir, testa se há subcampo $b e se há espaço no subcampo $c do campo 090 |
|||
test = frame:expandTemplate{ title = 'Exist', args = { '090' } } or false |
|||
if test ~= '' then |
|||
test = frame:expandTemplate{ title = 'Select', args = { '090', 'b' } } or false |
|||
if test == '' then |
|||
info = "* <strong class='error'>Está faltando o subcampo $b do campo 090 (notação de Cutter).</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
-- A seguir, testa se não foi esquecida a letra do tíulo na notação de Cutter, caso haja um ponto de acesso 1XX |
|||
if tonumber(accessPointPresence) >= 1 and string.match(test, '[0-9]$') then |
|||
info = "* <strong class='error'>Falta a letra do título na notação de Cutter.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
test = frame:expandTemplate{ title = 'Select', args = { '090', 'c' } } or false |
|||
if string.match(test, '%sed') then |
|||
info = "* <strong class='error'>Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c).</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
end |
end |
||
end |
|||
-- A seguir, testa (conta) se existe mais de um ponto de acesso principal |
|||
-- A seguir, testa se existe um ponto de acesso principal 110 |
|||
local f100existance = frame:expandTemplate{ title = 'Exist', args = { '100'} } |
|||
f110existance = frame:expandTemplate {title = "Exist", args = {"110"}} |
|||
if tonumber(accessPointPresence) > 1 or f100existance == 'multiple' then |
|||
if f110existance ~= "" then |
|||
info = "* <strong class='error'>Foi registrado '''mais de um ponto de acesso principal'''. Isso não é permitido.</strong>" |
|||
f110 = frame:expandTemplate {title = "Field data string", args = {"110", "0", "0"}} or "" |
|||
info = "* O ponto de acesso principal foi dado a uma '''entidade coletiva'''" |
|||
table.insert(infos, info) |
|||
if f110:sub(1, 1) == "0" then |
|||
info = info .. " e a entrada começa por um '''nome invertido'''." |
|||
table.insert(infos, info) |
|||
elseif f110:sub(1, 1) == "1" then |
|||
info = info .. " e a entrada começa por um '''nome de jurisdição'''." |
|||
table.insert(infos, info) |
|||
elseif f110:sub(1, 1) == "2" then |
|||
info = info .. " e a entrada começa por um '''nome em ordem direta'''." |
|||
table.insert(infos, info) |
|||
elseif f110:sub(1, 1) == "#" then |
|||
info = info .. ", porém, <strong class='error'>o primeiro indicador não foi preenchido.</strong>" |
|||
table.insert(infos, info) |
|||
elseif |
|||
f110:sub(1, 1) == "3" or f110:sub(1, 1) == "4" or f110:sub(1, 1) == "5" or f110:sub(1, 1) == "6" or |
|||
f110:sub(1, 1) == "7" or |
|||
f110:sub(1, 1) == "8" or |
|||
f110:sub(1, 1) == "9" |
|||
then |
|||
info = info .. ", porém, <strong class='error'>o primeiro indicador foi preenchido incorretamente.</strong>" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
end |
end |
||
if |
if f110:sub(2, 2) ~= "#" then |
||
info = |
|||
local f100 = frame:expandTemplate{ title = 'Field data string', args = { '100', '0', '0' } } |
|||
"* <strong class='error'>O segundo indicador do campo 110 foi preenchido, porém, ele não deve ser preenchido.</strong>" |
|||
info = "* O ponto de acesso principal foi dado a uma '''pessoa'''" |
|||
if f100:sub(1, 1) == "0" then |
|||
info = info .. " e a entrada começa pelo seu '''primeiro nome'''." |
|||
table.insert(infos, info) |
|||
elseif f100:sub(1, 1) == "1" then |
|||
info = info .. " e a entrada começa pelo seu '''sobrenome'''." |
|||
table.insert(infos, info) |
|||
elseif f100:sub(1, 1) == "3" then |
|||
info = info .. " e a entrada começa pelo seu '''nome de família'''." |
|||
table.insert(infos, info) |
|||
elseif f100:sub(1, 1) == "#" then |
|||
info = info .. ", porém, <strong class='error'>o primeiro indicador não foi preenchido.</strong>" |
|||
table.insert(infos, info) |
|||
elseif f100:sub(1, 1) == "2" or f100:sub(1, 1) == "4" or f100:sub(1, 1) == "5" or f100:sub(1, 1) == "6" or f100:sub(1, 1) == "7" or f100:sub(1, 1) == "8" or f100:sub(1, 1) == "9" then |
|||
info = info .. ", porém, <strong class='error'>o primeiro indicador foi preenchido incorretamente.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
if f100:sub(2, 2) ~= '#' then |
|||
info = "* <strong class='error'>O segundo indicador do campo 100 foi preenchido, porém, ele não deve ser preenchido.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
-- Testa se existe ", " no subcampo $a (Nome, Sobrenome) |
|||
local f100a = frame:expandTemplate{ title = 'Select', args = { '100', 'a' } } |
|||
if f100a ~= '' then |
|||
if not string.match(f100a, '.-,.') then |
|||
info = "* <strong class='error'>Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 100.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
if string.match(f100a, '[a-zÀ-ü],[A-ZÀ-ü]') then |
|||
info = "* <strong class='error'>Falta espaço após a vírgula. Verifique o campo 100.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
end |
|||
local f100q = frame:expandTemplate{ title = 'Select', args = { '100', 'q' } } |
|||
if f100q ~= '' then |
|||
if not string.match(f100q, '^%(') then |
|||
info = "* <strong class='error'>O subcampo $q do campo 100 necessita parênteses.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
end |
|||
local f100d = frame:expandTemplate{ title = 'Select', args = { '100', 'd' } } |
|||
if f100d ~= '' then |
|||
if string.match(f100, '%$d %d%d%d%d$') then |
|||
info = "* <strong class='error'>O subcampo $d do campo 100 necessita hífen.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
end |
|||
end |
|||
-- A seguir, testa se existe um ponto de acesso principal 110 |
|||
f110existance = frame:expandTemplate{ title = 'Exist', args = { '110'} } |
|||
if f110existance ~= '' then |
|||
f110 = frame:expandTemplate{ title = 'Field data string', args = { '110', '0', '0' } } or '' |
|||
info = "* O ponto de acesso principal foi dado a uma '''entidade coletiva'''" |
|||
table.insert(infos, info) |
table.insert(infos, info) |
||
if f110:sub(1, 1) == "0" then |
|||
info = info .. " e a entrada começa por um '''nome invertido'''." |
|||
table.insert(infos, info) |
|||
elseif f110:sub(1, 1) == "1" then |
|||
info = info .. " e a entrada começa por um '''nome de jurisdição'''." |
|||
table.insert(infos, info) |
|||
elseif f110:sub(1, 1) == "2" then |
|||
info = info .. " e a entrada começa por um '''nome em ordem direta'''." |
|||
table.insert(infos, info) |
|||
elseif f110:sub(1, 1) == "#" then |
|||
info = info .. ", porém, <strong class='error'>o primeiro indicador não foi preenchido.</strong>" |
|||
table.insert(infos, info) |
|||
elseif f110:sub(1, 1) == "3" or f110:sub(1, 1) == "4" or f110:sub(1, 1) == "5" or f110:sub(1, 1) == "6" or f110:sub(1, 1) == "7" or f110:sub(1, 1) == "8" or f110:sub(1, 1) == "9" then |
|||
info = info .. ", porém, <strong class='error'>o primeiro indicador foi preenchido incorretamente.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
if f110:sub(2, 2) ~= '#' then |
|||
info = "* <strong class='error'>O segundo indicador do campo 110 foi preenchido, porém, ele não deve ser preenchido.</strong>" |
|||
table.insert(infos, info) |
|||
end |
|||
end |
end |
||
end |
|||
--[[ |
|||
--]] |
--]] |
||
end -- end if 245 |
|||
return table.concat(infos, "\n"), f110existance .. " " .. f110 .. " " .. f110:sub(1, 1) |
|||
end -- end if 245 |
|||
return table.concat( infos, '\n' ), f110existance .. " " .. f110 .. " " .. f110:sub(1, 1) |
|||
end |
end |
||
Edição das 11h45min de 14 de agosto de 2021
A documentação para este módulo pode ser criada em Módulo:BibRules/doc
local p = {}
function p.BibRules(frame)
-- Define o alvo das regras
local target = frame:getParent().args[1]
if target == "" or target == nil then
target = mw.uri.decode(frame:callParserFunction("#urlget", "fullpagename"))
end
if target == "" or target == nil then
target = mw.title.getCurrentTitle().prefixedText
end
-- Semantic Scribunto foi carregado?
if not mw.smw then
return "mw.smw module not found"
end
-- Define variáveis básicas
local test, info, queryResult, f110existance, f110
local infos = {}
-- Somente realize as análises de existir o campo 245
if frame:expandTemplate {title = "Exist", args = {"245"}} ~= "" then
-- Record status
test = frame:expandTemplate {title = "Field data string", args = {"000", "5", "1", property = "Leader"}} or false
if test == "n" then
info =
"* Segundo o Líder, este é um registro '''novo''' (não um alterado ou revisado, expandido, excluído, etc.)."
table.insert(infos, info)
elseif test == "c" then
info =
"* Segundo o Líder, este é um registro '''alterado ou revisado''' (não um novo, expandido, excluído, etc.)."
table.insert(infos, info)
elseif test == "a" or test == "d" or test == "p" then
info = "* Segundo o Líder, este é um registro '''expandido''' ou '''excluído''' (não novo)."
table.insert(infos, info)
end
-- Type of record
test = frame:expandTemplate {title = "Field data string", args = {"000", "6", "1", property = "Leader"}} or false
if test == "a" then
info = "* Segundo o Líder, este registro descreve um '''material textual'''."
table.insert(infos, info)
end
-- Bibliographic level
test = frame:expandTemplate {title = "Field data string", args = {"000", "7", "1", property = "Leader"}} or false
if test == "m" then
info =
"* Segundo o Líder, este registro descreve um '''item monográfico''' (não parte de um item, não um item seriado, não uma coleção, etc.)."
table.insert(infos, info)
end
-- Encoding level
test = frame:expandTemplate {title = "Field data string", args = {"000", "17", "1", property = "Leader"}} or false
if test == "1" then
info =
"* Segundo o Líder, este registro tem um nível '''completo''' de catalogação (mas o material não foi examinado)."
table.insert(infos, info)
elseif test == "#" then
info =
"* Segundo o Líder, este registro tem um nível '''completo''' de catalogação (a descrição foi realizada com o material em mãos)."
table.insert(infos, info)
end
-- Descriptive cataloging form
test = frame:expandTemplate {title = "Field data string", args = {"000", "18", "1", property = "Leader"}} or false
if test == "a" then
info = "* Segundo o Líder, este registro possui uma catalogação '''compatível com as regras do AACR 2'''."
table.insert(infos, info)
else
info = "* Segundo o Líder, este registro possui uma catalogação '''não compatível com as regras da ISBD'''."
table.insert(infos, info)
end
-- Explica a sintaxe "(Biblioteca)NúmeroDeControle"
local f001 =
frame:expandTemplate {title = "Field data string", args = {"001", "0", "", property = "Control field data"}}
info =
'* Internamente, este registro é identificado pelo código "' ..
f001 ..
'"; para sistemas externos, o código é "(' ..
frame:expandTemplate {
title = "Field data string",
args = {"003", "0", "", property = "Control field data"}
} ..
")" .. f001 .. '".'
table.insert(infos, info)
-- Campo 005
queryResult = mw.smw.ask("[[" .. target .. "]]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-")
local creationDate = ""
if type(queryResult) == "table" then
for _, row in pairs(queryResult) do
for _, data in pairs(row) do
creationDate = data
end
end
end
queryResult =
mw.smw.ask("[[" .. target .. "]]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-")
local modificationDate = ""
if type(queryResult) == "table" then
for _, row in pairs(queryResult) do
for _, data in pairs(row) do
modificationDate = data
end
end
end
info =
"* O registro foi criado em: " .. creationDate .. ". Sua última transação foi em: " .. modificationDate .. "."
table.insert(infos, info)
-- Campo 008
local invalidCode = "<strong class='error'>código inválido para o local de publicação</strong>"
local pubPlace_tbl = {
["acb"] = "Acre",
["alb"] = "Alagoas",
["amb"] = "Amazonas",
["apb"] = "Amapá",
["bab"] = "Bahia",
["ceb"] = "Ceará",
["dfb"] = "Distrito Federal",
["esb"] = "Espírito Santo",
["gob"] = "Goiás",
["mab"] = "Maranhão",
["mgb"] = "Minas Gerais",
["msb"] = "Mato Grosso do Sul",
["mtb"] = "Mato Grosso",
["pab"] = "Pará",
["pbb"] = "Paraíba",
["peb"] = "Pernambuco",
["pib"] = "Piauí",
["prb"] = "Paraná",
["rjb"] = "Rio de Janeiro",
["rnb"] = "Rio Grande do Norte",
["rob"] = "Rondônia",
["rrb"] = "Roraima",
["rsb"] = "Rio Grande do Sul",
["scb"] = "Santa Catarina",
["seb"] = "Sergipe",
["spb"] = "São Paulo",
["tob"] = "Tocantins",
["bl "] = "Brasil",
["xxu"] = "Estados Unidos",
["flu"] = "Flórida, EUA",
["nyu"] = "Nova York, EUA",
["po "] = "Portugal",
["xxk"] = "Reino Unido",
["fr "] = "França",
["sp "] = "Espanha",
["gw "] = "Alemanha",
["xx "] = "<strong class='error'>não foi identificado um local de publicação no campo 008</strong>",
["vp "] = "há vários locais de publicação",
["esp"] = invalidCode,
["eua"] = invalidCode,
["fra"] = invalidCode,
[" "] = "<strong class='error'>é necessário informar um código de local de publicação, campo 008.</strong>"
}
local f008pubPlace =
frame:expandTemplate {
title = "Field data string",
args = {"008", "15", "3", property = "Control field data"}
}
if string.match(f008pubPlace, "^[A-Z]") then
info = "* <strong class='error'>O uso de maiúsculas não é permitido no campo 008, local de publicação.</strong>"
table.insert(infos, info)
elseif pubPlace_tbl[f008pubPlace] then
info = "* O item possui a seguinte origem: " .. tostring(pubPlace_tbl[f008pubPlace]) .. "."
table.insert(infos, info)
else
info = "* O item possui a seguinte origem: " .. f008pubPlace .. "."
table.insert(infos, info)
end
invalidCode = "<strong class='error'>código inválido para o idioma (campo 008 ou subcampo $h do campo 041)</strong>"
local lang_tbl = {
["por"] = "português",
["eng"] = "inglês",
["spa"] = "espanhol",
["ger"] = "alemão",
["fre"] = "francês",
["ita"] = "italiano",
["chi"] = "chinês",
["esp"] = invalidCode,
["ing"] = invalidCode,
["fra"] = invalidCode,
["pt"] = invalidCode,
["en"] = invalidCode,
["es"] = invalidCode,
[" "] = "<strong class='error'>é necessário informar um código de idioma no campo 008.</strong>"
}
local f008lang =
frame:expandTemplate {
title = "Field data string",
args = {"008", "35", "3", property = "Control field data"}
}
if string.match(f008lang, "^[A-Z]") then
info = "* <strong class='error'>O uso de maiúsculas não é permitido no campo 008, idioma.</strong>"
elseif lang_tbl[f008lang] then
info = "* Majoritariamente, o item se expressa no seguinte idioma: " .. tostring(lang_tbl[f008lang])
else
info = "* Majoritariamente, o item se expressa no seguinte idioma: " .. f008lang
end
-- Se existe o campo 041, mostra "(traduzido do... )" na mesma linha do idioma presente no 008
test = frame:expandTemplate {title = "Exist", args = {"041"}}
if test ~= "" then
test = frame:expandTemplate {title = "Field data string", args = {"041", "0", "1"}} or false
if test == "1" then
local f041h = frame:expandTemplate {title = "Select", args = {"041", "h"}}
f041h = lang_tbl[f041h] or f041h
info = info .. " (traduzido do " .. f041h .. ")."
end
end
table.insert(infos, info)
-- Testa se existe(m) ISBN(s) inválido(s)
test = frame:expandTemplate {title = "Exist", args = {"020"}} or false
if test ~= "" then
test = frame:expandTemplate {title = "Print ISBN"} or false
if string.match(test, "error") then
info = "* <strong class='error'>ISBN inválido, por favor, reveja os números informados.</strong>"
table.insert(infos, info)
end
-- Testa se existe(m) hifen(s) ou x minúsculo no ISBN
queryResult = mw.smw.ask("[[" .. target .. "#020]]|?Field data#|headers=hide|mainlabel=-")
local f020 = ""
if type(queryResult) == "table" then
for _, row in pairs(queryResult) do
for _, data in pairs(row) do
f020 = mw.text.trim(table.concat(data))
end
end
end
if string.match(f020, "-") then
info = '* <strong class=\'error\'>O ISBN não pode conter hifens. Apenas números e "X" maiúsculo.</strong>'
table.insert(infos, info)
elseif string.match(f020, "x") then
info =
'* <strong class=\'error\'>O ISBN não pode conter um x minúsculo. Apenas números e "X" maiúsculo.</strong>'
table.insert(infos, info)
end
-- Testa se há indicadores no campo 020
if string.sub(f020, 1, 1) ~= "#" then
info =
"* <strong class='error'>O primeiro indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido.</strong>"
table.insert(infos, info)
end
if string.sub(f020, 2, 2) ~= "#" then
info =
"* <strong class='error'>O segundo indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido.</strong>"
table.insert(infos, info)
end
end
-- Testa o uso de maiúsculas no campo 041
test = frame:expandTemplate {title = "Exist", args = {"041"}} or false
if test ~= "" then
test = frame:expandTemplate {title = "Field data string", args = {"041", "0", "1"}} or false
if test == "#" then
info = "* <strong class='error'>Talvez o primeiro indicador do campo 041 tenha sido esquecido.</strong>"
table.insert(infos, info)
end
test = frame:expandTemplate {title = "Select", args = {"041", "a"}} or false
if string.match(test, "^[A-Z]") then
info = "* <strong class='error'>O uso de maiúsculas não é permitido nos códigos de idioma (campo 041).</strong>"
table.insert(infos, info)
end
end
-- Verifica a presença de pontos de acesso principais 1XX
-- TODO: trocar callParserFunction por mw.smw.ask
-- queryResult = mw.smw.ask( '[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]' )
local accessPointPresence =
frame:callParserFunction {
name = "#ask:[[" .. target .. "#100||" .. target .. "#110||" .. target .. "#111||" .. target .. "#130]]",
args = {"?Field data", format = "count", mainlabel = "-"}
}
-- A seguir, testa se há subcampo $b e se há espaço no subcampo $c do campo 090
test = frame:expandTemplate {title = "Exist", args = {"090"}} or false
if test ~= "" then
test = frame:expandTemplate {title = "Select", args = {"090", "b"}} or false
if test == "" then
info = "* <strong class='error'>Está faltando o subcampo $b do campo 090 (notação de Cutter).</strong>"
table.insert(infos, info)
end
-- A seguir, testa se não foi esquecida a letra do tíulo na notação de Cutter, caso haja um ponto de acesso 1XX
if tonumber(accessPointPresence) >= 1 and string.match(test, "[0-9]$") then
info = "* <strong class='error'>Falta a letra do título na notação de Cutter.</strong>"
table.insert(infos, info)
end
test = frame:expandTemplate {title = "Select", args = {"090", "c"}} or false
if string.match(test, "%sed") then
info =
"* <strong class='error'>Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c).</strong>"
table.insert(infos, info)
end
end
-- A seguir, testa (conta) se existe mais de um ponto de acesso principal
local f100existance = frame:expandTemplate {title = "Exist", args = {"100"}}
if tonumber(accessPointPresence) > 1 or f100existance == "multiple" then
info =
"* <strong class='error'>Foi registrado '''mais de um ponto de acesso principal'''. Isso não é permitido.</strong>"
table.insert(infos, info)
end
if f100existance ~= "" then
local f100 = frame:expandTemplate {title = "Field data string", args = {"100", "0", "0"}}
info = "* O ponto de acesso principal foi dado a uma '''pessoa'''"
if f100:sub(1, 1) == "0" then
info = info .. " e a entrada começa pelo seu '''primeiro nome'''."
table.insert(infos, info)
elseif f100:sub(1, 1) == "1" then
info = info .. " e a entrada começa pelo seu '''sobrenome'''."
table.insert(infos, info)
elseif f100:sub(1, 1) == "3" then
info = info .. " e a entrada começa pelo seu '''nome de família'''."
table.insert(infos, info)
elseif f100:sub(1, 1) == "#" then
info = info .. ", porém, <strong class='error'>o primeiro indicador não foi preenchido.</strong>"
table.insert(infos, info)
elseif
f100:sub(1, 1) == "2" or f100:sub(1, 1) == "4" or f100:sub(1, 1) == "5" or f100:sub(1, 1) == "6" or
f100:sub(1, 1) == "7" or
f100:sub(1, 1) == "8" or
f100:sub(1, 1) == "9"
then
info = info .. ", porém, <strong class='error'>o primeiro indicador foi preenchido incorretamente.</strong>"
table.insert(infos, info)
end
if f100:sub(2, 2) ~= "#" then
info =
"* <strong class='error'>O segundo indicador do campo 100 foi preenchido, porém, ele não deve ser preenchido.</strong>"
table.insert(infos, info)
end
-- Testa se existe ", " no subcampo $a (Nome, Sobrenome)
local f100a = frame:expandTemplate {title = "Select", args = {"100", "a"}}
if f100a ~= "" then
if not string.match(f100a, ".-,.") then
info =
"* <strong class='error'>Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 100.</strong>"
table.insert(infos, info)
end
if string.match(f100a, "[a-zÀ-ü],[A-ZÀ-ü]") then
info = "* <strong class='error'>Falta espaço após a vírgula. Verifique o campo 100.</strong>"
table.insert(infos, info)
end
end
local f100q = frame:expandTemplate {title = "Select", args = {"100", "q"}}
if f100q ~= "" then
if not string.match(f100q, "^%(") then
info = "* <strong class='error'>O subcampo $q do campo 100 necessita parênteses.</strong>"
table.insert(infos, info)
end
end
local f100d = frame:expandTemplate {title = "Select", args = {"100", "d"}}
if f100d ~= "" then
if string.match(f100, "%$d %d%d%d%d$") then
info = "* <strong class='error'>O subcampo $d do campo 100 necessita hífen.</strong>"
table.insert(infos, info)
end
end
end
-- A seguir, testa se existe um ponto de acesso principal 110
f110existance = frame:expandTemplate {title = "Exist", args = {"110"}}
if f110existance ~= "" then
f110 = frame:expandTemplate {title = "Field data string", args = {"110", "0", "0"}} or ""
info = "* O ponto de acesso principal foi dado a uma '''entidade coletiva'''"
table.insert(infos, info)
if f110:sub(1, 1) == "0" then
info = info .. " e a entrada começa por um '''nome invertido'''."
table.insert(infos, info)
elseif f110:sub(1, 1) == "1" then
info = info .. " e a entrada começa por um '''nome de jurisdição'''."
table.insert(infos, info)
elseif f110:sub(1, 1) == "2" then
info = info .. " e a entrada começa por um '''nome em ordem direta'''."
table.insert(infos, info)
elseif f110:sub(1, 1) == "#" then
info = info .. ", porém, <strong class='error'>o primeiro indicador não foi preenchido.</strong>"
table.insert(infos, info)
elseif
f110:sub(1, 1) == "3" or f110:sub(1, 1) == "4" or f110:sub(1, 1) == "5" or f110:sub(1, 1) == "6" or
f110:sub(1, 1) == "7" or
f110:sub(1, 1) == "8" or
f110:sub(1, 1) == "9"
then
info = info .. ", porém, <strong class='error'>o primeiro indicador foi preenchido incorretamente.</strong>"
table.insert(infos, info)
end
if f110:sub(2, 2) ~= "#" then
info =
"* <strong class='error'>O segundo indicador do campo 110 foi preenchido, porém, ele não deve ser preenchido.</strong>"
table.insert(infos, info)
end
end
--[[
--]]
end -- end if 245
return table.concat(infos, "\n"), f110existance .. " " .. f110 .. " " .. f110:sub(1, 1)
end
return p