Модуль:WDSource
Данный модуль предназначен для получения данных об источнике информации по элементам Викиданных. Работает на основе модуля Модуль:WDBackend.
Модуль используется модулем Модуль:CiteGost для оформления библиографических записей и по своей сути является его обособленной частью.
Схема источникаПравить
Общая схема источника в виде иерархии таблиц:
{
langCode = {
value = 'ISO 639-1 code',
},
lang = {
value = '...',
entity = 'Q...',
},
authors = {
{
value = '',
entity = 'Q...',
components = {
givenName = {
value = 'Given name',
entity = 'Q...',
},
familyName = {
value = 'Family name',
entity = 'Q...',
},
ancestorName = {
value = 'Patronym or matronym',
entity = 'Q...',
},
},
},
-- ...
},
translators = {
{
value = '',
entity = 'Q...',
components = {
givenName = {
value = 'Given name',
entity = 'Q...',
},
familyName = {
value = 'Family name',
entity = 'Q...',
},
ancestorName = {
value = 'Patronym or matronym',
entity = 'Q...',
},
},
},
-- ...
},
title = {
value = '...',
entity = 'Q...',
},
subtitle = {
value = '...',
},
edition = {
value = '...',
},
publishedIn = {
value = '...',
entity = 'Q...',
},
publishedInOrigin = {
value = '...',
entity = 'Q...',
},
publishedInOriginLang = {
value = '...',
entity = 'Q...',
},
publishedInOriginLangCode = {
value = '...',
},
publishedInEditors = {
{
value = '',
entity = 'Q...',
components = {
givenName = {
value = 'Given name',
entity = 'Q...',
},
familyName = {
value = 'Family name',
entity = 'Q...',
},
ancestorName = {
value = 'Patronym or matronym',
entity = 'Q...',
},
},
},
-- ...
},
origin = {
value = '...',
entity = 'Q...',
},
originLang = {
value = '...',
entity = 'Q...',
},
location = {
value = '...',
entity = 'Q...',
},
date = {
value = {
year = YYYY,
month = MM,
day = DD,
timestamp = 'YYYY-MM-DD'
},
},
publisher = {
value = '...',
entity = 'Q...',
},
id = {
value = '...',
},
urlMask = {
value = '...',
},
url = {
value = '...',
},
volume = {
value = '...',
},
issue = {
value = '...',
},
articleId = {
value = '...',
},
pages = {
value = '...',
},
pagesCount = {
value = '...',
},
series = {
value = '...',
entity = 'Q...',
},
comment = {
value = '...',
},
dedicatedTo = {
value = '...',
},
lastUpdate = {
value = {
year = YYYY,
month = MM,
day = DD,
timestamp = 'YYYY-MM-DD'
},
},
accessDate = {
value = {
year = YYYY,
month = MM,
day = DD,
timestamp = 'YYYY-MM-DD'
},
},
doi = {
value = '...',
},
issn = {
{
value = '',
},
-- ...
},
isbn = {
{
value = '',
},
-- ...
},
pmid = {
value = '...',
},
pmc = {
value = '...',
},
s2sic = {
value = '...',
},
archiveUrl = {
value = '...',
},
archiveDate = {
value = {
year = YYYY,
month = MM,
day = DD,
timestamp = 'YYYY-MM-DD'
},
},
}
ТестыПравить
В качестве тестов используются тесты вышележащего модуля Модуль:CiteGost.
Все тесты успешно пройдены.
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|publishedInEntity = Q114595502 |publishedInUrl = https://www.google.ru/books/edition/Seldin_and_Giebisch_s_The_Kidney/w5nEg7VLEQ4C?hl=en&gbpv=1&pg=610 |title = Chapter 20 — Structural Organization of the Mammalian Kidney |url = https://www.sciencedirect.com/science/article/pii/B9780123814623000203 |authors = W. Kriz, B. Kaissling |volume = 1 |pages = 595-691 |ref = Kriz, Kaissling }} |
Kriz W. Chapter 20 — Structural Organization of the Mammalian Kidney : [англ.] / W. Kriz, B. Kaissling // Seldin and Giebisch's The Kidney: Physiology and pathophysiology : in 2 vols. / Eds.: R. J. Alpern [et al.]. — Fifth edition. — Amsterdam : Academic Press, 2012. — Vol. 1. — 31 December. — P. 595—691. — ISBN 978-0-12-381463-0, 978-0-12-381462-3. | Kriz W. Chapter 20 — Structural Organization of the Mammalian Kidney : [англ.] / W. Kriz, B. Kaissling // Seldin and Giebisch's The Kidney: Physiology and pathophysiology : in 2 vols. / Eds.: R. J. Alpern [et al.]. — Fifth edition. — Amsterdam : Academic Press, 2012. — Vol. 1. — 31 December. — P. 595—691. — ISBN 978-0-12-381463-0, 978-0-12-381462-3. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|entity = Q114676884 |ref = Sagan }} |
Саган К. Мир, полный демонов : Наука — как свеча во тьме = The Demon-Haunted World : Пер. с англ. / Пер.: Л. Сумм; ред.: Артур Кляницкий. — 5-е изд. — М. : Альпина нон-фикшн, 2019. — 538 с. — ISBN 978-5-91671-874-4. — WD Q114676884. | Саган К. Мир, полный демонов : Наука — как свеча во тьме = The Demon-Haunted World : Пер. с англ. / Пер.: Л. Сумм; ред.: Артур Кляницкий. — 5-е изд. — М. : Альпина нон-фикшн, 2019. — 538 с. — ISBN 978-5-91671-874-4. — WD Q114676884. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|entity = Q115189432 |volumeTitle = Животные |ref = Красная книга РФ, т. «Животные» }} |
Красная книга Российской Федерации. Т. «Животные». — 2-ое издание. — М. : ФГБУ «ВНИИ Экология», 2021. — 1128 с. — (Красная книга Российской Федерации). — ISBN 978-5-6047425-0-1. — WD Q115189432. | Красная книга Российской Федерации. Т. «Животные». — 2-ое издание. — М. : ФГБУ «ВНИИ Экология», 2021. — 1128 с. — (Красная книга Российской Федерации). — ISBN 978-5-6047425-0-1. — WD Q115189432. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|entity = Q114831437 |ref = Веракса, Веракса }} |
Веракса Н. Е. Познавательное развитие в дошкольном возрасте : учебное пособие / Н. Е. Веракса, А. Н. Веракса. — М. : МОЗАИКА-СИНТЕЗ, 2012. — 336 с. — ISBN 978-5-4315-0097-8. — WD Q114831437. | Веракса Н. Е. Познавательное развитие в дошкольном возрасте : учебное пособие / Н. Е. Веракса, А. Н. Веракса. — М. : МОЗАИКА-СИНТЕЗ, 2012. — 336 с. — ISBN 978-5-4315-0097-8. — WD Q114831437. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|entity = Q1768199 |ref = БРЭ }} |
Большая российская энциклопедия : в 35 т. : энциклопедия / Гл. ред.: Ю. С. Осипов. — М. : Большая российская энциклопедия, 2004—2017. — WD Q1768199. | Большая российская энциклопедия : в 35 т. : энциклопедия / Гл. ред.: Ю. С. Осипов. — М. : Большая российская энциклопедия, 2004—2017. — WD Q1768199. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|entity = Q115634662 |ref = Clement, Davis, Harris }} |
Clement P.[d] Finches and Sparrows : [англ.] / Illus.: A. Harris, J. Davis. — 1st edition. — 1993. — 21 November. — 500 p. — ISBN 978-0-691-03424-9. — WD Q115634662. | Clement P.[d] Finches and Sparrows : [англ.] / Illus.: A. Harris, J. Davis. — 1st edition. — 1993. — 21 November. — 500 p. — ISBN 978-0-691-03424-9. — WD Q115634662. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{Источник информации|Q24187606
|ref = Sutter, Saraswat, Driel }} |
An I. M. De Sutter. Antihistamines for the common cold : [англ.] / An I. M. De Sutter, A. Saraswat, Mieke van Driel // Cochrane Database of Systematic Reviews. — 2015. — 29 November. — ISSN 1469-493X, 1361-6137. — doi:10.1002/14651858.cd009345.pub2. — PMID 26615034. — WD Q24187606. | An I. M. De Sutter. Antihistamines for the common cold : [англ.] / An I. M. De Sutter, A. Saraswat, Mieke van Driel // Cochrane Database of Systematic Reviews. — 2015. — 29 November. — ISSN 1469-493X, 1361-6137. — doi:10.1002/14651858.cd009345.pub2. — PMID 26615034. — WD Q24187606. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|publishedInEntity = Q1768199 |topicEntity = Q58184 |ref = Наточин }} |
Наточин Ю. В. Нефрон : [арх. 15 июня 2022] // Большая российская энциклопедия : в 35 т. : энциклопедия / Гл. ред.: Ю. С. Осипов. — М. : Большая российская энциклопедия, 2017. | Наточин Ю. В. Нефрон : [арх. 15 июня 2022] // Большая российская энциклопедия : в 35 т. : энциклопедия / Гл. ред.: Ю. С. Осипов. — М. : Большая российская энциклопедия, 2017. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|publishedInEntity = Q5375741 |topicEntity = Q58184 |lastUpdate = 2022-08-22 |accessDate = 2022-10-23 |ref = Nephron, Britannica }} |
The Editors of Encyclopaedia Britannica. Nephron : [англ.] : [арх. 2 июня 2022] // Encyclopædia Britannica : online encyclopedia. — Дата обновления: 22 августа 2022. — Дата обращения: 23 октября 2022. | The Editors of Encyclopaedia Britannica. Nephron : [англ.] : [арх. 2 июня 2022] // Encyclopædia Britannica : online encyclopedia. — Дата обновления: 22 августа 2022. — Дата обращения: 23 октября 2022. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|authors = Ж. Н. Меренкова |title = Анемии при беременности |url = https://music.yandex.ru/album/10142231/track/70882375?activeTab=track-list |workType = профессиональный медицинский подкаст |publishedInEntity = Q4537983 |publisher = Специализированное издательство «Медицинская литература» |language = ru |date = 2020-09-04 |ref = Меренкова }} |
Меренкова Ж. Н. Анемии при беременности [аудиоконтент] : профессиональный медицинский подкаст // Яндекс Музыка. — Специализированное издательство «Медицинская литература», 2020. — 4 сентября. | Меренкова Ж. Н. Анемии при беременности [аудиоконтент] : профессиональный медицинский подкаст // Яндекс Музыка. — Специализированное издательство «Медицинская литература», 2020. — 4 сентября. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|title = Деятельность ВОЗ по научно-техническому анализу и прогнозированию в области здравоохранения |publisherEntity = Q7817 |id = 1m_4Y6pHmUw |publishedInEntity = Q866 |lang = ru |date = 2022-07-08 |accessDate = 2022-11-22 |ref = ВОЗ }} |
Деятельность ВОЗ по научно-техническому анализу и прогнозированию в области здравоохранения [видеозапись] // YouTube. — ВОЗ, 2022. — 8 июля. — Дата обращения: 22 ноября 2022. | Деятельность ВОЗ по научно-техническому анализу и прогнозированию в области здравоохранения [видеозапись] // YouTube. — ВОЗ, 2022. — 8 июля. — Дата обращения: 22 ноября 2022. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|entity = Q73118986 |ref = Casotti, Lindberg, Braun }} |
Casotti G. Functional morphology of the avian medullary cone : [англ.] : [арх. 17 марта 2022] / G. Casotti, K. K. Lindberg, E. J. Braun // American journal of physiology. Regulatory, integrative and comparative physiology[d]. — 2000. — Vol. 279, no. 5. — 1 November. — P. R1722—30. — ISSN 0363-6119, 1522-1490. — doi:10.1152/ajpregu.2000.279.5.r1722. — PMID 11049855. — WD Q73118986. | Casotti G. Functional morphology of the avian medullary cone : [англ.] : [арх. 17 марта 2022] / G. Casotti, K. K. Lindberg, E. J. Braun // American journal of physiology. Regulatory, integrative and comparative physiology[d]. — 2000. — Vol. 279, no. 5. — 1 November. — P. R1722—30. — ISSN 0363-6119, 1522-1490. — doi:10.1152/ajpregu.2000.279.5.r1722. — PMID 11049855. — WD Q73118986. | ||
{{#invoke:CiteGost|cite
|entity = Q92544321 |ref = Abdalla }} |
Abdalla M. A. Anatomical features in the kidney involved in water conservation through urine concentration in dromedaries (Camelus dromedarius) : [англ.] : [арх. 26 июля 2022] // Heliyon[d]. — 2020. — Vol. 6, no. 1. — 2 January. — Article e03139. — ISSN 2405-8440. — doi:10.1016/j.heliyon.2019.e03139. — PMID 31922050. — WD Q92544321. | Abdalla M. A. Anatomical features in the kidney involved in water conservation through urine concentration in dromedaries (Camelus dromedarius) : [англ.] : [арх. 26 июля 2022] // Heliyon[d]. — 2020. — Vol. 6, no. 1. — 2 January. — Article e03139. — ISSN 2405-8440. — doi:10.1016/j.heliyon.2019.e03139. — PMID 31922050. — WD Q92544321. | ||
{{#invoke:CiteGost|cite
|entity = Q59330138 |ref = Munn, Peters, Stern, et al. }} |
Systematic review or scoping review? Guidance for authors when choosing between a systematic or scoping review approach : [англ.] / Z. Munn, M. Peters, C. Stern [et al.] // BMC Medical Research Methodology. — 2018. — Vol. 18, no. 1. — 19 November. — P. 143. — ISSN 1471-2288. — doi:10.1186/s12874-018-0611-x. — PMID 30453902. — WD Q59330138. | Systematic review or scoping review? Guidance for authors when choosing between a systematic or scoping review approach : [англ.] / Z. Munn, M. Peters, C. Stern [et al.] // BMC Medical Research Methodology. — 2018. — Vol. 18, no. 1. — 19 November. — P. 143. — ISSN 1471-2288. — doi:10.1186/s12874-018-0611-x. — PMID 30453902. — WD Q59330138. |
Тест | Ожидаемое значение | Фактическое значение | Differs at | |
---|---|---|---|---|
{{#invoke:CiteGost|cite
|entity = Q115926218 |volumeTitle = Full text }} |
Lefever E. W. United Nations peacekeeping in the Congo: 1960-1964 : an analysis of political, executive and military control : [англ.]. In 4 vols. Vol. 2. Full text / E. W. Lefever, W. Joshua. — Washington : Brookings Institution, 1966. — 30 June. — 454 p. — OCLC 489825. — WD Q115926218. | Lefever E. W. United Nations peacekeeping in the Congo: 1960-1964 : an analysis of political, executive and military control : [англ.]. In 4 vols. Vol. 2. Full text / E. W. Lefever, W. Joshua. — Washington : Brookings Institution, 1966. — 30 June. — 454 p. — OCLC 489825. — WD Q115926218. |
См. такжеПравить
- CiteGost — модуль для форматирования информации об источнике, получающий информацию посредством модуля WDSource.
local p = {}
local wikidata = require('Модуль:WDCommon')
local wdLang = require('Модуль:WDLang')
local backend = require('Модуль:WDBackend')
local contentTypeEntities = { 'Q30070675', 'Q108676767', 'Q478798', 'Q60533375', 'Q11424', 'Q187947', 'Q2376293' }
local contributorComponentsMap = {
{
name = 'familyName',
property = 'P734',
max = 1,
isLocal = true,
},
{
name = 'givenName',
property = 'P735',
isLocal = true,
},
{
name = 'ancestorName',
property = 'P5056',
max = 1,
isLocal = true,
},
}
local publishedInOriginLang = {
name = 'publishedInOriginLang',
property = 'P407',
get = {
{
name = 'publishedInOriginLangCode',
property = 'P218',
max = 1,
elseGet = {
-- for ethnolects determine parent language
{
name = 'publishedInOriginLang',
property = 'P279',
overwrite = true,
max = 1,
get = {
{
name = 'publishedInOriginLangCode',
property = 'P218',
overwrite = true,
max = 1,
},
},
},
},
},
},
}
local publishedInMap = {
{
name = 'publishedIn',
getValue = wikidata.name,
},
{
name = 'publishedInSubtitle',
property = 'P1680',
filter = wikidata.base.tryFilterStatementsByLang,
},
{
name = 'edition',
property = 'P9767',
max = 1,
},
{
name = 'publishedInWorkType',
property = 'P31',
allowedEntities = { 'Q1404878', 'Q83790', 'Q2250844', 'Q13136', 'Q23622', 'Q5292', 'Q615699', 'Q5633421' },
},
{
name = 'publishedInEditionType',
property = 'P31',
allowedEntities = { 'Q3331189', 'Q1238720', 'Q571' },
},
{
name = 'publishedInWorkType',
property = 'P7937',
},
{
name = 'isScholarlyArticle',
property = 'P31',
mapEntity = { Q5633421 = 'Q13442814' },
},
{
name = 'publishedInAuthors',
properties = { 'P50', 'P2093' },
isArray = true,
get = contributorComponentsMap,
},
{
name = 'publishedInIllustrators',
property = 'P110',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'isLikeBook',
property = 'P31',
allowedEntities = { 'Q571', 'Q128093', 'Q5292' },
},
{
property = 'P1056',
get = {
{
name = 'contentType',
property = 'P4330',
allowedEntities = contentTypeEntities,
},
},
},
{
name = 'contentType',
property = 'P4330',
allowedEntities = contentTypeEntities,
},
{
name = 'publishedInOrigin',
property = 'P9745',
getValue = wikidata.name,
get = {
publishedInOriginLang
},
},
{
name = 'publishedInOrigin',
property = 'P629',
getValue = wikidata.name,
get = {
publishedInOriginLang
},
},
{
name = 'idType',
property = 'P1687',
max = 1,
get = {
{
name = 'urlMask',
property = 'P1630',
max = 1,
},
},
},
{
name = 'urlMask',
property = 'P4354',
max = 1,
},
{
name = 'publishedInTranslators',
property = 'P655',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'publishedInEditorInChief',
property = 'P5769',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'publishedInEditors',
property = 'P98',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'isbn',
property = 'P212',
match = true,
qualifiers = {
{
name = 'date',
property = 'P577',
max = 1,
},
{
name = 'location',
property = 'P291',
},
{
name = 'publisher',
property = 'P123',
max = 1,
},
{
name = 'pagesCount',
property = 'P1104',
defaultUnit = 'Q1069725',
max = 1,
},
},
elseGet = {
{
name = 'isbn',
property = 'P957',
qualifiers = {
{
name = 'date',
property = 'P577',
max = 1,
},
{
name = 'location',
property = 'P291',
},
{
name = 'publisher',
property = 'P123',
max = 1,
},
{
name = 'pagesCount',
property = 'P1104',
defaultUnit = 'Q1069725',
max = 1,
},
},
},
},
},
{
name = 'oclc',
property = 'P243',
},
{
name = 'date',
property = 'P577',
},
{
name = 'location',
property = 'P291',
},
{
name = 'publisher',
property = 'P123',
max = 1,
qualifiers = {
{
name = 'publisher',
property = 'P1932',
overwrite = true,
max = 1,
},
},
},
{
name = 'pagesCount',
property = 'P1104',
defaultUnit = 'Q1069725',
max = 1,
},
{
name = 'issn',
property = 'P236',
},
{
name = 'publishedInPartsCount',
property = 'P2635',
allowedUnits = { 'Q1238720' },
max = 1,
},
}
local workMap = {
{
name = 'detectedInfo',
property = 'P31',
isArray = true,
allowedEntities = { 'Q1404878', 'Q83790', 'Q2250844', 'Q13136', 'Q23622', 'Q5292', 'Q615699', 'Q5633421' },
},
{
name = 'detectedInfo',
property = 'P136',
isArray = true,
allowedEntities = { 'Q1404878', 'Q83790', 'Q2250844', 'Q13136', 'Q23622', 'Q5292', 'Q615699', 'Q5633421' },
},
}
local workVersionMap = {
{
name = 'isScholarlyArticle',
property = 'P31',
allowedEntities = { 'Q13442814' },
},
{
name = 'isVolume',
property = 'P31',
allowedEntities = { 'Q1238720' },
},
{
name = 'contentType',
property = 'P31',
allowedEntities = contentTypeEntities,
},
{
name = 'workType',
property = 'P31',
allowedEntities = { 'Q1404878', 'Q83790', 'Q2250844', 'Q13136', 'Q23622', 'Q5292', 'Q615699', 'Q5633421' },
},
{
name = 'workType',
property = 'P7937',
max = 1,
},
{
name = 'isbn',
property = 'P212',
match = true,
qualifiers = {
{
name = 'date',
property = 'P577',
max = 1,
},
{
name = 'location',
property = 'P291',
},
{
name = 'publisher',
property = 'P123',
max = 1,
qualifiers = {
{
name = 'publisher',
property = 'P1932',
overwrite = true,
max = 1,
},
},
},
{
name = 'pagesCount',
property = 'P1104',
defaultUnit = 'Q1069725',
max = 1,
},
},
elseGet = {
{
name = 'isbn',
property = 'P957',
qualifiers = {
{
name = 'date',
property = 'P577',
max = 1,
},
{
name = 'location',
property = 'P291',
},
{
name = 'publisher',
property = 'P123',
max = 1,
},
{
name = 'pagesCount',
property = 'P1104',
defaultUnit = 'Q1069725',
max = 1,
},
},
},
},
},
{
name = 'authors',
properties = { 'P50', 'P2093' },
isArray = true,
get = contributorComponentsMap,
},
{
name = 'illustrators',
property = 'P110',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'title',
getValue = wikidata.name,
},
{
name = 'subtitle',
property = 'P1680',
filter = wikidata.base.tryFilterStatementsByLang,
},
{
name = 'edition',
property = 'P9767',
max = 1,
},
{
name = 'info',
property = 'P1684',
has = {
{ property='P2868', value='Q116158574' },
},
isArray = true,
qualifiers = {
{
property = 'P6568',
overwriteEntity = true,
},
},
},
{
name = 'editors',
property = 'P98',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'P5769',
property = 'P98',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'editorInChief',
property = 'P5769',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'editors',
property = 'P98',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'translators',
property = 'P655',
isArray = true,
get = contributorComponentsMap,
},
{
name = 'volume',
property = 'P478',
qualifiers = {
{
name = 'partTitle',
property = 'P1476',
max = 1,
},
{
name = 'volumeTitle',
property = 'P1476',
max = 1,
},
},
},
{
name = 'issue',
property = 'P433',
},
{
name = 'date',
property = 'P577',
qualifiers = {
{
name = 'startDate',
property = 'P580',
max = 1,
},
{
name = 'endDate',
property = 'P582',
max = 1,
},
},
},
{
name = 'pages',
property = 'P304',
},
{
name = 'pagesCount',
property = 'P1104',
defaultUnit = 'Q1069725',
},
{
name = 'articleId',
property = 'P2322',
},
{
name = 'url',
property = 'P953',
max = 1,
qualifiers = {
{
name = 'archiveUrl',
property = 'P1065',
max = 1,
},
{
name = 'archiveDate',
property = 'P2960',
max = 1,
},
{
name = 'urlStatus',
property = 'P6954',
max = 1,
},
},
},
{
name = 'location',
property = 'P291',
},
{
name = 'publisher',
property = 'P123',
max = 1,
qualifiers = {
{
-- for unknown value
name = 'publisher',
property = 'P1932',
max = 1,
},
}
},
{
name = 'origin',
property = 'P629',
getValue = wikidata.name,
get = {
{
name = 'originLang',
property = 'P407',
get = {
{
name = 'langCode',
property = 'P218',
max = 1,
}
},
},
},
},
{
name = 'partsCount',
property = 'P2635',
max = 1,
},
{
name = 'dedicatedTo',
property = 'P825',
},
{
name = 'doi',
property = 'P356',
},
{
name = 'oclc',
property = 'P243',
},
{
name = 'pmid',
property = 'P698',
},
{
name = 'pmc',
property = 'P932',
get = {
{
name = 'urlMask',
entity = 'P932',
property = 'P1630',
max = 1,
isLocal = true,
},
},
},
{
name = 's2sic',
property = 'P8299',
},
{
name = 'publishedIn',
property = 'P1433',
getValue = wikidata.name,
max = 1,
qualifiers = {
-- probably, wrong way, different publications must have different items
{
name = 'volume',
property = 'P478',
},
{
name = 'issue',
property = 'P433',
},
{
name = 'date',
property = 'P577',
},
{
name = 'startDate',
property = 'P580',
max = 1,
},
{
name = 'endDate',
property = 'P582',
max = 1,
},
{
name = 'pages',
property = 'P304',
},
{
name = 'articleId',
property = 'P2322',
},
},
},
{
name = 'work',
property = 'P629',
max = 1,
},
{
name = 'publishedIn',
property = 'P361',
getValue = wikidata.name,
max = 1,
get = {
{
name = 'partsCount',
property = 'P2635',
allowedUnits = { 'Q1238720' },
max = 1,
},
},
},
{
name = 'series',
property = 'P179',
max = 1,
qualifiers = {
{
name = 'seriesIssue',
property = 'P433',
max = 1,
},
},
},
}
local topicMap = {
{
name = 'id',
propertyPath = { 'idType', 'entity' },
max = 1,
qualifiers = {
{
name = 'title',
property = 'P1810',
max = 1,
},
{
name = 'date',
property = 'P577',
max = 1,
},
{
name = 'archiveUrl',
property = 'P1065',
max = 1,
},
{
name = 'archiveDate',
property = 'P2960',
max = 1,
},
{
name = 'authors',
property = 'P2093',
isArray = true,
},
},
},
{
-- if P1810 id qualifier is not specified
name = 'title',
getValue = wikidata.name,
},
}
local alternativeUrl = {
{
name = 'id',
property = 'P675',
max = 1,
get = {
{
name = 'urlMask',
entity = 'P675',
property = 'P1630',
max = 1,
overwrite = true,
},
},
},
}
local function fetchUrl(f, source)
if source.url then
if source.urlStatus and source.urlStatus.entity == 'Q1193907' then
source.url = nil
else
return
end
end
local idTable = f:safeField(source, 'id')
if idTable.value and source.urlMask then
source.url = { value = source.urlMask.value:gsub('%$1', idTable.value) }
return
end
local pmcTable = f:safeField(source, 'pmc')
if pmcTable.value and pmcTable.components and pmcTable.components.urlMask then
source.url = {
value = pmcTable.components.urlMask.value:gsub('%$1', pmcTable.value)
}
return
end
end
local function getLangCode(source)
local langCode = source.langCode
if type(langCode) == 'table' then
langCode = langCode.value
end
return langCode
end
local function fetchLang(f, source)
local publishedInTable = source.publishedIn
local langMapItem = {
name = 'lang',
property = 'P407',
max = 1,
get = {
{
name = 'langCode',
property = 'P218',
max = 1,
},
},
}
if not source.langCode then
f:fetch(source, {
{
name = 'workVersion',
get = {
langMapItem,
{
name = 'publishedIn',
property = 'P1433',
getValue = wikidata.name,
max = 1,
get = {
langMapItem,
},
},
},
},
})
end
f:fetch(source, {
{
name = 'publishedIn',
get = {
{
name = 'publishedInLang',
property = 'P407',
max = 1,
get = {
{
name = 'publishedInLangCode',
property = 'P218',
max = 1,
elseGet = {
-- for ethnolects determine parent language
{
name = 'publishedInLang',
property = 'P279',
overwrite = true,
max = 1,
get = {
{
name = 'publishedInLangCode',
property = 'P218',
overwrite = true,
max = 1,
},
},
},
},
},
},
},
},
},
})
if not source.langCode then
if source.publishedInLang then
source.lang = source.publishedInLang
end
if source.publishedInLangCode then
source.langCode = source.publishedInLangCode
end
end
if not source.langCode then
f:ensureLang()
source.langCode = { value = f.lang }
else
f.lang = getLangCode(source)
end
if not source.lang then
source.lang = {
entity = wdLang.langEntity(f.lang),
}
end
-- publishedIn field need to be empty to get its qualifiers later
if publishedInTable == nil then
source.publishedIn = nil
end
end
-- Remove all duplicates from inscriptions of a book
function removeInfoDuplicates(source)
if not source.info then
return
end
for _, infoItem in ipairs(source.info) do
for i, detectedItem in ipairs(source.detectedInfo) do
if detectedItem.entity == infoItem.entity then
table.remove(source.detectedInfo, i)
end
end
end
end
function p.fetch(source)
f = backend.new(getLangCode(source))
fetchLang(f, source)
f:assertLang()
f:fetch(source, {
{
name = 'workVersion',
get = workVersionMap,
},
{
name = 'publishedIn',
get = publishedInMap,
},
{
name = 'topic',
get = topicMap,
},
{
name = 'work',
get = workMap,
},
{
name = 'workVersion',
get = alternativeUrl,
},
})
local titleTable = f:safeField(source, 'title')
if titleTable.value then
local workTable = f:safeField(source, 'workVersion')
titleTable.entity = workTable.entity
end
removeInfoDuplicates(source)
fetchUrl(f, source)
return source
end
return p