모듈 : ResolveEntityId

이 페이지는 준보호되어 있습니다.
위키百科, 우리 모두의 百科事典.

local
 p
 =
 {}


function
 p
.
_id
(
idOrTitle
,
 alt
)

	local
 function
 checkId
(
id
)

		if
 id
 and
 mw
.
wikibase
.
entityExists
(
id
)
 then

			local
 sitelink
 =
 mw
.
wikibase
.
getSitelink
(
id
)

			if
 sitelink
 then

				return
 mw
.
wikibase
.
getEntityIdForTitle
(
sitelink
)
 or
 mw
.
wikibase
.
getEntity
(
id
).
id

			end

			return
 mw
.
wikibase
.
getEntity
(
id
).
id

		else

			return
 alt

		end

	end


	if
 type
(
idOrTitle
)
 ==
 'string'
 then

		idOrTitle
 =
 mw
.
ustring
.
upper
(
mw
.
ustring
.
sub
(
idOrTitle
,
 1
,
 1
))
 ..
 mw
.
ustring
.
sub
(
idOrTitle
,
 2
)

		if
 mw
.
wikibase
.
isValidEntityId
(
idOrTitle
)
 then

			-- idOrTitle is in the proper format for a Wikidata entity ID

			return
 checkId
(
idOrTitle
)

		else

			local
 eid
 =
 mw
.
wikibase
.
getEntityIdForTitle
(
idOrTitle
)

			if
 eid
 then

				-- idOrTitle is a title that matches a Wikidata entity

				local
 instanceOf
 =
 mw
.
wikibase
.
getBestStatements
(
eid
,
 'P31'
)[
1
]
 --instance of

				if
 not
 instanceOf
 or
 instanceOf
.
mainsnak
.
datavalue
.
value
.
id
 ~=
 'Q4167410'
 then

					-- instance-of value is missing or is not "disambiguation"

					return
 checkId
(
eid
)

				end

			else

				-- idOrTitle is a title, but no wikidata item exists for that title

				local
 page
 =
 mw
.
title
.
new
(
idOrTitle
)

				if
 page
 then
 -- valid title

					local
 rtarget
 =
 page
.
redirectTarget

					if
 rtarget
 then
	-- title is a Wikipedia redirect

						return
 p
.
_id
(
rtarget
.
fullText
,
 alt
)

					end

				end

			end

		end

	end

	return
 alt

end


function
 p
.
entityid
(
frame
)

	return
 p
.
_id
(
frame
.
args
[
1
],
 frame
.
args
[
2
])

end


return
 p