Wikidata

ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:Wikidata/תיעוד

-- module local variables local wiki =  { langcode = mw.language.getContentLanguage().code }  -- internationalisation local i18n = {     ["errors"] = {         ["property-not-found"] = "המאפיין לא נמצא.",         ["entity-not-found"] = "היישות לא נמצאה",         ["unknown-claim-type"] = "מאפיין לא מוכר",         ["unknown-snak-type"] = "Unbekannter Snak-Typ.",         ["unknown-datavalue-type"] = "סוג נתון לא ידוע",         ["unknown-entity-type"] = "סוג יישות לא ידוע",         ["qualifier-not-found"] = "המבחין לא נמצא.",         ["site-not-found"] = "האתר לא נמצא.",     },     ["somevalue"] = "Unbekannter Wert",     ["novalue"] = "Kein Wert",     ["datetime"] = { -- $1 is a placeholder for the actual number [0] = "$1 מיליארד שנים",-- precision: billion years [1] = "$100 מיליון שנים",-- precision: hundred million years [2] = "$10 מיליון שנים",-- precision: ten million years [3] = "$1 מיליון שנים",-- precision: million years [4] = "$100,000 שנים",-- precision: hundred thousand years [5] = "$10,000 שנים",-- precision: ten thousand years [6] = "המילוניום ה-$1", -- precision: millenium [7] = "המאה ה-$1",-- precision: century [8] = "$1er",-- precision: decade -- the following use the format of #time parser function [9]  = "Y",-- precision: year,  [10] = "F Y",-- precision: month [11] = "j xg Y",-- precision: day [12] = 'j xg Y, G "Uhr"',-- precision: hour [13] = "j xg Y G:i",-- precision: minute [14] = "j xg Y G:i:s",-- precision: second ["beforenow"] = "vor $1",-- how to format negative numbers for precisions 0 to 5 ["afternow"] = "in $1",-- how to format positive numbers for precisions 0 to 5 ["bc"] = '$1 לפנה"ס',-- how print negative years ["ad"] = "$1"-- how print positive years }, ["monolingualtext"] = '%text' }  local p = { }  local function printError(code) return ' .. i18n.errors[code] .. '[[קטגוריה:שגיאת קריאת ויקינתונים]]' end  -- the "qualifiers" and "snaks" field have a respective "qualifiers-order" and "snaks-order" field -- use these as the second parameter and this function instead of the built-in "pairs" function -- to iterate over all qualifiers and snaks in the intended order. local function orderedpairs(array, order) if not order then return pairs(array) end  -- return iterator function     local i = 0     return function()         i = i + 1         if order[i] then             return order[i], array[order[i]]         end     end end  function p.descriptionIn(frame) local langcode = frame.args[1] local id = frame.args[2]-- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration -- return description of a Wikidata entity in the given language or the default language of this Wikipedia site return mw.wikibase.getEntityObject(id).descriptions[langcode or wiki.langcode].value end  function p.labelIn(frame) local langcode = frame.args[1] local id = frame.args[2]-- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration -- return label of a Wikidata entity in the given language or the default language of this Wikipedia site return mw.wikibase.getEntityObject(id).labels[langcode or wiki.langcode].value end  local function printDatavalueCoordinate(data, parameter) -- data fields: latitude [double], longitude [double], altitude [double], precision [double], globe [wikidata URI, usually http://www.wikidata.org/entity/Q2 [earth]] if parameter then if parameter == "globe" then data.globe = mw.ustring.match(data.globe, "Q%d+") end -- extract entity id from the globe URI return data[parameter] else return data.latitude .. "/" .. data.longitude -- combine latitude and longitude, which can be decomposed using the #titleparts wiki function end end  local function printDatavalueQuantity(data, parameter) -- data fields: amount [number], unit [string], upperBound [number], lowerBound [number] if parameter then return data[paramater] else return tonumber(data.amount) end end  -- precision: 0 - billion years, 1 - hundred million years, ..., 6 - millenia, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day, 12 - hour, 13 - minute, 14 - second local function normalizeDate(date) date = mw.text.trim(date, "+") -- extract year local yearstr = mw.ustring.match(date, "^\-?%d+") local year = tonumber(yearstr) -- remove leading zeros of year return year .. mw.ustring.sub(date, #yearstr + 1), year end  function formatDate(date, precision, timezone) precision = precision or 11 date, year = normalizeDate(date) if year == 0 and precision <= 9 then return "" end    -- precision is 10000 years or more if precision <= 5 then local factor = 10 ^ ((5 - precision) + 4) local y2 = math.ceil(math.abs(year) / factor) local relative = mw.ustring.gsub(i18n.datetime[precision], "$1", tostring(y2)) if year < 0 then relative = mw.ustring.gsub(i18n.datetime.beforenow, "$1", relative) else relative = mw.ustring.gsub(i18n.datetime.afternow, "$1", relative) end return relative end    -- precision is decades, centuries and millenia local era if precision == 6 then era = mw.ustring.gsub(i18n.datetime[6], "$1", tostring(math.floor((math.abs(year) - 1) / 1000) + 1)) end if precision == 7 then era = mw.ustring.gsub(i18n.datetime[7], "$1", tostring(math.floor((math.abs(year) - 1) / 100) + 1)) end if precision == 8 then era = mw.ustring.gsub(i18n.datetime[8], "$1", tostring(math.floor(math.abs(year) / 10) * 10)) end if era then if year < 0 then era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.bc, '"', ""), "$1", era) elseif year > 0 then era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.ad, '"', ""), "$1", era) end return era end  -- precision is year if precision == 9 then return year end  -- precision is less than years if precision >= 9 then --[[ the following code replaces the UTC suffix with the given negated timezone to convert the global time to the given local time timezone = tonumber(timezone) if timezone and timezone ~= 0 then timezone = -timezone timezone = string.format("%.2d%.2d", timezone / 60, timezone % 60) if timezone[1] ~= '-' then timezone = "+" .. timezone end date = mw.text.trim(date, "Z") .. " " .. timezone end ]]--  local formatstr = i18n.datetime[precision] if year == 0 then formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], "") elseif year < 0 then -- Mediawiki formatDate doesn't support negative years date = mw.ustring.sub(date, 2) formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], mw.ustring.gsub(i18n.datetime.bc, "$1", i18n.datetime[9])) elseif year > 0 and i18n.datetime.ad ~= "$1" then formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], mw.ustring.gsub(i18n.datetime.ad, "$1", i18n.datetime[9])) end return mw.language.new(wiki.langcode):formatDate(formatstr, date) end end  local function printDatavalueTime(data, parameter) -- data fields: time [ISO 8601 time], timezone [int in minutes], before [int], after [int], precision [int], calendarmodel [wikidata URI] --   precision: 0 - billion years, 1 - hundred million years, ..., 6 - millenia, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day, 12 - hour, 13 - minute, 14 - second --   calendarmodel: e.g. http://www.wikidata.org/entity/Q1985727 for the proleptic Gregorian calendar or http://www.wikidata.org/wiki/Q11184 for the Julian calendar] if parameter then if parameter == "calendarmodel" then data.calendarmodel = mw.ustring.match(data.calendarmodel, "Q%d+") -- extract entity id from the calendar model URI elseif parameter == "time" then data.time = normalizeDate(data.time) end return data[parameter] else return formatDate(data.time, data.precision, data.timezone) end end  local function printDatavalueEntity(data, parameter) -- data fields: entity-type [string], numeric-id [int, Wikidata id] local id = "Q" .. data["numeric-id"] if parameter then if parameter == "link" then return "[[" .. (mw.wikibase.sitelink(id) or (":d:" .. id))  .. "|" ..  (mw.wikibase.label(id) or id)  .. "]]" else return data[parameter] end else if data["entity-type"] == "item" then return mw.wikibase.label("Q" .. data["numeric-id"]) or mw.ustring.format('%s%s', id, '[[קטגוריה:ויקינתונים:ערכים_חסרי_תווית_בעברית]]') else printError("unknown-entity-type") end end end  local function printDatavalueMonolingualText(data, parameter) -- data fields: language [string], text [string] if parameter then return data[parameter] else return mw.ustring.gsub(mw.ustring.gsub(i18n.monolingualtext, "%%language", data["language"]), "%%text", data["text"]) end end  function findClaims(entity, property) if not property or not entity or not entity.claims then return end return entity:getAllStatements(property) end  function getSnakValue(snak, parameter) -- snaks have three types: "novalue" for null/nil, "somevalue" for not null/not nil, or "value" for actual data if snak.snaktype == "novalue" then return i18n["novalue"] elseif snak.snaktype == "somevalue" then return i18n["somevalue"] elseif snak.snaktype ~= "value" then return nil, printError("unknown-snak-type") end  -- call the respective snak parser if snak.datavalue.type == "string" then return snak.datavalue.value elseif snak.datavalue.type == "globecoordinate" then return printDatavalueCoordinate(snak.datavalue.value, parameter) elseif snak.datavalue.type == "quantity" then return printDatavalueQuantity(snak.datavalue.value, parameter) elseif snak.datavalue.type == "time" then return printDatavalueTime(snak.datavalue.value, parameter) elseif snak.datavalue.type == "wikibase-entityid" then return printDatavalueEntity(snak.datavalue.value, parameter) elseif snak.datavalue.type == "monolingualtext" then return printDatavalueMonolingualText(snak.datavalue.value, parameter) else return nil, printError("unknown-datavalue-type") end end  function getQualifierSnak(claim, qualifierId, onlyHebrew) -- a "snak" is Wikidata terminology for a typed key/value pair -- a claim consists of a main snak holding the main information of this claim, -- as well as a list of attribute snaks and a list of references snaks if qualifierId then -- search the attribute snak with the given qualifier as key if claim.qualifiers then local qualifier = claim.qualifiers[qualifierId] if qualifier then -- only hebrew qualifiers for monolingualtext type if onlyHebrew and qualifier[1].datatype == 'monolingualtext' then for idx,eachForm in pairs(qualifier) do if eachForm.datavalue.value.language == 'he' then return qualifier[idx] end end else return qualifier[1] end end end return nil, printError("qualifier-not-found") else -- otherwise return the main snak return claim.mainsnak end end  function getValueOfClaim(claim, qualifierId, parameter) local error local snak  local onlyHebrew if qualifierId == 'P2096' then onlyHebrew = true end  snak, error = getQualifierSnak(claim, qualifierId, onlyHebrew) if snak then  return getSnakValue(snak, parameter) else return nil, error end end  function getReferences(frame, claim) local result = "" -- traverse through all references for ref in pairs(claim.references or {}) do local refparts -- traverse through all parts of the current reference for snakkey, snakval in orderedpairs(claim.references[ref].snaks or {}, claim.references[ref]["snaks-order"]) do if refparts then refparts = refparts .. ", " else refparts = "" end -- output the label of the property of the reference part, e.g. "imported from" for P143 refparts = refparts .. tostring(mw.wikibase.label(snakkey)) .. ": "  -- output all values of this reference part, e.g. "German Wiki Wikidata" and "English Wiki Wikidata" if the referenced claim was imported from both sites for snakidx = 1, #snakval do if snakidx > 1 then refparts = refparts .. ", " end refparts = refparts .. getSnakValue(snakval[snakidx]) end end if refparts then result = result .. frame:extensionTag("ref", refparts) end end return result end  -- Check if the 'qualifierId' exists on the 'property' of given 'id' function p.isClaimExist(property, qualifierId, id) -- get wikidata entity local entity = mw.wikibase.getEntityObject(id or nil)  if not entity then return false end -- fetch the first claim of satisfying the given property local claims = findClaims(entity, property)  if not claims or not claims[1] then return false end  -- get initial sort indices local sortindices = {} for idx in pairs(claims) do sortindices[#sortindices + 1] = idx end  -- check if there is an element local claim = claims[sortindices[1]] result, error = getValueOfClaim(claim, qualifierId, parameter) return result ~= nil end  function p.claim(frame) local property = frame.args[1] or "" local id = frame.args["id"]-- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration local qualifierId = frame.args["qualifier"] local parameter = frame.args["parameter"] local list = frame.args["list"] local references = frame.args["references"] local showerrors = frame.args["showerrors"] local default = frame.args["default"] if default then showerrors = nil end  -- get wikidata entity local entity = mw.wikibase.getEntityObject(id) if not entity then if showerrors then return printError("entity-not-found") else return default end end -- fetch the first claim of satisfying the given property local claims = findClaims(entity, property) if not claims or not claims[1] then if showerrors then return printError("property-not-found") else return default end end  -- get initial sort indices local sortindices = {} for idx in pairs(claims) do sortindices[#sortindices + 1] = idx end -- sort by claim rank local comparator = function(a, b) local rankmap = { deprecated = 2, normal = 1, preferred = 0 } local ranka = rankmap[claims[a].rank or "normal"] ..  string.format("%08d", a) local rankb = rankmap[claims[b].rank or "normal"] ..  string.format("%08d", b) return ranka < rankb  end table.sort(sortindices, comparator)  local result local error if list then local value -- iterate over all elements and return their value (if existing) result = {} for idx in pairs(claims) do local claim = claims[sortindices[idx]] value, error =  getValueOfClaim(claim, qualifierId, parameter) if not value and showerrors then value = error end if value and references then value = value .. getReferences(frame, claim) end result[#result + 1] = value end result = table.concat(result, list) else -- return first element local claim = claims[sortindices[1]] result, error = getValueOfClaim(claim, qualifierId, parameter) if result and references then result = result .. getReferences(frame, claim) end end  if result then return result else if showerrors then return error else return default end end end  function p.getValue(frame) local param = frame.args[2] if param == "FETCH_WIKIDATA" then return p.claim(frame) else return param end end  function p.pageId(frame) return mw.wikibase.getEntityIdForCurrentPage() end  function p.labelOf(frame) local id = frame.args[1] -- returns the label of the given entity/property id -- if no id is given, the one from the entity associated with the calling Wikipedia article is used if not id then local entity = mw.wikibase.getEntityObject() if not entity then return printError("entity-not-found") end id = entity.id end return mw.wikibase.label(id) end  function p.sitelinkOf(frame) local id = frame.args[1] -- returns the Wikipedia article name of the given entity -- if no id is given, the one from the entity associated with the calling Wikipedia article is used if not id then local entity = mw.wikibase.getEntityObject() if not entity then return printError("entity-not-found") end id = entity.id end return mw.wikibase.sitelink(id) end  function p.badges(frame) local site = frame.args[1] local id = frame.args[2]-- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration if not site then return printError("site-not-found") end local entity = mw.wikibase.getEntityObject(id) if not entity then return printError("entity-not-found") end local badges = entity.sitelinks[site].badges if badges then local result for idx = 1, #badges do if result then result = result .. "/" .. badges[idx] else result = badges[idx] end end return result end end  -- call this in cases of script errors within a function instead of {{#invoke:Wikidata||...}} call {{#invoke:Wikidata|debug||...}} function p.debug(frame) local func = frame.args[1] if func then -- create new parameter set, where the first parameter with the function name is removed local newargs = {} for key, val in pairs(frame.args) do if type(key) == "number" then if key > 1 then newargs[key - 1] = val end else newargs[key] = val end end frame.args = newargs local status, result = pcall(p[func], frame) if status then return result else return ' .. result .. '' end else return '' end end  function printTable(data, level) level = tonumber(level) or 0 local result = "" local prefix = "" for idx = 1, level do prefix = prefix .. " " end  if type(data) == "table" then for key, val in pairs(data) do result = result .. prefix .. key .. ": " if type(val) == "table" then result = result .. "\n" .. printTable(val, level + 1) else result = result .. tostring(val) .. "\n" end end else result = prefix .. tostring(data) end if level == 0 then result = "
" .. mw.text.encode(result) .. "
"
end return result end -- look into entity object function p.ViewSomething(frame) local i = 1 local f = frame.args[1] and frame or frame:getParent() local data if f.args[1] =='claims' and f.args[2] then data = mw.wikibase.getAllStatements( mw.wikibase.getEntityIdForCurrentPage(), f.args[2] ) i=i+2 else data = mw.wikibase.getEntityObject() end if not data then return nil end while true do local index = f.args[i] if not index then if type(data) == "table" then return mw.text.jsonEncode(data, mw.text.JSON_PRESERVE_KEYS + mw.text.JSON_PRETTY) else return tostring(data) end end data = data[index] or data[tonumber(index)] if not data then return end i = i + 1 end end function p.printEntity(frame) local id = frame.args[1] -- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration local entity = mw.wikibase.getEntityObject(id) return printTable(entity) end local function computeLinkToItem(entityId, capitalize, callFunction) local sitelink = mw.wikibase.sitelink(StringUtils._prependIfMissing({tostring(entityId), 'Q'})) local label = nil local object = mw.wikibase.getEntityObject(StringUtils._prependIfMissing({tostring(entityId), 'Q'})) if callFunction and type(callFunction) == 'function' then label = callFunction(object) end if label == nil then label = mw.wikibase.label(StringUtils._prependIfMissing({tostring(entityId), 'Q'})) end if label == nil and object ~= nil then label = object:getLabel('en') end if label == nil then label = StringUtils._prependIfMissing({tostring(entityId), 'Q'}) end if capitalize then label = lang:ucfirst(label) end if sitelink then return "[[:" .. sitelink .. "|" .. label .. "]]" else return "[[:d:" .. StringUtils._prependIfMissing({tostring(entityId), 'Q'}) .. "|" .. label .. "]][*]" end end p.findLinkToItem = function(entityId, capitalize, feminine, shortestAlias) if capitalize == nil then capitalize = false end local callFunction = nil if shortestAlias then callFunction = function(object) local returnedAlias = nil if object then if object.claims and object.claims['P1813'] then local shortNameEn = nil for shortNameIdx,shortNameClaim in pairs(object.claims['P1813']) do if shortNameClaim.mainsnak.datavalue.value.language == 'en' then shortNameEn = shortNameClaim.mainsnak.datavalue.value.text end if shortNameClaim.mainsnak.datavalue.value.language == 'ro' then returnedAlias = shortNameClaim.mainsnak.datavalue.value.text end end returnedAlias = returnedAlias or shortNameEn end end return returnedAlias end end if feminine then callFunction = function(object) if object then local feminineForms = object:getBestStatements('P2521') if feminineForms then for _idx, eachFForm in pairs(feminineForms) do if eachFForm.type == 'statement' and eachFForm.mainsnak.datatype == 'monolingualtext' and eachFForm.mainsnak.datavalue.type == 'monolingualtext' and eachFForm.mainsnak.datavalue.value and eachFForm.mainsnak.datavalue.value.language == 'he' then return eachFForm.mainsnak.datavalue.value.text end end end end end end return computeLinkToItem(entityId, capitalize, callFunction) end -- check whether entityId has a claim with propertyId referencing to claimedEntity p.hasClaim = function(entityId, propertyId, claimedEntity) if entityId==nil or propertyId==nil then return false end local propertyVals = mw.wikibase.getBestStatements(entityId, propertyId) if (not propertyVals) or (#propertyVals==0) then return false end for i, property in ipairs(propertyVals) do local propValue = property.mainsnak and property.mainsnak.datavalue if not propValue then return false end if propValue.value['id'] == claimedEntity then return true end end return false end p.getValueOfClaim = getValueOfClaim return p

Tags:

🔥 Trending searches on Wiki עברית:

השואהגרמניהמלחמת אוקראינה–רוסיהגוש קטיףאמנון שפיראChatGPTקובי שבתאיצבא הגנה לישראלארץ נהדרת - דמויותהמשמר הלאומי של ישראלכדור הארץבובספוג מכנסמרובעיצחק רביןמשה נסיםמכת ערובסדרות (אתר אינטרנט)שי גולדןגלריית דגלי מדינות העולםמיליציההונגריה29 במרץהפרדת הרשויותרוח צהלעדן בן זקןמלחמת לבנון הראשונהכריסטיאנו רונאלדוהכנסת העשרים וארבעהישרדות (תוכנית טלוויזיה ישראלית)יאן זומרנפוליאון בונפרטהסקוטלנדמלחמת וייטנאםאלונה סערעילת הסבירותבגץ עמותת הפורום החילוני נגד שר הבריאותנוה דרומיחטיבת הנחלטורניקה שנגליהיונתן נתניהודמוקרטיהאליעזר שלמה שיקדודי אמסלםהמהפכה הצרפתיתהמחאה החברתית בישראל 2011יהדותנרקיסיזםאבי דיכטראס אסדנה ורוןמלחמת העצמאותהסנדק חלק שניאפרת בוימולדיאיר גולןמקדונלד'סאברהם יצחק הכהן קוקלונדוןהמשמר האזרחייצחק מירילשוילידרוזיםיהלםתסמונת אספרגרחיפהנשיאי ארצות הבריתאליהוהאנטומיה של גריי (סדרת טלוויזיה)2023אירועי אוקטובר 2000קיליאן אמבפהחברת החשמל לישראלמגפת הקורונה בישראלנורית גלרוןמיגל ויטוריוהאן סבסטיאן באךכרפסמגי טביביהולנדהלוח העברי🡆 More