Методы
Модуль «Викиданные» содержит следующие методы, которые позволяют вызывающему скрипту получить значение любого свойства из Викиданных, указав идентификатор свойства в качестве первого параметра:
getValue
: Возвращает значения, связанные с wiki, если применимо. Все остальные значения будут выводиться аналогично{{#property:}}
, за исключением того, что если существуют значения с предпочтительным рангом, то возвращаются только они. В отличиеformatStatements
от w: ru: Модуль: Wikidata ,getValue
пока не собирает никаких ссылок (см. W: en: Module talk: Wikidata / Archive 1 # Почему ссылки из Wikidata удаляются? ).getRawValue
: Возвращает значения несвязанных свойств и числа с разделителем тысяч. Он также возвращает простое числовое значение свойства, которое является количеством. Все остальные значения будут выводиться аналогично{{#property:}}
, включая нормальные значения, даже если существуют предпочтительные значения.getDateValue
: Специальный метод для возврата отформатированных дат. Формат даты по умолчанию - [день месяц год]; необязательный третий параметр может быть добавлен для других форматов даты: для [месяц, день, год] добавьте «mdy»; для [месяц год] добавить «мой»; только для года добавьте "y". Дополнительный необязательный параметр, который должен быть четвертым, например «BCE», может быть добавлен для отмены значения по умолчанию «BC», которое имеет суффикс для дат BC.getImages
: Возвращает все изображения определенного свойства, например изображение (P18), изображение генного атласа (P692) и т. Д. Параметры| propertyID | value / FETCH_WIKIDATA / nil | separator (default=space) | size (default=220px)
. Возвращенный текст будет в формате [[File: Filename | size]] для каждого изображения с выбираемым размером и разделителем (который может быть HTML). Если предоставлено свойство, отличное от типа commonsMedia, оно вернет пустой текст.getUnits
Он принимает свойство propertyID, которое представляет собой количество, в качестве первого параметра и возвращает имя единиц, которые свойство использует на текущей странице. Он возвращает пустое значение, если свойство не является количественным типом или если значение не задано. Второй параметр может использоваться для отмены выборки из Викиданных, если это что-то иное, кроме «FETCH_WIKIDATA».getUnitID
Он принимает свойство propertyID, которое представляет собой количество, в качестве первого параметра и возвращает QID единиц, которые свойство использует на текущей странице. Он возвращает пустое значение, если свойство не является количественным типом или если значение не задано. Второй параметр может использоваться для отмены выборки из Викиданных, если это что-то иное, кроме «FETCH_WIKIDATA».
Значения квалификатора Викиданных (если они есть) можно получить следующими способами:
getQualifierValue
: возвращает только значения, связанные с wiki, если применимо.getRawQualifierValue
: возвращает несвязанные значенияgetQualifierDateValue
: возвращает отформатированные даты
Если свойство не определено в Викиданных для статьи, которая вызывает этот код, возвращается пустая строка ("").
Другие методы:
pageId
: возвращает идентификатор Wikidata (Q…) текущей страницы или ничего, если страница не подключена к Wikidata. Чтобы получить идентификатор Викиданных другой страницы, используйте {{#invoke: ResolveEntityId | страница }} .getTAValue
: получает значения TA98 (Terminologia Anatomica, первое издание 1998 г.) для свойства P1323. Он не принимает никаких параметров и строит свой вывод в виде списка, в котором каждое значение связано с внешним ресурсом. Это образец для написания вызовов, которые должны возвращать внешние ссылки.ViewSomething
: получает что-нибудь из структурированных данных, включая метки, описания, ссылки и межвики-ссылки. См. [1]getSiteLink
: получает имя страницы, указанное в аргументе wiki (например, «enwikiquote» для английской Wikiquote, «arwiki» для арабской Wikipedia).Dump
:{{#invoke:Wikidata|Dump|claims}}
шпионит за структурированными данными. Он использует те же аргументы, что и ViewSomething. Попробуйте это с предварительным просмотром, только чтобы увидеть результаты. Это очень помогает вам в разработке сценариев Lua, которые обращаются к данным. Если используется без аргументов, он сбрасывает все, включая метки, описания, ссылки и межвики-ссылки. Есть шаблон оболочки, см. {{ Дамп }}.getImageLegend
: возвращает легенду изображения (изображение - свойство P18; легенда изображения - свойство P2096).- Звоните как
{{#invoke:Wikidata |getImageLegend |
| lang= |id= }} - Возвращает ПАРАМЕТР, если он не равен «FETCH_WIKIDATA», из QID элемента (дорогостоящий вызов). Если QID опущен или пуст, используется текущая статья (не дорогой вызов). Если lang не указан, используется местный язык вики, в противном случае используется предоставленный код языка ISO-639.
- Метка возвращается из первого изображения с «предпочтительным» рангом; или от первого изображения с «нормальным» рангом, если ни одно изображение не имеет предпочтительного ранга.
- Звоните как
getValueShortName
: возвращает те же данные, что и getValue, но использует короткое имя свойства в качестве метки, если доступно. Это позволяет конвейерным ссылкам использовать более короткие метки там, где это необходимо. Если для элемента не задано короткое имя, используется обычная метка.
Произвольный доступ
С 16 сентября 2015 г. появилась возможность получать данные из других статей, используя их QID. Следующий звонок:
{{#invoke:Wikidata|getValueFromID|
| |FETCH_WIKIDATA}}
будет делать то же самое, что и getValue, но принимает дополнительный параметр, который представляет собой QID элемента Викиданных, из которого вы хотите получить значение свойства. Например:
{{#invoke:Wikidata|getValueFromID|Q151973|P26|FETCH_WIKIDATA}}
получит список связанных значений для «супруга» (P26) из «Ричарда Бертона» (Q151973) из любой точки английской Википедии.
Это означает, что среды тестирования могут быть настроены в пользовательском пространстве, но помните, что эти вызовы относятся к категории дорогостоящих , поэтому, пожалуйста, используйте их как можно реже.
Параметры
- Для обобщенного случая (getValue) предоставляются два безымянных параметра. Первый - это идентификатор свойства, которое необходимо получить (например, P19 для места рождения или P26 для супруга). Вторая может быть нулевой, «FETCH_WIKIDATA» или любой другой строкой, которая становится возвращаемым значением.
- Для обобщенного несвязанного случая (getRawValue) предоставляются два безымянных параметра. Первый - это идентификатор свойства, которое необходимо получить (например, P21 для пола). Вторая может быть нулевой, «FETCH_WIKIDATA» или любой другой строкой, которая становится возвращаемым значением.
- Для случая обобщенной даты (getDateValue) предоставляются три безымянных параметра. Первый - это идентификатор свойства, которое необходимо получить (например, P569 для даты рождения). Вторая может быть нулевой, «FETCH_WIKIDATA» или любой другой строкой, которая становится возвращаемым значением. Третий - это формат, в котором должна возвращаться дата: dmy, mdy, my или y.
Обратите внимание, что строчные параметры больше не поддерживаются вызовом викибазы: p123 , поэтому, пожалуйста, убедитесь, что в случае возникновения проблем используются прописные буквы, такие как P123.
Применение
Пример: супруга (P26)
{{#invoke:Wikidata|getValue|P26|}}
= ничего не возвращает, поэтому подавляет отображение супруга в информационном окне{{#invoke:Wikidata|getValue|P26|FETCH_WIKIDATA}}
= возвращает связанные значения свойства P26 (супруга), хранящиеся в викиданных для соответствующей статьи (например, для статьи Билла Клинтона возвращается Хиллари Клинтон ){{#invoke:Wikidata|getValue|P26|[[Hillary Rodham Clinton]]}}
= возвращает Хиллари Родэм Клинтон , позволяя информационному окну использовать локальное значение, а не значение, хранящееся в Викиданных.
Пример в шаблоне инфобокса
Внутри определения информационного окна он может называться так:
| data55 = {{#invoke:Wikidata|getValue|P26|{{{spouse|FETCH_WIKIDATA}}} }}
что заставляет информационное окно:
- не отображать супруга, если параметр информационного окна
|spouse
установлен пустым (как"| spouse ="
} - отображать связанные значения из Викиданных, если параметр информационного поля
|spouse
не указан - отобразить параметр локального информационного окна,
|spouse
если он указан (например"|spouse = Hillary Rodham Clinton"
)
При желании его можно было бы назвать так:
| data55 = {{#invoke:Wikidata|getValue|P26|{{{spouse|}}} }}
что заставляет информационное окно:
- не отображать супруга, если параметр информационного окна
|spouse
установлен пустым (как"| spouse ="
} - не отображать супруга, если
|spouse
не указан параметр инфобокса - отобразить параметр локального информационного окна,
|spouse
если он указан (например"|spouse = Hillary Rodham Clinton"
) - отображать связанные значения из Викиданных, если параметр информационного окна локально установлен на FETCH_WIKIDATA
См. Модуль: WikidataIB для модификации, которая позволяет вносить поля для каждой статьи в черный список, чтобы они никогда не отображались. Он также позволяет редактору указывать для каждой статьи, какие поля могут автоматически выбираться из Викиданных, когда предоставляется локальный параметр; значение по умолчанию - none, что позволяет изменять информационное окно для приема Викиданных без каких-либо изменений в статьях, использующих информационное окно, до тех пор, пока эта функция не будет включена в статье.
Пример: место рождения
Это работает точно так же, как и приведенные выше вызовы:
{{#invoke:Wikidata|getValue|P19|}}
= ничего не возвращает, поэтому подавляет отображение места рождения в информационном окне{{#invoke:Wikidata|getValue|P19|FETCH_WIKIDATA}}
= возвращает связанные значения свойства P19 (место рождения), хранящиеся в викиданных для соответствующей статьи (например, для статьи Билла Клинтона возвращается Хоуп, Арканзас ){{#invoke:Wikidata|getValue|P19|[[Hope, Arkansas|Hope]]}}
= возвращает Hope , позволяя информационному окну использовать локальное значение, а не значение, хранящееся в Викиданных.
Пример: пол
Мы не хотим связывать возвращаемое значение, поэтому используйте:
- -
{{#invoke:Wikidata|getRawValue|P21|FETCH_WIKIDATA}}
Пример: дата рождения
Если нам нужна дата рождения в формате dmy, мы используем:
- -
{{#invoke:Wikidata|getDateValue|P569|FETCH_WIKIDATA|dmy}}
Если нам нужна дата рождения в формате mdy, мы используем:
- -
{{#invoke:Wikidata|getDateValue|P569|FETCH_WIKIDATA|mdy}}
Если нам нужен год рождения, мы используем:
- -
{{#invoke:Wikidata|getDateValue|P569|FETCH_WIKIDATA|y}}
Если нам нужен год рождения, который может быть BC, но должен читаться как «BCE», мы используем:
- -
{{#invoke:Wikidata|getDateValue|P569|FETCH_WIKIDATA|y|BCE}}
Пример: ссылка на элемент Викиданных
Используйте следующий код, чтобы просто получить Q-ID:
- -
{{#invoke:Wikidata|pageId}}
При связывании с Викиданными использовалась обычная разметка Wiki:
- -
[[d:{{#invoke:Wikidata|pageId}}|Name of Link]]
Пример: ссылка на другую вики-страницу
Используйте подобный код для ссылки на другую вики. Английский Wikivoyage в примере:
- -
[[voy:{{#invoke:Wikidata|getSiteLink|enwikivoyage}}|Name of Link]]
Тестирование
Тестирование супруга
Скопируйте и вставьте следующее в любую статью и просмотрите ее (пожалуйста, не сохраняйте!):
* - {{#invoke: Wikidata | getValue | P26 |}} * - {{#invoke: Wikidata | getValue | P26 | FETCH_WIKIDATA}} * - {{#invoke: Wikidata | getValue | P26 | [[Хиллари Родэм Клинтон]] }}
В Билле Клинтоне вы должны получить:
В Бараке Обаме вы должны получить:
В Ричарде Бертоне вы должны получить:
- -
- - Элизабет Тейлор , Салли Бертон , Сибил Кристофер , Сьюзи Миллер , Элизабет Тейлор
- - Хиллари Родэм Клинтон
В Franz Kafka вы должны получить:
Тестирование места рождения
Скопируйте и вставьте следующее в любую статью и просмотрите ее (пожалуйста, не сохраняйте!):
* - {{#invoke: Wikidata | getValue | P19 |}} * - {{#invoke: Wikidata | getValue | P19 | FETCH_WIKIDATA}} * - {{#invoke: Wikidata | getValue | P19 | [[Ньюпорт]] }}
Попробуйте Уильяма Эллери и убедитесь, что вызов Викиданных правильно устраняет неоднозначность.
Тестирование getValue, getRawValue и getDateValue
Скопируйте и вставьте следующее в любую статью и просмотрите ее (пожалуйста, не сохраняйте!):
* - {{#invoke: Wikidata | getValue | P19 | FETCH_WIKIDATA}} * - {{#invoke: Wikidata | getValue | P26 | FETCH_WIKIDATA}} * - {{#invoke: Wikidata | getValue | P27 | FETCH_WIKIDATA}} * - {{#invoke: Wikidata | getValue | P140 | FETCH_WIKIDATA}} * - {{#invoke: Wikidata | getRawValue | P21 | FETCH_WIKIDATA}} * - {{#invoke: Wikidata | getDateValue | P569 | FETCH_WIKIDATA | dmy}} * - {{#invoke: Wikidata | getDateValue | P569 | FETCH_WIKIDATA | mdy}} * - {{#invoke: Wikidata | getDateValue | P569 | FETCH_WIKIDATA | y}}
Это должно вернуть значения Викиданных для места рождения, супруга, гражданства, религии, пола, даты рождения (дважды) и года рождения, если они существуют. Dob сначала находится в формате dmy, а затем в формате mdy.
Даты тестирования BC / BCE
Скопируйте и вставьте следующее в короткий раздел статьи, например Horace # См. Также и просмотрите его (пожалуйста, не сохраняйте!):
* - {{#invoke: Wikidata | getDateValue | P569 | FETCH_WIKIDATA | y}} * - {{#invoke: Wikidata | getDateValue | P569 | FETCH_WIKIDATA | y | BCE}}
Это должно вернуть 65 г. до н.э. и 65 г. до н.э. соответственно.
Смотрите также
- Модуль: WikidataIB , для обработки Викиданных в информационных ящиках.
- vim: установить noexpandtab ft = lua ts = 4 sw = 4:require ( 'Модуль: без глобальных переменных' )местный p = {}локальная отладка = ложь-------------------------------------------------- ----------------------------- локальные переменные и функции модуляместная вики ={langcode = mw . язык . getContentLanguage (). код}- интернационализацияместный i18n ={[ "ошибки" ] ={[ "property-not-found" ] = "Свойство не найдено." ,[ "entity-not-found" ] = "Объект Викиданных не найден." ,[ "unknown-Claim-type" ] = "Неизвестный тип утверждения." ,[ "unknown-entity-type" ] = "Неизвестный тип объекта." ,[ "qualifier-not-found" ] = "Квалификатор не найден". ,[ "site-not-found" ] = "Проект Викимедиа не найден." ,[ "unknown-datetime-format" ] = "Неизвестный формат даты и времени." ,[ "local-article-not-found" ] = "Статья еще не доступна в этой вики."},[ "datetime" ] ={- $ 1 - это фактическое число.[ 0 ] = "$ 1 миллиард лет" , - точность: миллиард лет[ 1 ] = "100 миллионов лет" , - точность: сто миллионов лет.[ 2 ] = "10 миллионов лет" , - точность: десять миллионов лет.[ 3 ] = "1 миллион лет" , - точность: миллион лет[ 4 ] = "100 000 лет" , - точность: сто тысяч лет.[ 5 ] = "$ 10 000 лет" , - точность: десять тысяч лет[ 6 ] = "1 тысячелетие" , - точность: тысячелетие[ 7 ] = "$ 1 век" , - точность: век[ 8 ] = "$ 1 с" , - точность: декада- следующие используют формат функции парсера #time[ 9 ] = "Y" , - точность: год,[ 10 ] = "F Y" , - точность: месяц[ 11 ] = "F j, Y" , - точность: день[ 12 ] = "F j, Y ga" , - точность: час[ 13 ] = "F j, Y g: ia" , - точность: минуты[ 14 ] = "F j, Y g: i: sa" , - точность: секунда[ "beforenow" ] = "$ 1 BCE" , - как форматировать отрицательные числа для точности от 0 до 5[ "afternow" ] = "$ 1 CE" , - как форматировать положительные числа для точности от 0 до 5[ "bc" ] = '$ 1 "BCE"' , - как печатать отрицательные годы[ "ad" ] = "$ 1" , - как печатать положительные годы- следующие данные относятся к функциям getDateValue () и getQualifierDateValue ()[ "default-format" ] = "dmy" , - значение по умолчанию # 3 (getDateValue) или- Аргумент # 4 (getQualifierDateValue)[ "default-addon" ] = "BC" , - значение по умолчанию # 4 (getDateValue) или- Аргумент # 5 (getQualifierDateValue)[ "prefix-addon" ] = false , - установите значение true, для языков поставьте "BC" перед- строка даты и времени; или аддон будет иметь суффикс[ "addon-sep" ] = "" , - разделитель между строкой даты и времени и дополнением (или обратным)[ "format" ] = - варианты 3-го аргумента{[ "mdy" ] = "F j, Y" ,[ "my" ] = "F Y" ,[ "y" ] = "Y" ,[ "dmy" ] = "j F Y" ,[ "ymd" ] = "Ymd" ,[ "ym" ] = "Ym"}},[ "monolingualtext" ] = '% text ' ,[ "warnDump" ] = "[[Категория: Вызывается функция 'Dump' из модуля Wikidata]]" ,[ "порядковый номер" ] ={[ 1 ] = "st" ,[ 2 ] = "nd" ,[ 3 ] = "rd" ,[ "по умолчанию" ] = "th"}}если вики . langcode ~ = "en" тогда--require ("Модуль: i18n"). loadI18n ("Модуль: Викиданные / i18n", i18n)- идея из [[: w: Module: Wd]]локальный module_title ; если ... == ноль, тоmodule_title = mw . getCurrentFrame (): getTitle ()ещеmodule_title = ...конецrequire ( 'Модуль: i18n' ). loadI18n ( название_модуля .. '/ i18n' , i18n )конец- эта функция должна быть интернационализирована вместе с приведенным выше:- принимает количественное число как число и возвращает порядковый номер в виде строки- нам нужно три исключения на английском для 1-го, 2-го, 3-го, 21-го, ... 31-го и т. д.локальная функция makeOrdinal ( cardinal )местный ordsuffix = i18n . порядковый . По умолчаниюесли кардинал % 10 == 1, тоordsuffix = i18n . порядковый [ 1 ]иначе, если кардинал % 10 == 2, тогдаordsuffix = i18n . порядковый [ 2 ]иначе, если кардинал % 10 == 3, тогдаordsuffix = i18n . порядковый [ 3 ]конец- В английском, 1, 21, 31 и т. Д. Используют st, а 11, 111 и т. Д. Используют th.- аналогично для 12 и 13 и т. д.если ( кардинальный % 100 == 11 ) или ( кардинальный % 100 == 12 ) или ( кардинальный % 100 == 13 ), тоordsuffix = i18n . порядковый . По умолчаниюконецreturn tostring ( cardinal ) .. ordsuffixконецлокальная функция printError ( код )return '' .. ( i18n . errors [ код ] или код ) .. ''конецлокальная функция parseDateFormat ( f , timestamp , addon , prefix_addon , addon_sep ) местный год_суффиксместный tstr = ""локальный lang_obj = mw . язык . новый ( wiki . langcode )местные f_parts = mw . текст . split ( f , 'Y' , истина )для IDX , f_part в пар ( f_parts ) делатьyear_suffix = ''если string.match ( f_part , "x [mijkot] $" ), то- для негрегорианского годаf_part = f_part .. 'Y'elseif idx < # f_parts тогда- убрать ведущие нули в годуyear_suffix = lang_obj : formatDate ( 'Y' , отметка времени )год_суффикс = строка.gsub ( суффикс_год ; '^ 0 +' , '' , 1 )конецtstr = tstr .. lang_obj : formatDate ( f_part , timestamp ) .. year_suffixконецесли addon ~ = "" и prefix_addon, товернуть аддон .. addon_sep .. tstrelseif addon ~ = "" тогдавернуть tstr .. addon_sep .. addonещевернуть tstrконецконецлокальная функция parseDateValue ( timestamp , date_format , date_addon )local prefix_addon = i18n [ "datetime" ] [ "префикс-аддон" ]local addon_sep = i18n [ "datetime" ] [ "addon-sep" ]локальный аддон = ""- проверка на отрицательную датуесли string.sub ( timestamp , 1 , 1 ) == '-' тогдаtimestamp = '+' .. string.sub ( отметка времени , 2 )addon = date_addonконецlocal _date_format = i18n [ "datetime" ] [ "format" ] [ date_format ]если _date_format ~ = nil, товернуть parseDateFormat ( _date_format , timestamp , addon , prefix_addon , addon_sep )ещеreturn printError ( "неизвестный формат даты и времени" )конецконец- Эта локальная функция объединяет обработку parseDateValue {} год / месяц / день / до н.э. / до н.э.- с обработкой тысячелетия / века / десятилетия formatDate ()локальная функция parseDateFull ( отметка времени , точность , date_format , date_addon )local prefix_addon = i18n [ "datetime" ] [ "префикс-аддон" ]local addon_sep = i18n [ "datetime" ] [ "addon-sep" ]локальный аддон = ""- проверка на отрицательную датуесли string.sub ( timestamp , 1 , 1 ) == '-' тогдаtimestamp = '+' .. string.sub ( отметка времени , 2 )addon = date_addonконец- получить следующие четыре символа после + (во всех случаях должен быть год)- хорошо, это грязно, но давайте сначала поработаемlocal intyear = tonumber ( string.sub ( временная метка , 2 , 5 ))если intyear == 0 и precision <= 9, товернуться ""конец- точность 10000 лет и болееесли точность <= 5, томестный коэффициент = 10 ^ (( 5 - точность ) + 4 )локальный y2 = math.ceil ( math.abs ( intyear ) / factor )местный родственник = mw . ustring . gsub ( i18n . datetime [ точность ], «$ 1» , tostring ( y2 ))если аддон ~ = "" тогда- отрицательная датаотносительный = mw . ustring . gsub ( i18n . datetime . beforenow , «$ 1» , относительный )ещеотносительный = mw . ustring . gsub ( i18n . datetime . afternow , «$ 1» , относительный )конецвернуться родственникконец- точность - десятилетия (8), века (7) и тысячелетия (6)местная эпоха , картаесли точность == 6, тоcard = math.floor (( intyear - 1 ) / 1000 ) + 1эра = мв . ustring . gsub ( i18n . datetime [ 6 ], «$ 1» , makeOrdinal ( карточка ))конецесли точность == 7, тоcard = math.floor (( год - 1 ) / 100 ) + 1эра = мв . ustring . gsub ( i18n . datetime [ 7 ], "$ 1" , makeOrdinal ( карточка ))конецесли точность == 8, тоэра = мв . ustring . gsub ( i18n . datetime [ 8 ], «$ 1» , tostring ( math.floor ( math.abs ( intyear ) / 10 ) * 10 ))конецесли эпоха, тоесли аддон ~ = "" тогдаэра = мв . ustring . gsub ( mw . ustring . gsub ( i18n . datetime . bc , '"' , " " ), " $ 1 " , эра )ещеэра = мв . ustring . gsub ( mw . ustring . gsub ( i18n . datetime . ad , '"' , " " ), " $ 1 " , эра )конец эпоха возвращенияконецlocal _date_format = i18n [ "datetime" ] [ "format" ] [ date_format ]если _date_format ~ = nil, то- проверка точности - год и переопределение предоставленного date_formatесли точность == 9, то_date_format = i18n [ "datetime" ] [ 9 ]конецвернуть parseDateFormat ( _date_format , timestamp , addon , prefix_addon , addon_sep )ещеreturn printError ( "неизвестный формат даты и времени" )конецконец- поля "qualifiers" и "snaks" имеют соответствующие поля "qualifiers-order" и "snaks-order"- используйте их как второй параметр и эту функцию вместо встроенной функции "пар".- перебрать все квалификаторы и снаки в намеченном порядке.локальная функция orderspairs ( массив , порядок )если не порядок, то верните пары ( массив ) конец- вернуть функцию итератораместный я = 0 функция возврата ()я = я + 1если порядок [ i ], то порядок возврата [ i ], массив [ порядок [ i ]]конецконецконец- точность: 0 - миллиард лет, 1 - сто миллионов лет, ..., 6 - тысячелетия, 7 - век, 8 - декада, 9 - год, 10 - месяц, 11 - день, 12 - час, 13 - минута , 14 - второйлокальная функция normalizeDate ( дата )дата = мв . текст . обрезать ( дата , "+" )- год выпискиместный годstr = mw . ustring . совпадение ( дата , "^ \ -?% d +" )местный год = ToNumber ( yearstr )- удалить ведущие нули годавернуться год .. МВТ . ustring . sub ( date , # yearstr + 1 ), годконецлокальная функция formatDate ( дата , точность , часовой пояс )precision = precision или 11местная дата , год = normalizeDate ( дата )если год == 0 и точность <= 9 , то вернуть «» конец- точность 10000 лет и болееесли точность <= 5, томестный коэффициент = 10 ^ (( 5 - точность ) + 4 )локальный y2 = math.ceil ( math.abs ( год ) / фактор )местный родственник = mw . ustring . gsub ( i18n . datetime [ точность ], «$ 1» , tostring ( y2 ))если год < 0, тоотносительный = mw . ustring . gsub ( i18n . datetime . beforenow , «$ 1» , относительный )ещеотносительный = mw . ustring . gsub ( i18n . datetime . afternow , «$ 1» , относительный )конецвернуться родственникконец- точность - это десятилетия, века и тысячелетияместная эпохаесли точность == 6, то эра = mw . ustring . gsub ( i18n . datetime [ 6 ], "$ 1" , tostring ( math.floor (( math.abs ( год ) - 1 ) / 1000 ) + 1 )) endесли точность == 7, то эра = mw . ustring . gsub ( i18n . datetime [ 7 ], "$ 1" , tostring ( math.floor (( math.abs ( год ) - 1 ) / 100 ) + 1 )) endесли точность == 8, то эра = mw . ustring . gsub ( i18n . datetime [ 8 ], "$ 1" , tostring ( math.floor ( math.abs ( год ) / 10 ) * 10 )) endесли эпоха, тоесли год < 0, то эра = mw . ustring . gsub ( mw . ustring . gsub ( i18n . datetime . bc , '"' , " " ), " $ 1 " , эра )иначе, если год > 0, то эра = mw . ustring . gsub ( mw . ustring . gsub ( i18n . datetime . ad , '"' , " " ), " $ 1 " , era ) конец эпоха возвращенияконец- точность годесли точность == 9, товозвращение годаконец- точность меньше летесли точность > 9, то- [[следующий код заменяет суффикс UTC на указанный отрицательный часовой пояс, чтобы преобразовать глобальное время в заданное местное время часовой пояс = номер (часовой пояс) если часовой пояс и часовой пояс ~ = 0, то часовой пояс = -timezone timezone = string.format ("%. 2d% .2d", часовой пояс / 60, часовой пояс% 60) если часовой пояс [1] ~ = '-' тогда часовой пояс = "+" .. конец часового пояса date = mw.text.trim (date, "Z") .. "" .. часовой пояс конец]] -локальный формат str = i18n . дата и время [ точность ]если год == 0, то formatstr = mw . ustring . gsub ( formatstr , i18n . datetime [ 9 ], "" )иначе, если год < 0, то- Формат MediawikiDate не поддерживает отрицательные годыдата = мв . ustring . sub ( дата , 2 )formatstr = mw . ustring . gsub ( formatstr , i18n . datetime [ 9 ], mw . ustring . gsub ( i18n . datetime . bc , "$ 1" , i18n . datetime [ 9 ]))elseif year > 0 и i18n . дата и время . ad ~ = "$ 1", затемformatstr = mw . ustring . gsub ( formatstr , i18n . datetime [ 9 ], mw . ustring . gsub ( i18n . datetime . ad , "$ 1" , i18n . datetime [ 9 ]))конецвернуть мв . язык . новый ( wiki . langcode ): formatDate ( formatstr , date )конецконецлокальная функция printDatavalueEntity ( данные , параметр )- поля данных: тип объекта [строка], числовой идентификатор [целое число, идентификатор Викиданных]местный идентификаторесли data [ "entity-type" ] == "item", то id = "Q" .. data [ "numeric-id" ]elseif data [ "entity-type" ] == "property" then id = "P" .. data [ "numeric-id" ]иначе вернуть printError ( "неизвестный-тип-сущности" )конецесли параметр, тоесли параметр == "ссылка", тоlocal linkTarget = mw . викибаза . getSitelink ( идентификатор )local linkName = mw . викибаза . getLabel ( идентификатор )если linkTarget, то- если есть ссылка на статью из локальной Википедии с помощью метки или заголовка статьиreturn "[[" .. linkTarget .. "|" .. ( linkName или linkTarget ) .. "]]"еще- если нет локальной статьи Википедии, выведите метку или ссылку на объект Викиданных, чтобы пользователь мог ввести правильную меткуесли linkName, то вернуть linkName else return "[[: d:" .. id .. "|" .. id .. "]]" конецконецещевернуть данные [ параметр ]конецещевернуть мв . викибаза . getLabel ( id ) или idконецконецлокальная функция printDatavalueTime ( данные , параметр )- поля данных: время [время ISO 8601], часовой пояс [int в минутах], до [int], после [int], precision [int], calendarmodel [URI викиданных]- точность: 0 - миллиард лет, 1 - сто миллионов лет, ..., 6 - тысячелетия, 7 - век, 8 - декада, 9 - год, 10 - месяц, 11 - день, 12 - час, 13 - минута , 14 - второй- calendarmodel: например, http://www.wikidata.org/entity/Q1985727 для пролептического григорианского календаря или http://www.wikidata.org/wiki/Q11184 для юлианского календаря]если параметр, тоесли параметр == "calendarmodel", то данные . calendarmodel = mw . ustring . match ( data . calendarmodel , "Q% d +" ) - извлечь идентификатор объекта из URI календарной моделиelseif параметр == "время" затем данные . время = normalizeDate ( дата . время ) конецвернуть данные [ параметр ]ещеreturn formatDate ( данные . время , данные . точность , данные . часовой пояс )конецконецлокальная функция printDatavalueMonolingualText ( данные , параметр )- поля данных: язык [строка], текст [строка]если параметр, товернуть данные [ параметр ]ещелокальный результат = mw . ustring . gsub ( mw . ustring . gsub ( i18n . monolingualtext , "%% language" , data [ "language" ]), "%% text" , data [ "text" ])вернуть результатконецконецлокальная функция findClaims ( объект , свойство )если не собственность или не объект или не mw . викибаза . getBestStatements ( entity , property ) [ 1 ], затем вернуть endесли мв . ustring . match ( свойство , "^ P% d + $" ), затем- если свойство задано идентификатором (P ..), доступ к списку заявок по этому идентификаторувернуть мв . викибаза . getBestStatements ( сущность , свойство )ещесвойство = mw . викибаза . resolvePropertyId ( свойство )если не свойство, то верните конецвернуть мв . викибаза . getBestStatements ( сущность , свойство )конецконецлокальная функция getSnakValue ( змейка , параметр )если змейка . snaktype == "значение" тогда- вызвать соответствующий парсер змейесли змейка . значение данных . введите == "строка", затем верните змейку . значение данных . значениеelseif snak . значение данных . введите == "глобускоордината", затем верните printDatavalueCoordinate ( snak . datavalue . value , параметр )elseif snak . значение данных . введите == "количество", затем верните printDatavalueQuantity ( snak . datvalue . value , параметр )elseif snak . значение данных . введите == "время", затем верните printDatavalueTime ( snak . datavalue . value , параметр )elseif snak . значение данных . введите == "wikibase-entityid", затем верните printDatavalueEntity ( snak . datavalue . value , параметр )elseif snak . значение данных . введите == " monolingualtext ", затем верните printDatavalueMonolingualText ( snak . datvalue . value , параметр )конецконецвернуть мв . викибаза . renderSnak ( змейка )конецлокальная функция getQualifierSnak ( заявка , qualifierId )- «змейка» - это терминология Викиданных для типизированной пары ключ / значение.- претензия состоит из основной змеи, содержащей основную информацию этой претензии,- а также список змейок атрибутов и список змейков ссылокесли qualifierId тогда- поиск по атрибуту snak с заданным квалификатором в качестве ключаесли претензии . квалификаторы тогдаместный квалификатор = заявка . квалификаторы [ qualifierId ]если квалификатор, то верните квалификатор [ 1 ] конецконецreturn nil , printError ( "квалификатор не найден" )еще- иначе вернуть основную змейкувозврат претензии [ 1 ]. гротконецконецлокальная функция getValueOfClaim ( заявка , qualifierId , параметр )локальная ошибкаместная змеяsnak , error = getQualifierSnak ( заявка , qualifierId )если змея, товернуть getSnakValue ( змейка , параметр )ещевернуть ноль , ошибкаконецконецлокальная функция getReferences ( кадр , утверждение )локальный результат = ""- пройти по всем ссылкамдля ссылки в парах ( прет . ссылки или {}) сделайтеместные ссылки- пройти по всем частям текущей ссылкидля snakkey , snakval в упорядоченных парах ( заявка . ссылки [ ref ]. snaks или {}, заявка . ссылки [ ref ] [ "snaks-order" ]) делатьесли refparts, то refparts = refparts .. "," else refparts = "" конец- вывести метку свойства эталонной детали, например, «импортировано из» для P143refparts = refparts .. tostring ( mw . wikibase . getLabel ( snakkey )) .. ":"- вывести все значения этой справочной части, например «Немецкая Википедия» и «Английская Википедия», если указанное утверждение было импортировано с обоих сайтов.для snakidx = 1 , # snakval doесли snakidx > 1, то refparts = refparts .. "," конецrefparts = refparts .. getSnakValue ( snakval [ snakidx ])конецконецесли refparts, то result = result .. frame : extensionTag ( "ref" , refparts ) endконецвернуть результатконецлокальная функция parseInput ( кадр )локальный qid = frame . аргументы . qid или mw . викибаза . getEntityIdForCurrentPage () или nilесли qid и ( # qid == 0 ), то qid = nil endлокальный propertyID = mw . текст . обрезать ( frame . args [ 1 ] или "" )локальный input_parm = mw . текст . обрезать ( frame . args [ 2 ] или "" )если input_parm ~ = "FETCH_WIKIDATA", товернуть false , input_parm , nil , nilконецместные претензииесли qid и mw . викибаза . entityExists ( qid ) и mw . викибаза . getBestStatements ( qid , propertyID ) [ 1 ], затемпретензии = mw . викибаза . getBestStatements ( qid , propertyID )если не претензии товернуть false , "" , ноль , нольконецещевернуть false , "" , ноль , нольконецвернуть истину , претензииконецлокальная функция isType ( утверждения , тип )возврат претензий и претензий . mainsnak . snaktype == "стоимость" и претензии . mainsnak . значение данных . тип == типконецлокальная функция getValue ( утверждения , разделитель , labelHook ) если labelHook == nil, тогдаlabelHook = функция ( qnumber )вернуть ноль ;конецконецlocal out = {}если утверждает [ 1 ], томестный я = 1в то время как претензии [ i ] ~ = ноль делатьесли isType ( утверждает [ i ], "wikibase-entityid" ), тоlocal qnumber = "Q" .. претензий [ i ]. mainsnak . значение данных . значение [ "числовой-идентификатор" ]местная дополнительная ссылка = mw . викибаза . getSitelink ( qnumber )local label = labelHook ( qnumber ) или mw . викибаза . getLabel ( qnumber ) или qnumberесли дополнительная ссылка, тоout [ # out + 1 ] = "[[" .. дополнительная ссылка .. "|" .. label .. "]]"ещеout [ # out + 1 ] = "[[: d:" .. qnumber .. "|" .. label .. "]] [*] "конецещевыход [ # выход + 1 ] = мв . викибаза . renderSnak ( утверждает [ i ]. mainsnak )конеця = я + 1конецконецвернуть table.concat ( out , delim )конец-------------------------------------------------- ----------------------------- глобальные функции модуляесли отладка, тофункция p . inspectI18n ( рамка )местный val = i18nдля _ , ключ в парах ( кадр . арг ) делатьключ = mw . текст . обрезать ( ключ )val = val [ ключ ]конецвернуть valконецконецфункция p . descriptionIn ( кадр )локальный langcode = frame . аргументы [ 1 ]локальный идентификатор = фрейм . аргументы [ 2 ]- вернуть описание объекта Викиданных на заданном языке или языке по умолчанию для этого сайта Википедиивернуть мв . викибаза . getEntity ( id ): getDescription ( langcode или wiki . langcode )конецфункция p . labelIn ( кадр )локальный langcode = frame . аргументы [ 1 ]локальный идентификатор = фрейм . аргументы [ 2 ]- вернуть метку объекта Викиданных на данном языке или языке по умолчанию для этого сайта Википедиивернуть мв . викибаза . getEntity ( id ): getLabel ( langcode или wiki . langcode )конец- Используется для получения значения или их списка, разделенного запятыми, если существует несколько значений.стр . getValue = функция ( кадр )local delimdefault = "," - ** интернационализировать позже **локальный разделитель = фрейм . аргументы . разделитель или ""delim = string.gsub ( delim , '"' , '' )если # delim == 0, тоdelim = delimdefaultконецлокальный переход , заявки = parseInput ( кадр )если не уходи товозвращать претензииконецвернуть getValue ( претензии , разделитель )конец- То же, что и выше, но использует свойство короткого имени для метки, если доступно.стр . getValueShortName = функция ( фрейм )локальный переход , заявки = parseInput ( кадр )если не уходи товозвращать претензииконец- если значение, связанное с вики, выводится как ссылка, если возможнолокальная функция labelHook ( qnumber )местный лейблместный я = 1если мв . викибаза . entityExists ( qnumber ), тогдаесли мв . викибаза . getBestStatements ( qnumber , "P1813" ) [ 1 ], затема мв . викибаза . getBestStatements ( qnumber , "P1813" ) [ i ] ~ = nil doесли мв . викибаза . getBestStatements ( qnumber , «P1813» ) [ i ]. mainsnak . значение данных . значение . language == "en" тогдаlabel = mw . викибаза . getBestStatements ( qnumber , «P1813» ) [ i ]. mainsnak . значение данных . значение . текстконеця = я + 1конецконецконецесли label == nil или label == "", то верните nil end этикетка возвратаконецreturn getValue ( утверждает , "," , labelHook );конец- Используется для получения значения или их списка, разделенного запятыми, если существует несколько значений.- из произвольной записи по ее QID.- Используйте: {{#invoke: Wikidata | getValueFromID | | | FETCH_WIKIDATA}} - Например: {{#invoke: Wikidata | getValueFromID | Q151973 | P26 | FETCH_WIKIDATA}} - для получения значения «супруга» (P26) от «Ричарда Бертона» (Q151973)- Пожалуйста, используйте экономно - это * дорогой звонок *.стр . getValueFromID = функция ( кадр )local itemID = mw . текст . обрезать ( frame . args [ 1 ] или "" )локальный propertyID = mw . текст . обрезать ( frame . args [ 2 ] или "" )локальный input_parm = mw . текст . обрезать ( frame . args [ 3 ] или "" )если input_parm == "FETCH_WIKIDATA", томестные претензииесли рамка . args [ 1 ] и mw . викибаза . entityExists ( itemID ) и mw . викибаза . getBestStatements ( itemID , propertyID ) [ 1 ], затемпретензии = mw . викибаза . getBestStatements ( itemID , propertyID )конецесли претензии тоreturn getValue ( утверждает , "," )ещевернуться ""конецещевернуть input_parmконецконецлокальная функция getQualifier ( кадр , outputHook ) локальный propertyID = mw . текст . обрезать ( frame . args [ 1 ] или "" )локальный квалификаторID = mw . текст . обрезать ( frame . args [ 2 ] или "" )локальный input_parm = mw . текст . обрезать ( frame . args [ 3 ] или "" )если input_parm == "FETCH_WIKIDATA", толокальный entityid = mw . викибаза . getEntityIdForCurrentPage ()если мв . викибаза . entityExists ( entityid ) ~ = nil и mw . викибаза . getBestStatements ( entityid , propertyID ) [ 1 ] ~ = nil, тогдаlocal out = {}местный я = 1а мв . викибаза . getBestStatements ( entityid , propertyID ) [ i ] ~ = ноль делатьдля k2 , v2 в парах ( mw . wikibase . getBestStatements ( entityid , propertyID ) [ i ]. qualifiers [ qualifierID ]) doесли v2 . snaktype == 'значение', тогдавыход [ # выход + 1 ] = outputHook ( v2 );конецконеця = я + 1конецreturn table.concat ( out , "," ), истинаещевозврат "" , ложьконецещевернуть input_parm , ложьконецконецстр . getQualifierValue = функция ( кадр )локальная функция outputValue ( значение )local qnumber = "Q" .. значение . значение данных . значение [ "числовой-идентификатор" ]если ( mw . wikibase . getSitelink ( qnumber )), тоreturn "[[" .. mw . викибаза . getSitelink ( qnumber ) .. "]]"ещеreturn "[[: d:" .. qnumber .. "|" .. qnumber .. "]] [*] "конецконецreturn ( getQualifier ( кадр , outputValue ))конец- Используется для получения значения типа 'male' (для свойства p21), которое не будет связано, и чисел без разделителей тысяч.стр . getRawValue = функция ( фрейм )локальный переход , заявки = parseInput ( кадр )если не уходи товозвращать претензииконецместный результат = {}местный я = 1в то время как претензии [ i ] ~ = ноль делать- если числовой тип: удалить разделители тысяч, границы и единицыесли isType ( утверждает [ i ], «количество» ), торезультат [ # результат + 1 ] = mw . ustring . gsub ( mw . wikibase . renderSnak ( заявляет [ i ]. mainsnak ), «(% d), (% d)» , «% 1% 2» )результат [ # результат + 1 ] = mw . ustring . gsub ( mw . wikibase . renderSnak ( заявляет [ i ]. mainsnak ), «(% d) ±. *» , «% 1» )ещерезультат [ # результат + 1 ] = mw . викибаза . renderSnak ( утверждает [ i ]. mainsnak )конеця = я + 1конецвернуть table.concat ( результат , ',' )конец- Используется для получения имени устройства для числового значения, возвращаемого getRawValue.стр . getUnits = функция ( кадр )локальный переход , заявки = parseInput ( кадр )если не уходи товозвращать претензииконецместный результат = {}местный я = 1в то время как претензии [ i ] ~ = ноль делатьместный я = 1если isType ( утверждает [ i ], «количество» ), торезультат [ # результат + 1 ] = mw . ustring . sub ( mw . renderSnak ( заявляет [ i ]. mainsnak ), mw . ustring . find ( result , "" ) + 1 , - 1 )ещерезультат [ # результат + 1 ] = mw . renderSnak ( утверждает [ i ]. mainsnak )конеця = я + 1конецвернуть результатконец- Это используется, чтобы получить QID устройства для использования с числовым значением, возвращаемым getRawValueстр . getUnitID = функция ( кадр )локальный переход , заявки = parseInput ( кадр )если не уходи товозвращать претензииконецместный результатесли isType ( утверждает [ 1 ], «количество» ), то- получить URL-адрес записи объекта в Викиданных:результат = претензии [ 1 ]. mainsnak . значение данных . значение . Ед. изм- и просто верните последний бит от "Q" до конца (который является QID):результат = mw . ustring . sub ( результат , mw . ustring . find ( результат , "Q" ), - 1 )конецвернуть результатконецстр . getRawQualifierValue = функция ( кадр )локальная функция outputHook ( значение )если значение . значение данных . значение [ "числовой-идентификатор" ], затемвернуть мв . викибаза . getLabel ( "Q" .. значение . значение данных . значение [ "числовой-идентификатор" ])ещевозвращаемое значение . значение данных . значениеконецконецlocal ret , gotData = getQualifier ( кадр , outputHook )если gotData, тоret = string.upper ( string.sub ( ret , 1 , 1 )) .. string.sub ( ret , 2 )конецвозвращение в отставкеконец- Используется для получения значения даты для date_of_birth (P569) и т. Д., Которые не будут связаны- Дата и время хранятся в формате ISO 8601 (вроде).- В настоящее время локальная функция formatDate (дата, точность, часовой пояс) не обрабатывает часовой пояс.- Поэтому я просто поставлю "Z" в вызове функции formatDate ниже:стр . getDateValue = функция ( кадр )локальный date_format = mw . текст . обрезать ( frame . args [ 3 ] или i18n [ "datetime" ] [ "default-format" ])местный date_addon = mw . текст . обрезать ( frame . args [ 4 ] или i18n [ "datetime" ] [ "default-addon" ])локальный переход , заявки = parseInput ( кадр )если не уходи товозвращать претензииконецlocal out = {}местный я = 1в то время как претензии [ i ] ~ = ноль делатьесли претензии [ i ]. mainsnak . значение данных . введите == 'время', затемместная отметка времени = заявки [ i ]. mainsnak . значение данных . значение . времяlocal dateprecision = претензии [ i ]. mainsnak . значение данных . значение . точность- Год можно сохранить так: «+ 1872-00-00T00: 00: 00Z»,- который обрабатывается здесь, как если бы он был накануне "+ 1872-01-01T00: 00: 00Z",- и это последний день 1871 года, значит, год неправильный.- Поэтому исправьте метку времени месяца 0 и дня 0, чтобы вместо этого стало 1 января:timestamp = отметка времени : gsub ( "% -00% -00T" , "-01-01T" )out [ # out + 1 ] = parseDateFull ( отметка времени , точность даты , формат_даты , адрес_даты )я = я + 1конецконецreturn table.concat ( out , "," )конецстр . getQualifierDateValue = функция ( кадр )локальный date_format = mw . текст . обрезать ( frame . args [ 4 ] или i18n [ "datetime" ] [ "default-format" ])местный date_addon = mw . текст . обрезать ( frame . args [ 5 ] или i18n [ "datetime" ] [ "default-addon" ])локальная функция outputHook ( значение )местная временная метка = значение . значение данных . значение . времявернуть parseDateValue ( отметка времени , date_format , date_addon )конецreturn ( getQualifier ( кадр , outputHook ))конец- Это используется для получения всех изображений с определенным свойством, например, изображение (P18), изображение генного атласа (P692) и т. Д.- Параметры есть | propertyID | значение / FETCH_WIKIDATA / nil | разделитель (по умолчанию = пробел) | размер (по умолчанию = безрамный)- Он вернет стандартную вики-разметку [[File: Filename | size]] для каждого изображения с выбираемым размером и разделителем (который может быть HTML)- например, {{#invoke: Wikidata | getImages | P18 | FETCH_WIKIDATA}}- например, {{#invoke: Wikidata | getImages | P18 | FETCH_WIKIDATA |
| 250px}}- Если выбрано свойство, не относящееся к типу commonsMedia, оно вернет пустой текст.стр . getImages = функция ( кадр )местный sep = mw . текст . обрезать ( frame . args [ 3 ] или "" )локальный imgsize = mw . текст . обрезать ( frame . args [ 4 ] или "бескаркасный" )локальный переход , заявки = parseInput ( кадр )если не уходи товозвращать претензииконецесли ( заявки [ 1 ] и заявки [ 1 ]. mainsnak . datatype == "commonsMedia" ), тоlocal out = {}местный я = 1в то время как претензии [ i ] ~ = ноль делатьлокальное имя файла = претензии [ я ]. mainsnak . значение данных . значениеout [ # out + 1 ] = "[[File:" .. filename .. "|" .. imgsize .. "]]"я = я + 1конецвернуть table.concat ( out , sep )ещевернуться ""конецконец- Используется для получения значений TA98 (Terminologia Anatomica, первое издание 1998 г.), например A01.1.00.005 (свойство P1323).- которые затем связаны с http://www.unifr.ch/ifaa/Public/EntryPage/TA98%20Tree/Entity%20TA98%20EN/01.1.00.005%20Entity%20TA98%20EN.htm- использует новые вызовы mw.wikibase вместо прямого использования snaks- formatPropertyValues возвращает таблицу со значениями P1323, объединенными с "", поэтому мы должны разбить их на таблицу, чтобы построить строку возвратастр . getTAValue = функция ( кадр )местный entid = mw . викибаза . getEntityIdForCurrentPage ()местные реквизиты = mw . викибаза . getEntity ( entid ): formatPropertyValues ( 'P1323' )local out = {}местный t = {}для k , v в парах ( реквизитах ) делаемесли k == 'значение', тоt = mw . текст . split ( v , "," )для k2 , v2 в пар ( т ) делаютout [ # out + 1 ] = "[http://www.unifr.ch/ifaa/Public/EntryPage/TA98%20Tree/Entity%20TA98%20EN/" .. string.sub ( v2 , 2 ) .. » % 20Entity% 20TA98% 20EN.htm " .. v2 .. "] "конецконецконецlocal ret = table.concat ( out , "
" )если # ret == 0, тоret = "Недействительный TA"конецвозвращение в отставкеконец- [[Используется для возврата легенды изображения из Викиданных.изображение свойство P18легенда изображения - свойство P2096Вызовите как {{#invoke: Wikidata | getImageLegend | <ПАРАМЕТР> | lang = | id = }} Возвращает ПАРАМЕТР, если он не равен "FETCH_WIKIDATA", из QID элемента (дорогостоящий вызов)Если QID опущен или пуст, используется текущая статья (не дорогой вызов)Если lang опущен, он использует местный язык вики, в противном случае он использует предоставленный код языка ISO-639.ISO-639: https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html#wp1252447Ранги: "предпочтительный"> "нормальный".Это возвращает метку из первого изображения с «предпочтительным» рангом.Или метка из первого изображения с «нормальным» рангом, если желательно, ничего не возвращаетЗвания: https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua]]стр . getImageLegend = функция ( кадр )- ищем именованный идентификатор параметра; если он пуст, сделайте его нулевымлокальный идентификатор = фрейм . аргументы . я быесли id и ( # id == 0 ), тоid = нольконец- ищем именованный параметр lang- он должен содержать двухсимвольный код языка ISO-639- если пусто, выбрать язык местной викиместные языки = кадр . аргументы . языкесли ( не lang ) или ( # lang < 2 ), тоlang = mw . язык . getContentLanguage (). кодконец- первый безымянный параметр - это локальный параметр, если он указанлокальный input_parm = mw . текст . обрезать ( frame . args [ 1 ] или "" )если input_parm == "FETCH_WIKIDATA", томестный imglblесли id и mw . викибаза . entityExists ( id ) и mw . викибаза . getBestStatements ( id , "P18" ) [ 1 ] и мв . викибаза . getBestStatements ( идентификатор , «P18» ) [ 1 ]. mainsnak . данные и мв . викибаза . getBestStatements ( идентификатор , «P18» ) [ 1 ]. rank == "предпочтительный" тогда - в getBestStatements, если есть предпочтительное значение, оно упорядочивается первым.imglbl = mw . викибаза . getBestStatements ( идентификатор , «P18» ) [ 1 ]. mainsnak . значение данных . значениеelseif id и mw . викибаза . entityExists ( id ) и mw . викибаза . getBestStatements ( id , "P18" ) [ 1 ] и мв . викибаза . getBestStatements ( идентификатор , «P18» ) [ 1 ]. mainsnak . DataValue затем - только нормальные и предпочтительные значения ранга , выводимые в beststatementsimglbl = mw . викибаза . getBestStatements ( идентификатор , «P18» ) [ 1 ]. mainsnak . значение данных . значениеконецвернуть imglblещевернуть input_parmконецконец- Используется для получения QID всех значений свойства в виде списка, разделенного запятыми, если существует несколько значений.- Использование: {{#invoke: Wikidata | getPropertyIDs | | FETCH_WIKIDATA}} - Использование: {{#invoke: Wikidata | getPropertyIDs | | | qid = }} стр . getPropertyIDs = функция ( кадр )локальный go , propclaims = parseInput ( кадр )если не уходи тоответные претензииконец- если значение, связанное с вики, собрать QID в таблицеif ( propclaims [ 1 ] и propclaims [ 1 ]. mainsnak . snaktype == "value" и propclaims [ 1 ]. mainsnak . datavalue . type == "wikibase-entityid" ), тоlocal out = {}местный я = 1в то время как претензии [ i ] ~ = ноль делатьout [ # out + 1 ] = "Q" .. претензий [ i ]. mainsnak . значение данных . значение [ "числовой-идентификатор" ]я = я + 1конецreturn table.concat ( out , "," )еще- не объектный идентификатор викибазы, поэтому возвращайте пустойвернуться ""конецконец- возвращает идентификатор страницы (Q ...) текущей страницы или ничто из страницы не связано с Викиданнымифункция p . pageId ( фрейм )вернуть мв . викибаза . getEntityIdForCurrentPage ()конецфункция p . претензия ( кадр )локальное свойство = фрейм . args [ 1 ] или ""локальный идентификатор = фрейм . args [ "id" ] или mw . викибаза . getEntityIdForCurrentPage ()локальный qualifierId = frame . args [ "квалификатор" ]локальный параметр = кадр . args [ "параметр" ]локальный список = фрейм . args [ "список" ]локальные ссылки = фрейм . args [ "ссылки" ]местные душевые зеркала = рама . args [ "showerrors" ]локальное значение по умолчанию = фрейм . args [ "по умолчанию" ]если по умолчанию, то showerrors = nil end- проверить сущность викиданныхесли не мв . викибаза . entityExists ( id ), тогдаесли душевные ошибки, то вернуть printError ( "entity-not-found" ), иначе вернуть default endконец- получить первое требование удовлетворения данного свойстваместные претензии = mw . викибаза . getBestStatements ( идентификатор , свойство ) или нольесли нет претензий или не претензий [ 1 ], тоесли душевные ошибки, то вернуть printError ( "свойство-не-найдено" ) иначе вернуть конец по умолчанию конец- не нужно сортировать, bestStatements заказывает предпочтительный ранг первымместный результатлокальная ошибкаместный я = 1если список томестная ценность- перебрать все элементы и вернуть их значение (если есть)результат = {}для IDX в пар ( претензий ) делаютместная заявка = заявки [ i ]значение , ошибка = getValueOfClaim ( заявка , qualifierId , параметр )если не значение и ошибки, то значение = конец ошибки если значение и ссылки, то значение = значение .. getReferences ( кадр , утверждение ) конецрезультат [ # результат + 1 ] = значениея = я + 1конецрезультат = table.concat ( результат , список )еще- вернуть первый элементместная заявка = заявки [ i ]результат , ошибка = getValueOfClaim ( заявка , qualifierId , параметр )если результат и ссылки, то результат = результат .. getReferences ( кадр , утверждение ) конецконецесли результат, то вернуть результат иначеесли ошибки, то вернуть ошибку, иначе вернуть конец по умолчанию конецконец- заглянуть в объект сущностифункция p . ViewSomething ( кадр )local f = ( frame . args [ 1 ] или frame . args . id ) и кадр или кадр : getParent ()локальный идентификатор = f . аргументы . я быесли id и ( # id == 0 ), тоid = нольконецлокальные данные = mw . викибаза . getEntity ( идентификатор )если не id или не mw . викибаза . entityExists ( id ), тогдавернуть нольконецместный я = 1в то время как истинные делалокальный индекс = f . args [ i ]если не индекс, тоесли type ( data ) == "table", товернуть мв . текст . jsonEncode ( данные , мвт . текст . JSON_PRESERVE_KEYS + мвт . текст . JSON_PRETTY )ещевозврат в строку ( данные )конецконецДанные = данные [ индекс ] или данные [ ToNumber ( индекс )]если не данные, товозвращатьсяконеця = я + 1конецконец- получение дополнительной ссылки данной вики- получить дополнительную ссылку текущего товара, если qid не указанфункция p . getSiteLink ( кадр )локальный qid = frame . аргументы . qidесли qid == "", то qid = nil endместный f = mw . текст . обрезать ( frame . args [ 1 ] или "" )если не фунт или не мв . викибаза . entityExists ( qid ), тогдавозвращатьсяконецлокальная ссылка = mw . викибаза . getSitelink ( f )если не ссылка товозвращатьсяконецобратная ссылкаконецфункция p . Отвал ( рама )local f = ( frame . args [ 1 ] или frame . args . id ) и кадр или кадр : getParent ()локальные данные = mw . викибаза . GetEntity ( е . арг . ID )если не данные, товернуть i18n . warnDumpконецместный я = 1в то время как истинные делалокальный индекс = f . args [ i ]если не индекс, тоreturn ""
.. mw . dumpObject ( данные ) .. "
" .. i18n . warnDump конец Данные = данные [ индекс ] или данные [ ToNumber ( индекс )] если не данные, то вернуть i18n . warnDump конец я = я + 1 конецконецвернуть p