وحدة:Wikidata2: الفرق بين النسختين
[نسخة منشورة] | [نسخة منشورة] |
Mr. Ibrahem (نقاش | مساهمات) طلا ملخص تعديل |
Mr. Ibrahem (نقاش | مساهمات) ط Add options.page |
||
سطر 79: | سطر 79: | ||
end |
end |
||
return getqualifierbysortingproperty(claim, sortingproperty) |
return getqualifierbysortingproperty(claim, sortingproperty) |
||
end |
|||
function get_entityId(options) |
|||
local id = options.entityId |
|||
if not id or id == "" then |
|||
if options.page and options.page ~= "" then |
|||
id = mw.wikibase.getEntityIdForTitle( options.page ) |
|||
end |
|||
end |
|||
mw.log("id :" .. id) |
|||
return id |
|||
end |
end |
||
سطر 327: | سطر 338: | ||
jurisdiction=P1001, |
jurisdiction=P1001, |
||
employer=P108, |
employer=P108, |
||
entityId=options.entityId |
entityId=options.entityId |
||
} } |
|||
end |
end |
||
سطر 416: | سطر 429: | ||
if options.entity and type( options.entity ) == "table" then |
if options.entity and type( options.entity ) == "table" then |
||
entity = options.entity |
entity = options.entity |
||
else |
else |
||
entity = getEntityFromId( options.entityId ) |
--entity = getEntityFromId( options.entityId ) |
||
id = get_entityId( options ) |
|||
entity = getEntityFromId( id ) |
|||
end |
end |
||
سطر 1٬268: | سطر 1٬283: | ||
function p.getSiteLink( frame ) |
function p.getSiteLink( frame ) |
||
local site = frame.args[2] or frame.args.site |
local site = frame.args[2] or frame.args.site |
||
local id = frame.args[1] |
local id = frame.args[1] or frame.args.id |
||
if not id or id == "" then |
|||
⚫ | |||
if frame.args.page and frame.args.page ~= "" then |
|||
id = mw.wikibase.getEntityIdForTitle( frame.args.page ) |
|||
end |
|||
end |
|||
⚫ | |||
if link and link ~= '' then |
if link and link ~= '' then |
||
return link |
|||
end |
end |
||
end |
end |
نسخة 14:33، 9 ديسمبر 2017
هذه الوحدة مستخدمة في عدد كبير من الصفحات (+2786816) . لتفادي خلق بلبلة على نطاق واسع من الصفحات وزيادة الأعباء على الخوادم، يجب تجربة أي تعديل في هذه الصفحات الفرعية /ملعب أو /تجربة أو في ملعبك. بعدها يمكنك اضافة التعديلات دفعة واحدة، ورجاءً، لا تنسَ مناقشة أمر التعديلات أوّلًا قبل القيام بها. |
هذه الوحدة نسخت في البداية من sv:Modul:Wikidata2 ومن ثم تم تطويرها هنا.
الاستخدامات
أنظر قائمة قوالب تستخدم هذه الوحدة.
الوحدات الفرعية
- وحدة:Wikidata2/Globes
- وحدة:Wikidata2/P106
- وحدة:Wikidata2/P1082
- وحدة:Wikidata2/P172
- وحدة:Wikidata2/P3828
- وحدة:Wikidata2/P39
- وحدة:Wikidata2/P54
- وحدة:Wikidata2/P569-P570
- وحدة:Wikidata2/link
- وحدة:Wikidata2/monolingualtext
- وحدة:Wikidata2/tax
- وحدة:Wikidata2/template
- وحدة:Wikidata2/time
- وحدة:Wikidata2/Flags
- وحدة:Wikidata2/otheruse
- Wikidata2
- Wikidata2/1
- Wikidata2/2
- Wikidata2/Flags
- Wikidata2/Globes
- Wikidata2/Math
- Wikidata2/P106
- Wikidata2/P106/شرح
- Wikidata2/P1082
- Wikidata2/P1082/شرح
- Wikidata2/P172
- Wikidata2/P172/شرح
- Wikidata2/P3828
- Wikidata2/P3828/شرح
- Wikidata2/P39
- Wikidata2/P39/شرح
- Wikidata2/P39/ملعب
- Wikidata2/P54
- Wikidata2/P54/شرح
- Wikidata2/P569-P570
- Wikidata2/P569-P570/شرح
- Wikidata2/P569-P570/ملعب
- Wikidata2/cycling
- Wikidata2/functions
- Wikidata2/functions2
- Wikidata2/link
- Wikidata2/monolingualtext
- Wikidata2/monolingualtext/شرح
- Wikidata2/monolingualtext/مختبر
- Wikidata2/otheruse
- Wikidata2/otheruse/شرح
- Wikidata2/otheruse/ملعب
- Wikidata2/otheruse/ملعب2
- Wikidata2/pra
- Wikidata2/sandbox
- Wikidata2/tax
- Wikidata2/tax/cash
- Wikidata2/tax/cash/ملعب
- Wikidata2/tax/شرح
- Wikidata2/tax/ملعب
- Wikidata2/tax/ملعب2
- Wikidata2/template
- Wikidata2/template/شرح
- Wikidata2/time
- Wikidata2/time/ملعب
- Wikidata2/تحديث/شرح
- Wikidata2/شرح
- Wikidata2/مختبر
- Wikidata2/مختبر/شرح
- Wikidata2/ملعب
- Wikidata2/ملعب/شرح
- Wikidata2/ملعب2
- Wikidata2/نسخة
- Wikidata2/نسخة/شرح
الاستعمال
مثال
{{#invoke:Wikidata2|formatStatements|property=p17}}
الشرح
انقر لإظهار الشرح >>>>
m
الوسائط
formatStatements
|property=
مطلوب الخاصية المطلوبة.
|entityId=
أو|id=
معرف عنصر ويكي بيانات.|page=
يمكن إستخدامه بدلاً من|entityId=Q805
كالتالي:|page=اليمن
.
|enbarten=
أو|firstvalue=
يعرض أول قيمة فقط في الخاصية.|firstvalue=2
يعرض القيمة الثانية في الخاصية إن كانت موجودة، يمكن استخدام هذا الخيار حتى رقم 9.
|numval=
يعرض عدد محدد من القيم في الخاصية.|numval=4
يعرض القيم الأربع الأولى في الخاصية إن كانت موجودة.
|prefix=
بادئة|suffix=
لاحقة|formatting=
يحدد تنسيق القيم يستخدم مع إحداثيات جغرافية، وعنصر، وخاصية.
|label=
اذا كنت تريد الاختيار كيفية ظهور الوصلات. مثلا[[شعار مقاطعة بليكينج|الشعار]]
يمكن الحصول عليها عن طريق اضافة|label=الشعار
تؤثر هذه المعلمة على وحدات القياس.|raw=
يعود بالنتيجة خام على شكل جداول (يستخدم من داخل وحدات لوا أخرى) ويمكن معاينة ما سيكون الناتج عليه عبر إضافة خيار|rawtolua=
.
فصل القيم
|separator=
فاصلة بين البنود|
انظر أيضاconjunction
|conjunction=
الفاصلة الأخيرة قبل اخر بند، افتراضي، و
.
توصيف | يظهر |
---|---|
سياسي ، محامٍ ، كاتب سياسي ، منظم مجتمع ، رجل دولة ، رجل قانون ، مدون صوتي ، أستاذ جامعي و كاتب مذكرات | |
|separator=br يضع القيم في أسطر.
|
|separator=* يضع القيم في قائمة نقطية.
| ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
التحديد والإزاحة
- وسيط
|numval=
و|limit=
يقومان بنفس الوظيفة.
|limit=
|
|offset=
| ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
رتبة القيم / rank
|rank=
يحدد نوع البيانات المطلوب عرضها:
|rank=all
|
جميع البنود في الخاصية | |rank=valid
|
البنود المفضلة والتي بوضع "ترتيب عادي" ولكن لا يظهر المهملة. | |rank=best
|
(افتراضي) يظهر القيم المفضلة. |
---|
ترتيب النتيجة / sort
|sortingproperty=
تحديد خاصية الترتيب.
- تستخدم وسائط الترتيب (
|sortbytime=
، و|sortbynumber=
، و|sortingmethod=
) قيمتين فقط كالتالي:
chronological تصاعدي asc |
من التاريخ الأقدم إلى التاريخ الأحدث | inverted تنازلي desc |
من التاريخ الأحدث إلى التاريخ الأقدم |
---|
حسب التصفيات
|sortbytime=
تُستخدم للترتيب النتيجة حسب التصفيات من فئة الزمن، ويتم الترتيب حسب الخواص التالية ( (P585)، (P571)، (P580)، (P569)، (P582)، (P570)).- إذا أردنا تحديد خاصية الترتيب نستخدم
|sortbynumber=
بأحدى القيمتين أعلاه ونستخدم|sortingproperty=
مع الخاصية المطلوبة.
حسب الخواص
إذا لم توجد تصفيات في النتيجة فإننا بحاجة للدخول إلى العناصر وأخذ قيمة مُعينة لجعلها مفتاح للترتيب، مثل تاريخ الولادة، أو تاريخ البدء.
- نستخدم
|sortingmethod=
بأحدى القيم المذكورة أعلاه، ونستخدم الخاصية المطلوبة عبر وسيط|sortingproperty=
.
- مثال
|
|
المراجع / References / Sources
|noref=
أدخل قيمة في هذه المعلمة إذا كنت لا تريد جلب المصادر من ويكي بيانات.|justref=
أدخل قيمة في هذه المعلمة إذا كنت تريد جلب المصادر فقط دون ظهور القيمة!.|onlyvaluewithref=
لإظهار البيانات التي لها مراجع فقط.|numberofreferences=
لوضع حد أقصى للمراجع لكل قيمة، مثلاً عند تحديد|numberofreferences=1
يظهر مرجع واحد فقط في كل قيمة إن كان متوفراً.
صياغة النص
|formatcharacters=
تحديد صيغة اخراج القيمة، القيم المسموح بها هي:lc/uc/lcfirst/ucfirst/formatnum
|formatcharacters=lc
: تحويل جميع أحرف النص الإنجليزي إلى حروف صغيرة.|formatcharacters=lcfirst
: تحويل الحرف الأول من النص الإنجليزي إلى حرف صغير.|formatcharacters=uc
: تحويل جميع أحرف النص الإنجليزي إلى حروف كبيرة.|formatcharacters=ucfirst
: تحويل الحرف الأول من النص الإنجليزي إلى حرف كبير.|formatcharacters=formatnum
: مشروحة في #كمية.
تصفيات / Qualifiers
|withdate=
يضيف تصفية (P585) إذا كانت موجودة.|bothdates=
يضيف تصفيات (P580) و (P582) إذا كانتا موجودتان كلاهما أو إحداهما.|bothdates=line
يضع سطر جديد قبل التاريخ،|bothdates=before
يضع التاريخ قبل القيمة،|bothdates=after
يضع التاريخ بعد القيمة.
|qual1=
يضيف تصفية محددة.|qual1=P1545
يضيف تصفية (P1545) الى بنود الخاصية، مثال:منصب باراك أوباما + ترتيبه:{{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |formatStatements|entityId=Q76|property=P39|qual1=P1545|noref=true|rank=best}}
ينتج :← رئيس الولايات المتحدة (44)
فلترة النتائج
|avoidqualifier=
يتجاهل القيم التي تحتوي تصفيات معينة، مثل:|avoidqualifier=P518
يظهر البند الذي لا يحتوي على تصفية (P518).- بإستخدام
|avoidqualifiervalue=
مع|avoidqualifier=
فإن ذلك يحدد قيمة التصفية إذا طابقت الوسيط|avoidqualifiervalue=
فلن يتم إظهارها، وإذا لم تطابق فسيتم إظهارها، يدعم حالياً العناصر/items فقط.
- بإستخدام
|preferqualifier=
تحديد خاصية تصفيات يجب أن تكون بيانات الخاصية متضمنتها.|preferqualifiervalue=
تحدد القيمة التي تناسب أعلاه. يدعم حالياً العناصر فقط.
|justthisqual=
يظهر فقط التصفية، إذا لم تكن التصفية موجودة لن يظهر شيء.
وسائط حسب نوع البيانات / datatype
عنصر / item
|nolink=
يظهر النتيجة دون وصلات.|formatting=raw
يعرض القيمة بشكل Q505.|formatting=sitelink
يعرض القيم التي تحتوي مقالة في ويكيبيديا العربية.
= فلترة النتيجة =
|getonly=
يستخدم هذا الوسيط إذا أردنا الحصول على عناصر معينة التي تكون قيمة (P31) فيها تساوي قيمة هذا الوسيط، مثال:|getonly=Q5
للحصول على الأفراد فقط.- القيم المتعددة ممكنة، مثل :
|getonly=Q127448,Q193556
للحصول على البلديات السويدية والمناظر الطبيعية.
|getonlyproperty=
إذا أردنا استخدام خاصية أخرى بدلاً من (P31) في البند السابق.
|avoidvalue=
يستخدم هذا الوسيط إذا أردنا أن نتجاهل أو نلغي ظهور عنصر معين، مثال عند وضع|avoidvalue=Q21769847
فتظهر النتائج دون ظهور أستانا 2016 (Q21769847).
= prefervalue =
|prefervalue=
يستخدم هذا الوسيط بشكل معاكس للوسيط|avoidvalue=
حيث نقوم بتحديد القيمة التي نريد ظهورها|prefervalue=Q19481
فتظهر النتيجة للعنصر ليستر سيتي (Q19481) فقط، ولكن الفائدة من إستخدام هذا الوسيط هي التأكد من وجود العنصر في هذه الخاصية أو للحصول على التصفيات، مثال يظهر عناصر (P1346) مع تصفية (P1923) بين قوسين.
توصيف | يظهر |
---|---|
نادي آرسنال (21 )، نادي بورنموث (13 )، برايتون أند هوف ألبيون (9 )، نادي بيرنلي (11 )، كارديف سيتي (10 )، نادي تشيلسي (21 )، كريستال بالاس (14 )، نادي إيفرتون (15 )، ليستر سيتي (15 )، نادي ليفربول (30 )، مانشستر سيتي (32 )، مانشستر يونايتد (19 )، نيوكاسل يونايتد (12 )، توتنهام هوتسبير (23 )، نادي واتفورد (14 )، وست هام يونايتد (15 )، وولفرهامبتون واندررز (16 )، نادي ساوثهامبتون (9 )، نادي فولهام (7 ) و هدرسفيلد تاون (3 ) | |
إذا كنا قد حصلنا عبر خاصية (P1346) عن الفريق الفائز في الدوري الإنجليزي الممتاز 2018–19 (Q39052816). وأردنا الحصول على عدد مرات الفوز للفريق الفائز، من الجدول السابق ويتم ذلك بإستخدام الوسيط |justthisqual=
ما ينتج:
توصيف | يظهر |
---|---|
21 ، 13 ، 9 ، 11 ، 10 ، 21 ، 14 ، 15 ، 15 ، 30 ، 32 ، 19 ، 12 ، 23 ، 14 ، 15 ، 16 ، 9 ، 7 و 3 | |
ولكننا نريد ظهور التصفية للفريق الفائز فقط وهو مانشستر سيتي (Q50602):
|
|
= avoidvalue =
|avoidvalue=
يستخدم هذا الوسيط بشكل معاكس للوسيط|prefervalue=
إذا أردنا أن نتجاهل أو نلغي ظهور عنصر معين، مثال عند وضع|avoidvalue=Q50602
فتظهر النتائج دون ظهور مانشستر سيتي (Q50602).
توصيف | يظهر |
---|---|
نادي آرسنال (21 )، نادي بورنموث (13 )، برايتون أند هوف ألبيون (9 )، نادي بيرنلي (11 )، كارديف سيتي (10 )، نادي تشيلسي (21 )، كريستال بالاس (14 )، نادي إيفرتون (15 )، ليستر سيتي (15 )، نادي ليفربول (30 )، مانشستر سيتي (32 )، مانشستر يونايتد (19 )، نيوكاسل يونايتد (12 )، توتنهام هوتسبير (23 )، نادي واتفورد (14 )، وست هام يونايتد (15 )، وولفرهامبتون واندررز (16 )، نادي ساوثهامبتون (9 )، نادي فولهام (7 ) و هدرسفيلد تاون (3 ) | |
= الحصول على خواص إضافية =
وسيط property1
- يستخدم للحصول على قيمة خاصية من العناصر التي حصلنا عليها، بحيث تظهر قيمة
|property1=
بجانب القيمة الأصلية:
توصيف | يظهر |
---|---|
{{#invoke:wikidata2|formatStatements | property1=P41| separator=br| property=P1376| entityId=Q2471| rank=all}} | خطأ لوا في السطر 90: attempt to concatenate local 'id' (a nil value). |
وسيط property2
- مثل
|property1=
(بدون استخدام|property3=
).
توصيف | يظهر |
---|---|
{{#invoke:wikidata2|formatStatements | entityId=Q529207| illwd2=t| limit=5| separator=br| property=P54| property2=P17| bothdates=}} | إسبانيا نادي برشلونة
إيطاليا إيه سي ميلان إيطاليا نادي إنتر ميلان هولندا بي إس في آيندهوفن إسبانيا ريال مدريد البرازيل نادي كورينثيانز البرازيل نادي كروزيرو البرازيل منتخب البرازيل تحت 17 سنة لكرة القدم البرازيل منتخب البرازيل تحت 23 سنة لكرة القدم البرازيل منتخب البرازيل لكرة القدم البرازيل منتخب البرازيل تحت 23 سنة لكرة القدم إسبانيا ريال مدريد |
وسيط property3
- يستخدم بجانب الوسيط
|property2=
، بحيث تظهر قيمة|property3=
بدون قيمة|property2=
.
توصيف | يظهر |
---|---|
{{#invoke:wikidata2|formatStatements | property3=P41| illwd2=t| limit=5| separator=br| entityId=Q529207| property=P54| property2=P17| bothdates=}} | Flag of Spain.svg نادي برشلونة
Flag of Italy.svg إيه سي ميلان Flag of Italy.svg نادي إنتر ميلان Flag of the Netherlands.svg بي إس في آيندهوفن Flag of Spain.svg ريال مدريد Flag of Brazil.svg نادي كورينثيانز Flag of Brazil.svg نادي كروزيرو Flag of Brazil.svg منتخب البرازيل تحت 17 سنة لكرة القدم Flag of Brazil.svg منتخب البرازيل تحت 23 سنة لكرة القدم Flag of Brazil.svg منتخب البرازيل لكرة القدم Flag of Brazil.svg منتخب البرازيل تحت 23 سنة لكرة القدم Flag of Spain.svg ريال مدريد |
- مع وسيط
|image=t
توصيف | يظهر |
---|---|
{{#invoke:wikidata2|formatStatements | entityId=Q529207| property3=P41| size=20px| illwd2=t| limit=5| separator=br| image=t| property=P54| property2=P17| bothdates=}} | نادي برشلونة
إيه سي ميلان نادي إنتر ميلان بي إس في آيندهوفن ريال مدريد نادي كورينثيانز نادي كروزيرو منتخب البرازيل تحت 17 سنة لكرة القدم منتخب البرازيل تحت 23 سنة لكرة القدم منتخب البرازيل لكرة القدم منتخب البرازيل تحت 23 سنة لكرة القدم ريال مدريد |
ملف وسائط من كومنز / commonsMedia
- تظهر الصور افتراضياً كالتالي:
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P18|noref=true|rank=best}}
← President Barack Obama.jpg
|image=
عند استخدام هذا الوسيط في خواص الصور تظهر الصورة مباشرة.
إحداثيات جغرافية / coordinate
توصيف | |
يظهر | 15°30′N 48°00′E / 15.5°N 48°E |
|formatting=latitude
يعرض خط العرض فقط.|formatting=longitude
يعرض خط الطول فقط.|formatting=precision
يعرض الدقة.
|
|
نص أحادي اللغة / نص بلغة وحيدة / monolingualtext
|langpref=
في الوحدة، هناك مرشح يعطي أولوية للقيم التي تحتوي على "اللغة = العربية". أضف القيمة المطلوبة لتعطيل هذا الفلتر.- القيم المقبولة الأخرى هي : justlang و langcode
- أمثلة
|langpref=justlang لإظهار لغة النص فقط دون النص، مثل الإنجليزية.
|
|langpref=langcode لإظهار رمز لغة النص فقط دون النص، مثل en.
| ||||||||
---|---|---|---|---|---|---|---|---|---|
|
|
|showlang=
|
|textformat=text
| ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
استخدم أي قيمة لإظهار النص حسب تنسيق قالب:رمز لغة واسمها. | اظهار النص فقط دون استخدام قوالب {{رمز لغة واسمها}} أو {{رمز لغة}} | ||||||||||||
|
|
- في النص العربي لا يظهر القالب:
توصيف | يظهر |
---|---|
بدر جاسم محمد الطيَّار | |
كمية / quantity
- الافتراضي:
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P2046|noref=t|firstvalue=y}}
← 555000 كيلومتر مربع
|nounit= لا يظهر وحدة القياس.
|
|formatcharacters=formatnum : تنسيق الأرقام بالفواصل.
| ||||||||
---|---|---|---|---|---|---|---|---|---|
|
|
|unitshort=
يظهر وحدات القياس مختصرة. مثلاً كم بدلاً عن كيلومتر.
|
|
نص / string
|stringpattern=
تنسيق النص في قالب أو وصلة أو ماشابه يتم استبدال القيمة بـ$1. مثل|pattern=
لكن هنا تستخدم مع نوع البيانات string.
توصيف | يظهر |
---|---|
C75016 و C75016 | |
نقطة زمنية / time
|modifytime=
يحدد تنسيق الوقت أو التاريخ:|modifytime=longdate
يكتب التاريخ في شكل "20 مايو 2024"|modifytime=Y
يكتب التاريخ في شكل "2024" يظهر فقط السنة.|modifytime= F
يكتب التاريخ في شكل "مايو" يظهر فقط الشهر.|modifytime= j
يكتب التاريخ في شكل "20" يظهر فقط اليوم.
|modifyqualifiertime=
تنسيق التاريخ على النحو الوارد أعلاه، ولكن يؤثر فقط على التصفيات.qualifier
معرف خارجي / external-id
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements| entityId=Q76| property=P2002}} | BarackObama |
|pattern=
طريقة عرض الخاصية مثلاً في وصلات الضبط الاستنادي$1
مثلاً:<nowiki>https://viaf.org/viaf/$1/</nowiki>
.|pattern=autourl
من خواص البند أعلاه، لنمط مستخدم في الخاصية (P1630) (تنسيق عنوان URL) للخاصية المطلوبة.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements| entityId=Q76| property=P2002| pattern=autourl}} | https://x.com/BarackObama |
|pattern=autourl2
كما سبق، يقدم وصلة من نوع<nowiki>[https://viaf.org/viaf/$1/ $1] </nowiki>
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements| entityId=Q76| property=P2002| pattern=autourl2}} | BarackObama |
المسار / url
|urllabel=
وضع تسمية لتظهر بدلاً من الوصلة، كما في معرف خارجي ولكن في خواص الروابط.- مثال عند استخدام (P856) لباراك أوباما (Q76) مع/بدون الوسيط
|urllabel=الموقع الرسمي
:
- مثال عند استخدام (P856) لباراك أوباما (Q76) مع/بدون الوسيط
|
|
|displayformat=
يقبل حالياً قيمة واحدة وهي|displayformat=weblink
لاستخدام وحدة:weblink لعرض وصلة الموقع.
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P856|displayformat=weblink}}
← الموقع الرسمي[1][2]
خيارات إضافية
|NosValue=
يستخدم لإظهار نتيجة ما عند عدم وجود قيمة محلية في وسيط|value=
وعدم وجود قيمة في ويكي بيانات.
property-(module/function) و claim-(module/function) و value-(module/function)
يتم دعم ثلاثة أنواع من معلمات الوظائف، والتي تشير أيضًا إلى كيفية تنسيق القيم:
|-module=
عنوان الوحدة|-function=
عنوان الوظيفة
property
fun( claims, options )
|property-module=
عنوان الوحدة مثل|property-module=وحدة:Wikidata2/P54
|property-function=
عنوان الوظيفة مثل|property-function=foot
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل كامل مثلاً لوضعها في جدول معين، أو فرزها بتنسيق خاص، مع إمكانية الحصول على التصفيات/qualifiers والمراجع/references وتنسيقها والتحكم بها.
- أمثلة:
- الوحدة وحدة:Wikidata2/P54 الخاصة بعرض فرق لاعبي كرة القدم، مثل أندية كرة القدم حيث يتم فصل المنتخبات عن الأندية.
claim
fun( statement, options )
|claim-module=
عنوان الوحدة مثل|claim-module=وحدة:Wikidata2/P39
|claim-function=
عنوان الوظيفة مثل|claim-function=office3
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل منفرد، مع إمكانية الحصول على التصفيات/qualifiers والمراجع/references وتنسيقها والتحكم بها.
- أمثلة:
- الوحدة وحدة:Wikidata2/P39 الخاصة بخاصية المنصب (P39).
value
fun( datavalue, datatype, options )
|value-module=
عنوان الوحدة مثل|value-module=وحدة:Wikidata2/P106
|value-function=
عنوان الوظيفة مثل|value-function=formatEntityWithGenderClaim
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل منفرد لكل قيمة مثلاً لأخذ تسمية الإناث عند إستخدام خاصية (P106)، لا نستطيع هنا الحصول على التصفيات/qualifiers والمراجع/references.
- أمثلة:
- الوحدة وحدة:Wikidata2/P106 الخاصة بخاصية المهنة.
بدون استخدام |value-module=
|
باستخدام |value-module=
| ||||||||
---|---|---|---|---|---|---|---|---|---|
|
|
pageId
ينتج عنصر ويكي بيانات للصفحة المستخدم فيها الكود.
توصيف يظهر {{#invoke:Wikidata2|pageId}}
Q24575438
labelIn
|1=
اللغة مثل fr.|2=
عنصر ويكي بيانات مثل Q76.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|labelIn|fa|Q76}} |
descriptionIn
|1=
اللغة مثل fr.|2=
عنصر ويكي بيانات مثل Q76.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|descriptionIn|en|Q76}} |
getSiteLink / وصلات المواقع
|2=
أو|site=
الموقع مثل enwiki.- يتم أخذ عنصر ويكي بيانات من أحد الوسائط التالية:
|1=
أو|id=
عنصر ويكي بيانات.|page=
يمكن استخدام اسم الصفحة في هذه الويكي بدلاً من استخدام الوسيط|id=
.
|countsitelinks=
يستخدم فقط لإظهار عدد وصلات اللغات.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|getSiteLink|Q76}} | باراك أوباما |
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|getSiteLink|Q76|enwiki}} | Barack Obama |
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|getSiteLink| id=Q76| site=enwiki}} | Barack Obama |
أو:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|getSiteLink| page=اليمن| site=enwiki}} | Yemen |
Dump
مثال: {{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |Dump|claims|P19}}
- مثال2:
{{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |Dump|id=Q76|claims|P19}}
table#1 {
table#2 {
["id"] = "Q76$6c5e3740-4ca4-de6a-1557-b623372dc93a",
["mainsnak"] = table#3 {
["datatype"] = "wikibase-item",
["datavalue"] = table#4 {
["type"] = "wikibase-entityid",
["value"] = table#5 {
["entity-type"] = "item",
["id"] = "Q6366688",
["numeric-id"] = 6366688,
},
},
["property"] = "P19",
["snaktype"] = "value",
},
["qualifiers"] = table#6 {
["P1932"] = table#7 {
table#8 {
["datatype"] = "string",
["datavalue"] = table#9 {
["type"] = "string",
["value"] = "Kapiolani Maternity & Gynecological Hospital",
},
["hash"] = "6fd68e03eb688ae2bc3065f585acd78edbe8fa5b",
["property"] = "P1932",
["snaktype"] = "value",
},
},
["P6375"] = table#10 {
table#11 {
["datatype"] = "monolingualtext",
["datavalue"] = table#12 {
["type"] = "monolingualtext",
["value"] = table#13 {
["language"] = "en",
["text"] = "6085 Kalanianaole Highway",
},
},
["hash"] = "2e9be82b6a3154de13d7196988eb8b40dc8f0252",
["property"] = "P6375",
["snaktype"] = "value",
},
},
["P7452"] = table#14 {
table#15 {
["datatype"] = "wikibase-item",
["datavalue"] = table#16 {
["type"] = "wikibase-entityid",
["value"] = table#17 {
["entity-type"] = "item",
["id"] = "Q71536040",
["numeric-id"] = 71536040,
},
},
["hash"] = "f9f842b41f249e5504d48025c7ad6d7b5bfc7496",
["property"] = "P7452",
["snaktype"] = "value",
},
},
},
["qualifiers-order"] = table#18 {
"P6375",
"P1932",
"P7452",
},
["rank"] = "preferred",
["references"] = table#19 {
table#20 {
["hash"] = "e91a853ea4e0b372b26f82a616b87eb645b0aff3",
["snaks"] = table#21 {
["P248"] = table#22 {
table#23 {
["datatype"] = "wikibase-item",
["datavalue"] = table#24 {
["type"] = "wikibase-entityid",
["value"] = table#25 {
["entity-type"] = "item",
["id"] = "Q14527788",
["numeric-id"] = 14527788,
},
},
["property"] = "P248",
["snaktype"] = "value",
},
},
},
["snaks-order"] = table#26 {
"P248",
},
},
},
["type"] = "statement",
},
table#27 {
["id"] = "Q76$7ba7f268-4c19-b92f-7254-f8ed65aed53f",
["mainsnak"] = table#28 {
["datatype"] = "wikibase-item",
["datavalue"] = table#29 {
["type"] = "wikibase-entityid",
["value"] = table#30 {
["entity-type"] = "item",
["id"] = "Q18094",
["numeric-id"] = 18094,
},
},
["property"] = "P19",
["snaktype"] = "value",
},
["rank"] = "normal",
["references"] = table#31 {
table#32 {
["hash"] = "207f35a0ea83b330f87438c914b0ab24558d2868",
["snaks"] = table#33 {
["P227"] = table#34 {
table#35 {
["datatype"] = "external-id",
["datavalue"] = table#36 {
["type"] = "string",
["value"] = "132522136",
},
["property"] = "P227",
["snaktype"] = "value",
},
},
["P248"] = table#37 {
table#38 {
["datatype"] = "wikibase-item",
["datavalue"] = table#39 {
["type"] = "wikibase-entityid",
["value"] = table#40 {
["entity-type"] = "item",
["id"] = "Q36578",
["numeric-id"] = 36578,
},
},
["property"] = "P248",
["snaktype"] = "value",
},
},
["P407"] = table#41 {
table#42 {
["datatype"] = "wikibase-item",
["datavalue"] = table#43 {
["type"] = "wikibase-entityid",
["value"] = table#44 {
["entity-type"] = "item",
["id"] = "Q188",
["numeric-id"] = 188,
},
},
["property"] = "P407",
["snaktype"] = "value",
},
},
["P813"] = table#45 {
table#46 {
["datatype"] = "time",
["datavalue"] = table#47 {
["type"] = "time",
["value"] = table#48 {
["after"] = 0,
["before"] = 0,
["calendarmodel"] = "http://www.wikidata.org/entity/Q1985727",
["precision"] = 11,
["time"] = "+2021-06-06T00:00:00Z",
["timezone"] = 0,
},
},
["property"] = "P813",
["snaktype"] = "value",
},
},
},
["snaks-order"] = table#49 {
"P248",
"P227",
"P407",
"P813",
},
},
},
["type"] = "statement",
},
}
- مثال موسع:
{{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |Dump|claims|P1791|1|references|1|snaks|P244|1|datavalue|value}}
isSubclass / نوع فرعي من
إن كانت قيمة (P31) أو (P279) للصفحة التي وضع فيها الكود أو للصفحة في الوسيط |id=
مساوية للوسيط |parent=
ينتج 'true' غير ذلك لا ينتج شيئاً.
كامل الخيارات:{{#invoke:Wikidata2{{#تبديل:{{SUBPAGENAME}}|ملعب=/ملعب}} |isSubclass|parent=|maxDepth=1|property=|id=|exitItem=}}
- مطلوب:
|parent=
مثلاً إنسان (Q5) |maxDepth=
عمق البحث في الصفحات.|property=
الخاصية المطلوبه (افتراضياً (P31)، و (P279))|id=
الصفحة المطلوب البحث فيها.|exitItem=
مثال:
{{#invoke:Wikidata2|isSubclass|maxDepth=1|id=Q76|parent=Q5}}
← true
{{#invoke:Wikidata2|isSubclass|maxDepth=5|id=Q76|parent=Q45}}
← false
EntityIdForTitle
يعطي معرف ويكي بيانات من خلال عنوان مقالة ويكيبيديا العربية:
{{#invoke:Wikidata2|EntityIdForTitle|اليمن}}
← Q805
{{#invoke:Wikidata2|EntityIdForTitle|وحدة:Wikidata2}}
← Q24575438
Qidfortitleandwiki
- يمكن استخدام الوظيفة للحصول على معرف ويكي بيانات لصفحات في الموسوعات الأخرى:
توصيف | يظهر |
---|---|
خطأ: الوظيفة "Qidfortitleandwiki" غير موجودة. | |
آخر التحديثات
- 4 أبريل 2019:
- إضافة الوسيط
|unitshort=
لإستخدام اختصار وحدات القياس أو العملات بدلاً عن عنوان مقالتها.
- إضافة الوسيط
- 4 أبريل 2019:
- إضافة الوسيط
|avoidqualifiervalue=
عكس الوسيط|preferqualifiervalue=
. - إخفاء ظهور تصانيف التتبع في التصفيات عند استخدام الوسيط
|raw=
.
- إضافة الوسيط
- 2 أبريل 2019:
- إضافة الوسيط
|stringpattern=
تنسيق النص.
- إضافة الوسيط
- 12 مارس 2019:
- إضافة إمكانية وضع حد أقصى لعدد المراجع عبر خيار
|numberofreferences=
.
- إضافة إمكانية وضع حد أقصى لعدد المراجع عبر خيار
- 3 مارس 2019:
- إمكانية استخدام
|numval=
لعرض عدد محدد من القيم في الخاصية.
- إمكانية استخدام
- 11 فبراير 2019:
- إلغاء ظهور تصانيف التتبع عند إستخدام الخيار raw . موضوع:Urddl876zfwwpkfq
- إضافة الوظيفة avoidvalue لمنع ظهور قيم معينة طلب الزميل @علاء:.
- استخدام mw.wikibase.getReferencedEntityId
- 8 فبراير 2019:
- استخدام وحدة:weblink مع نوع بيانات url / المسار عبر وضع
|displayformat=weblink
.
- استخدام وحدة:weblink مع نوع بيانات url / المسار عبر وضع
- 4 فبراير 2019:
- إمكانية استخدام
|firstvalue=1
لإظهار القيمة رقم 1 ويمكن الاستخدام حتى رقم 9.
- إمكانية استخدام
- 1 فبراير 2019:
- استخدام mw.wikibase.isValidEntityId و mw.wikibase.entityExists في الوحدة للتأكد من صحة قيم
|entityId=
.
- استخدام mw.wikibase.isValidEntityId و mw.wikibase.entityExists في الوحدة للتأكد من صحة قيم
- 20 يناير 2019 :
- إضافة الخيار returnnumberofvalues لمعرفة عدد قيم النتائج، (يستخدم عبر وحدات لوا)
- 31 ديسمبر 2018:
- إضافة الوظيفة getLabel.
- 18 ديسمبر 2018 :
- إمكانية حجب قيم من الظهور في خواص معينة مثل حجب العنصر نبي (Q42857) من الظهور عند استخدام خاصية (P106).
- 2 مارس 2018 :
- 5 فبراير 2018:
- اضافة الخيار
|formatcharacters=formatnum
لإظهار تنسيق الأرقام بالفواصل مثل 10٬000٬000.
- اضافة الخيار
- 25 يناير 2018:
- اضافة الخيار
|countsitelinks=t
لإظهار عدد وصلات اللغات.
- اضافة الخيار
- 9 ديسمبر 2017:
- إضافة الخيار
|page=
يمكن أن يستخدم بديلاً عن|entityId=
بوضع اسم الصفحة خاص:فرق/25985344.
- إضافة الخيار
-- local fallback = {'en', 'nb', 'da', 'nn', 'de', 'fr', 'es', 'it', 'pt'}
local formatera = require('وحدة:Math')
local i18n = {
["errors"] = {
["property-param-not-provided"] = "Property parameter not provided.",
["entity-not-found"] = "Entity not found.",
["unknown-claim-type"] = "Unknown claim type.",
["unknown-snak-type"] = "Unknown snak type.",
["unknown-datatype"] = "Unknown datatype.",
["unknown-entity-type"] = "Unknown entity type.",
["unknown-value-module"] = "You must set both value-module and value-function parameters.",
["unknown-claim-module"] = "You must set both claim-module and claim-function parameters.",
["unknown-property-module"] = "You must set both property-module and property-function parameters.",
["property-module-not-found"] = "The module pointed by property-module not found.",
["property-function-not-found"] = "The function pointed by property-function not found.",
["value-module-not-found"] = "The module pointed by value-module not found.",
["value-function-not-found"] = "The function pointed by value-function not found.",
["claim-module-not-found"] = "The module pointed by claim-module not found.",
["claim-function-not-found"] = "The function pointed by claim-function not found."
},
["noarabiclabel"] = "تصنيف:صفحات_ويكي_بيانات_بحاجة_لتسمية_عربية",
["warnDump"] = "[[Category:Called function 'Dump' from module Wikidata]]",
["somevalue"] = "", --''غير محدد''
["novalue"] ="",--قيمة مجهولة
["cateref"] ="[[تصنيف:صفحات بها مراجع ويكي بيانات]]"
}
local sortingproperties = {'P585','P571','P580','P569','P582','P570'}
function catewikidatainfo(options)
local prop = options.property
local catewikidatainfo = ' [[تصنيف:صفحات بها بيانات ويكي بيانات|'.. (prop or 'wikidata')..']]'
if (not options.nolink or options.nolink == '')
then return catewikidatainfo else return ''
end
end
--auktoritetsdata
function formatcharacters(label, options)
local formatcharacters = options.formatcharacters
--if options.FormatfirstCharacter and options.num == 1 then
--formatcharacters = options.FormatfirstCharacter
--end
if options.illwd2y and options.illwd2y ~= '' then
String2 = mw.ustring.gsub( label , '–', '-' )
ca = mw.ustring.match( String2 , "%d%d%d%d%-%d%d%d%d", 1 ) or mw.ustring.match( String2 , "%d%d%-%d%d%d%d", 1 )
ca = ca or mw.ustring.match( String2 , "%d%d%d%d", 1 ) or mw.ustring.match( String2 , "%d%d%d%d%-%d%d", 1 )
ca = ca or mw.ustring.match( String2 , "%d%d%d%d", 1 ) or String
return ca
end
if not formatcharacters or formatcharacters == '' then
return label
end
if formatcharacters == 'lcfirst' then
return mw.getCurrentFrame():preprocess("{{lcfirst: " .. label .. " }}")
elseif formatcharacters == 'ucfirst' then
return mw.language.getContentLanguage():ucfirst( label )
elseif formatcharacters == 'lc' then
return mw.getCurrentFrame():preprocess("{{lc: " .. label .. " }}")
elseif formatcharacters == 'uc' then
return mw.getCurrentFrame():preprocess("{{uc: " .. label .. " }}")
end
return label
end
function getqualifierbysortingproperty(claim, sortingproperty)
for k, v in pairs(sortingproperty) do
if claim.qualifiers and claim.qualifiers[v] and claim.qualifiers[v][1].snaktype == 'value' then
return claim.qualifiers[v][1].datavalue.value.time
end
end
return nil
end
function getDate(claim, options)
local sortingproperty = sortingproperties
if type(options.sortingproperty) == 'table' then
sortingproperty = options.sortingproperty
elseif type(options.sortingproperty) == 'string' then
sortingproperty = {options.sortingproperty}
end
return getqualifierbysortingproperty(claim, sortingproperty)
end
function get_entityId(options)
local id = options.entityId
if not id or id == "" then
if options.page and options.page ~= "" then
id = mw.wikibase.getEntityIdForTitle( options.page )
end
end
mw.log("id :" .. id)
return id
end
function getDateArb(claim, options)
local sortingproperty = options.sortingproperty or 'P569'
if claim.mainsnak.snaktype == 'value' then
local item = claim.mainsnak.datavalue.value['numeric-id']
if claim.mainsnak.datavalue.value['entity-type'] == 'item' then
item = 'Q' .. item
elseif claim.mainsnak.datavalue.value['entity-type'] == 'property' then
item = 'P' .. item
end
return formatStatements({property = sortingproperty, entityId = item, enbarten = 'true', sortbytime = 'chronological', noref = 'true'})
end
end
function descriptionIn(langcode , id) -- returns item description for a given language
local lan = langcode or 'ar'
if not mw.wikibase then return nil end
local description, lange = mw.wikibase.getDescriptionWithLang( id )
if lange == lan
then
return description
else
return nil
--return str
end
--[[local entity = mw.wikibase.getEntityObject(id)
if entity
and entity.descriptions
and entity.descriptions[''..lan..'']
and entity.descriptions[''..lan..''].value
then
local lang = entity.descriptions[''..lan..'']
if lang['language'] == lan then
return entity.descriptions[''..lan..''].value
else return nil end
end
]]
end
function labelIn(langcode,id) -- returns item label for a given language
if not mw.wikibase then return nil end
local lan = langcode or 'ar'
local label, lange = mw.wikibase.getLabelWithLang( id )
if lange == lan
then
return label
else
return nil
--return str
end
--[[local entity = mw.wikibase.getEntityObject(id)
if entity
and entity.labels
and entity.labels[''..lan..'']
and entity.labels[''..lan..''].value
then
local lang = entity.labels[''..lan..'']
if lang['language'] == lan then
return entity.labels[''..lan..''].value
else return nil end
end
]]
end
function comparedates(a, b) -- returns true if a is earlier than B or if a has a date but not b
if a and b then
return a > b
elseif a then
return true
end
end
function preferqualifier(claims, options)
local claims2 = {}
for i, statement in pairs( claims ) do --
if statement.qualifiers and statement.qualifiers[options.preferqualifier:upper()] then
if options.preferqualifiervalue and options.preferqualifiervalue ~= '' then
local active = false
for k, t in pairs(mw.text.split(options.preferqualifiervalue,',')) do
for j, value in pairs(formatStatements({property=options.preferqualifier:upper(), raw = 'true', formatting = 'raw'}, statement.qualifiers)) do
if value.item == t and not active then
--if value == t and not active then
table.insert( claims2, statement)
active = true
end
end
end
else
table.insert( claims2, statement)
end
end
end
return claims2
end
function sortbyqualifier(claims, options)
table.sort(claims, function(a,b)
local timeA = getDate(a, options)
local timeB = getDate(b, options)
if options.sortbytime == 'inverted' then
return comparedates(timeB, timeA)
else
return comparedates(timeA, timeB)
end
end
)
return claims
end
function sortbyarb(claims, options)
table.sort(claims, function(a,b)
local timeA = getDateArb(a, options)
local timeB = getDateArb(b, options)
if options.sortbyarbitrary == 'inverted' then
return comparedates(timeB, timeA)
else
return comparedates(timeA, timeB)
end
end
)
return claims
end
function Labelfunction( entityId, label ,labeloption , options) -- label with no arwiki sitelink
if options.illwd2nowd and options.illwd2nowd ~= '' then noWD='' else noWD='y' end
local jlabel = label --formatcharacters(label, options) -- The label
local ar = labelIn('ar',entityId ) -- The arabic label
local arlabel = ar --formatcharacters(ar, options)
if labeloption and labeloption ~= '' then
jlabel = labeloption
elseif options.illwd2 and options.illwd2 ~= '' then
if arlabel and arlabel ~= '' then
jlabel = mw.getCurrentFrame():expandTemplate{ title = 'Ill-WD2', args = {arlabel, id=entityId, y = (options.illwd2y or '') } }
else
jlabel = mw.getCurrentFrame():expandTemplate{ title = 'Ill-WD2', args = {id=entityId, target='en', y = (options.illwd2y or '') } }
end
elseif options.enlabelcate and options.enlabelcate ~= '' then
if not arlabel or arlabel == '' then
jlabel = label --formatcharacters(label, options)
if jlabel and jlabel ~= '' then
jlabel = jlabel ..' [['.. i18n.noarabiclabel ..'|'.. entityId ..']]'
end end
else--if options.justarabic and options.justarabic ~= '' then
if arlabel and arlabel ~= ''
then jlabel = arlabel
else jlabel = nil
end
end
if jlabel and jlabel ~= ''
then
return jlabel.. catewikidatainfo(options)
end
end
function getEntityFromId( id )
if not mw.wikibase then return nil end
if id and id ~= "" then
return mw.wikibase.getEntityObject( id )
else
return mw.wikibase.getEntityObject()
end
end
function getEntityIdFromValue( value )
if value['entity-type'] == 'item' then
return 'Q' .. value['numeric-id']
elseif value['entity-type'] == 'property' then
return 'P' .. value['numeric-id']
else
return formatError( 'unknown-entity-type' )
end
end
function formatError( key )
return i18n.errors[key]
end
function formatOneStatement( statement ,ref , options)
local vava = nil
local stat = formatStatement( statement, options )
if stat then
local s = stat.value
local d = stat.datum
local tf = stat.tifr
local awardqual = stat.foto
local pr = stat.pr
--local utgivort = stat.utgivort
local ro = stat.ro
local qp1a = stat.qp1a
local onlyqualifier = stat.onlyqualifier
local qp1 = stat.qp1
local qp2 = stat.qp2
local qp3 = stat.qp3
local qp4 = stat.qp4
local qp5 = stat.qp5
local amatch =stat.amatch
local reff =stat.reff
local goal =stat.goal
local start2 = stat.start1
local finish2 = stat.finish1
local before2 = stat.before1
local after2 = stat.after1
local constituency2 = stat.constituency1
local series2 = stat.series1
local electedin2 = stat.electedin1
local P1001 = stat.pp1001
local P108 = stat.pp108
local P642 = stat.pp642
if s == '' then s = nil end
if s then
if reff and options.reff and options.reff ~= '' then
s= s .. reff
end
if options.template and options.template ~= '' then
s = mw.getCurrentFrame():expandTemplate{ title = options.template
, args ={stat.QQ1
,s
,stat.QQ2
,stat.QQ3
,stat.QQ4
,stat.QQ5
,stat.QQ6
,stat.QQ7
,stat.QQ8
,stat.QQ9
,stat.QQ10} }
end
if options.football and options.football ~= '' then
s =mw.getCurrentFrame():expandTemplate{ title = "صندوق معلومات سيرة كرة قدم/سطر فريق", args = {(start2 or ''),(finish2 or '') ,s,amatch,goal } }
end
if options.office and options.office ~= '' then
s = mw.getCurrentFrame():expandTemplate{ title = "معلومات صاحب منصب/منصب ويكي بيانات/نواة", args =
{office = s,
termstart = start2,
termend = finish2,
constituency = constituency2,
predecessor = before2,
successor = after2,
series= series2,
of=P642,
electedin=electedin2,
jurisdiction=P1001,
employer=P108,
entityId=options.entityId
} }
end
function qoo(Prefix,qualpref,p,Suffix)
if p and p ~='' then
return mw.text.tag('small', {}, (Prefix or ' (').. (qualpref or '') .. p .. (Suffix or ')')) end
end
QPrefix = options.qualifierprefix
QSuffix = options.qualifiersuffix
if qp1 and qp1 ~='' and options.qual1 and options.qual1 and qp1a and qp1a ~='' and options.qual1a and options.qual1a ~= ''
then
s = s .. qoo(QPrefix, options.qual1pref, qp1, QSuffix) .. qoo(QPrefix, options.qp1apref, qp1a, QSuffix)
elseif qp1 and qp1 ~='' and options.qual1 and options.qual1 ~= '' then
s = s .. qoo(QPrefix, options.qual1pref, qp1, QSuffix)
elseif qp1a and qp1a ~='' and options.qual1a and options.qual1a ~= '' then
s = s .. qoo(QPrefix, options.qp1apref, qp1a, QSuffix)
end
if qp2 and qp2 ~='' and options.qual2 and options.qual2 ~= '' then s = s .. qoo(QPrefix, options.qual2pref, qp2, QSuffix) end
if qp3 and qp3 ~='' and options.qual3 and options.qual3 ~= '' then s = s .. qoo(QPrefix, options.qual3pref, qp3, QSuffix) end
if qp4 and qp4 ~='' and options.qual4 and options.qual4 ~= '' then s = s .. qoo(QPrefix, options.qual4pref, qp4, QSuffix) end
if qp5 and qp5 ~='' and options.qual5 and options.qual5 ~= '' then s = s .. qoo(QPrefix, options.qual5pref, qp5, QSuffix) end
if options.justthisqual and options.justthisqual ~= '' then if onlyqualifier then s = onlyqualifier
else s = nil end end -- We need only the qualifier
if ro and ro ~='' and options.withro and options.withro ~= '' then s = s .. qoo(QPrefix, '' , ro, QSuffix) end
if d and d ~='' and options.withdate and options.withdate ~= '' then
if options.withdate == 'y' then s = s .. qoo(QPrefix, 'سنة ' , d, QSuffix)
elseif options.withdate == 'before' then s = '*' .. d ..':' .. s..'\n'
else s = s .. qoo(QPrefix, '' , d, QSuffix)
end
end
if awardqual and options.awardqua and options.awardqua ~= '' then s = s .. qoo(QPrefix, '' , awardqual, QSuffix) end
if tf and options.bothdates and options.bothdates ~= '' then
if options.bothdates == 'line'
then s = s .. mw.text.tag('br') .. qoo(QPrefix, '' , tf, QSuffix)
elseif options.bothdates == 'before'
then s = qoo(QPrefix, '' , tf, QSuffix) .. s
else
s = s .. qoo(QPrefix, '' , tf, QSuffix)
end
end
--if utgivort and options.withutgivort and options.withutgivort ~= '' then
--if options.withutgivort == 'قوسين' then s = s .. ' ' .. qoo(QPrefix, '' , utgivort, QSuffix)
--else s = s .. ' ' .. utgivort
--end
--end
if pr and pr ~= '' and options.getsimpleproperty and options.getsimpleproperty ~= '' then
if options.getsimpleproperty == 'f?dd' then s = s .. ' ' .. qoo(QPrefix, 'f. ' , pr, QSuffix)
elseif options.getsimpleproperty == 'parentes' then s = s .. ' ' .. qoo(QPrefix, '' , pr, QSuffix)
elseif options.getsimpleproperty == 'avn?gon' then s = s .. ' ' .. mw.text.tag('span', {}, ' av ' .. pr .. '')
end
end
if type(ref) == 'table' or (options.noref and options.noref ~='') or (options.justthisqual and options.justthisqual ~='')
then
--table.insert( formattedStatements, s )
vava = s
else
local t = formatReferences( statement, options )
stat.ref = t
if options.justref and options.justref ~= ''
then
vava = t
elseif options.onlyvaluewithref and options.onlyvaluewithref ~= '' then
if t and t ~= "" then
vava = s .. t
end
else
vava = s .. t
end
end
end
--table.insert(statementsraw, stat)
end
return { v = vava , raw = stat}
end
function formatStatements( options, ref )
local formattedStatements = {}
local claims = {}
if not options.property then return formatError( 'property-param-not-provided' ) end
if type(ref) == 'table' then -- f?r de fall d?r funktionen anropas och alla claims redan finns i en tabell
claims = ref[options.property] or {}
else
--Get entity
local entity = nil
if options.entity and type( options.entity ) == "table" then
entity = options.entity
else
--entity = getEntityFromId( options.entityId )
id = get_entityId( options )
entity = getEntityFromId( id )
end
if not entity then return '' end --TODO error?
if not entity.claims or not entity.claims[options.property:upper()] then
return '' --TODO error?
end
--Format statement and concat them cleanly
if options.rank == 'best' or not options.rank then
claims = entity:getBestStatements( options.property:upper() )
elseif options.rank == 'valid' then
for i, statement in pairs( entity.claims[options.property:upper()] ) do
if statement.rank == 'preferred' or statement.rank == 'normal' then
table.insert( claims, statement )
end
end
elseif options.rank == 'all' then
for i, statement in pairs( entity.claims[options.property:upper()] ) do
table.insert( claims, statement )
end
else
for i, statement in pairs( entity.claims[options.property:upper()] ) do
if statement.rank == options.rank then
table.insert( claims, statement )
end
end
end
if options.avoidqualifier then -- to avoid value with a given qualifier
local claims2 = {}
for i, statement in pairs( claims ) do
if not statement.qualifiers or not statement.qualifiers[options.avoidqualifier:upper()] then
table.insert( claims2, statement)
end
end
claims = claims2
if options.preferqualifier and options.preferqualifier ~= '' then
claims = preferqualifier(claims, options)
end
end
--om det finns vissa statements som har en qualifier som s?ger "spr?k = svenska", ta bara med dessa
--alternativt om det finns statements som har en qualifier som s?ger "skriptsystem == latinska alfabetet"
if not options.langpref or options.langpref == '' then
local claims2 = {}
for i, statement in pairs( claims ) do
if statement.qualifiers and statement.qualifiers.P407 then
for k, v in pairs( statement.qualifiers.P407 ) do
if v.snaktype == 'value' and v.datavalue.value['numeric-id'] == 13955 then -- Q13955 = 'العربية'
table.insert( claims2, statement )
end
end
elseif statement.qualifiers and statement.qualifiers.P282 then
for k, v in pairs( statement.qualifiers.P282 ) do
if v.snaktype == 'value' and v.datavalue.value['numeric-id'] == 8196 then -- Q8196 = 'أبجدية عربية'
table.insert( claims2, statement )
end
end
end
end
if #claims2 > 0 then
claims = claims2
end
end
if options.sortbytime == 'chronological' or options.sortbytime == 'inverted' then
claims = sortbyqualifier(claims, options)
elseif options.sortbyarbitrary == 'chronological' or options.sortbyarbitrary == 'inverted' then
claims = sortbyarb(claims, options)
end
end
if options.enbarten and options.enbarten ~= '' and #claims > 1 then
claims = {claims[1]}
end
local statementsraw = {}
if claims then
--==========================================
if options['property-module'] or options['property-function'] then
if not options['property-module'] or not options['property-function'] then
return formatError( 'unknown-property-module' )
end
local formatter = require ('Module:' .. options['property-module'])
if not formatter then
return formatError( 'property-module-not-found' )
end
local fun = formatter[options['property-function']]
if not fun then
return formatError( 'property-function-not-found' )
end
mw.log("work with property-module: " .. options['property-module'] .. "|" .. options['property-function'])
return fun( claims, options )
else
--==========================================
for i, statement in pairs( claims ) do
options.num = i
local va = formatOneStatement( statement,ref, options )
if va.v then
table.insert( formattedStatements, va.v )
end
table.insert( statementsraw, va.raw )
end
end
end
local Separator = options.separator-- or ""
local Conjunction = options.conjunction-- or ""
if Conjunction and Conjunction == "br" then Conjunction = "\n" end
if Separator and Separator == "br"
then
Separator = "\n"
Conjunction = "\n"
end
local tot = mw.text.listToText( formattedStatements, Separator, Conjunction )
if tot == '' then tot = nil end
if options.raw and options.raw ~= '' then
return statementsraw
end
return tot
end
function formatReferences( statement, options )
local reference = {}
if statement.references then
local cite = require('وحدة:Cite')
for i, ref in pairs(statement.references) do
local items = {}
if ref.snaks then
s = cite.citeitem2(ref , options )
--s = cite.citeitem( items , ref.snaks , ref.hash , options )
end
table.insert(reference, s)
end
end
local final = table.concat(reference)
if final and final ~= '' then
final = final .. i18n.cateref
end
return final
end
function formatqualifiers( statement,s, options )
function qua(p,enbarten,modifytime)
if p and p ~='' then return (formatStatements({property =p,enlabelcate = 't', enbarten = (enbarten or '')
,modifytime = (modifytime or 'longdate'), noref = 'true'}, statement.qualifiers) or '') end
end
if options.template and options.template ~= '' then
s.QQ1 = qua(options.Q1)
s.QQ2 = qua(options.Q2)
s.QQ3 = qua(options.Q3)
s.QQ4 = qua(options.Q4)
s.QQ5 = qua(options.Q5)
s.QQ6 = qua(options.Q6)
s.QQ7 = qua(options.Q7)
s.QQ8 = qua(options.Q8)
s.QQ9 = qua(options.Q10)
s.QQ10 = qua(options.Q10)
end
if statement.qualifiers.P1350 or statement.qualifiers.P1351 then
s.amatch = qua("P1350",'true')
s.goal = qua("P1351",'true')
end
if statement.qualifiers.P580 or statement.qualifiers.P582 or statement.qualifiers.P1365 or statement.qualifiers.P1366 then
s.start1 = qua("P580",'true')
s.finish1 = qua("P582",'true')
s.before1 = qua("P1365",'true')
s.after1 = qua("P1366",'true')
s.constituency1 = qua("P768")
s.series1 = qua("P1545")
s.electedin1 = qua("P2715",'')
s.pp1001 = qua("P1001")
s.pp108 = qua("P108")
s.pp642 = qua("P642")
end
if statement.qualifiers.P585 then
s.datum = qua("P585",'true',options.modifyqualifiertime)
end
local qwe = options.qwer
if statement.qualifiers.qwe then
s.ro = qua(qwe,'true')
end
if statement.qualifiers.P574 then
s.dateoftaxpub = qua("P574",'true',options.modifyqualifiertime)
end
if statement.qualifiers.P405 then
local author = {}
for i, j in pairs(statement.qualifiers.P405) do
if j.snaktype == 'value' then
local item = 'Q' .. j.datavalue.value['numeric-id']
local authorname = formatStatements({property = "P428", entityId = item, noref = 'true', enbarten = 'true'})
if author and authorname ~= '' then
table.insert(author, formatEntityId(item, {label = authorname }).value)
else
table.insert(author, formatEntityId(item, {}).value)
end
end
end
s.auktor = mw.text.listToText(author, ', ', ' & ')
end
if statement.qualifiers.P580 or statement.qualifiers.P582 then
local f = qua("P580",'true',options.modifyqualifiertime)
local t = qua("P582",'true',options.modifyqualifiertime)
s.tifr = f .. '–' .. t
end
if statement.qualifiers.P585 or statement.qualifiers.P1346 then
local fo = qua("P585",'true',options.modifyqualifiertime)
local to = qua('P1346','true')
s.foto = fo .. ' ' .. mw.text.tag('span', {}, ' ' .. to .. '')
end
function quaaal(opti,options)
if opti and opti ~='' and statement.qualifiers[opti] then
return (formatStatements({property = opti, noref = 'true', separator = options.qualifierseparator
, conjunction = options.qualifierconjunction,size =options.size,image =options.image
, modifytime = options.modifyqualifiertime,enlabelcate = 't',langpref = options.langpref,showlang = options.showlang}
, statement.qualifiers) or '')
end
end
--if statement.qualifiers.P291 then -- خاصية بلد النشر
--s.utgivort = quaaal('P291',options)
--end
if statement.qualifiers.P2096 then
s.bildtext = formatStatements({property = "P2096", noref = 'true', langpref = (options.langpref or 'ar')}, statement.qualifiers)
end
if options.justthisqual and options.justthisqual ~= '' and statement.qualifiers[options.justthisqual] then
s.onlyqualifier = quaaal(options.justthisqual,options)
end
if options.qual1 and options.qual1 ~= '' and statement.qualifiers[options.qual1] then s.qp1 = quaaal(options.qual1,options) end
if options.qual1a and options.qual1a ~= '' and statement.qualifiers[options.qual1a] then s.qp1a = quaaal(options.qual1a,options) end
if options.qual2 and options.qual2 ~= '' and statement.qualifiers[options.qual2] then s.qp2 = quaaal(options.qual2,options) end
if options.qual3 and options.qual3 ~= '' and statement.qualifiers[options.qual3] then s.qp3 = quaaal(options.qual3,options) end
if options.qual4 and options.qual4 ~= '' and statement.qualifiers[options.qual4] then s.qp4 = quaaal(options.qual4,options) end
if options.qual5 and options.qual5 ~= '' and statement.qualifiers[options.qual5] then s.qp5 = quaaal(options.qual5,options) end
end
function formatStatement( statement, options )
if options['claim-module'] or options['claim-function'] then
if not options['claim-module'] or not options['claim-function'] then
return {value = formatError( 'unknown-claim-module' )}
end
local formatter = require ('Module:' .. options['claim-module'])
if not formatter then
return {value = formatError( 'claim-module-not-found' )}
end
local fun = formatter[options['claim-function']]
if not fun then
return {value = formatError( 'claim-function-not-found' )}
end
return {value = fun( statement, options )}
elseif statement.type == 'statement' then
local s = formatSnak( statement.mainsnak, options )
if s and s ~= '' then
if statement.references then
if options.reff and options.reff ~= '' then
s.reff = formatReferences( statement, options )
end
end
if statement.qualifiers then
qualu = formatqualifiers( statement,s, options )
if qualu and qualu ~= '' then table.insert(qualu) end
end
end
return s
elseif not statement.type then
return formatSnak( statement, options )
end
return {value = formatError( 'unknown-claim-type' )}
end
function formatSnak( snak, options )
if snak.snaktype == 'somevalue' then
if options.somevalue then
if options.somevalue == '' then
return nil
else
return {value = options.somevalue}
end
end
return {value = i18n['somevalue']}
elseif snak.snaktype == 'novalue' then
if options.novalue then
if options.novalue == '' then
return nil
else
return {value = options.novalue}
end
end
return {value = i18n['novalue']}
elseif snak.snaktype == 'value' then
local s = formatDatavalue( snak.datavalue, snak.datatype, options )
if s and s.value and options.prefix and options.prefix ~= '' then
s.value = options.prefix .. s.value
end
if s and s.value and options.suffix and options.suffix ~= '' then
s.value = s.value .. options.suffix
end
if s and s.item and options.getsimpleproperty and options.getsimpleproperty ~= '' and options.getproperty and options.getproperty ~= '' then
local pr = formatStatements({property = options.getproperty, entityId = s.item, enbarten = options.getenbarten, noref = 'true', modifytime = options.getmodifytime, raw = options.getraw})
if pr then s.pr = pr end
end
return s
else
return {value = formatError( 'unknown-snak-type' )}
end
end
--[[
datatype wikibase-item
]]
function formatwikibaseitem( datavalue, datatype, options )
if options.formatting and options.formatting ~= ''
then
if options.formatting == 'raw' then
return {value = getEntityIdFromValue( datavalue.value )}
elseif options.formatting == 'fu' then
return {value = mw.getCurrentFrame():expandTemplate{ title = "Cycling race/stageclassification1"
, args = {getEntityIdFromValue( datavalue.value )}} }
elseif options.formatting == 'sitelink' then -- for Wikidata property giving Wikimedia list
return {value = formatsitelink(datavalue.value.id , options ) }
else
return {value = formatFromPattern( formatcharacters(datavalue.value, options), options )}
end
elseif options.property1 and options.property1 ~= '' then
for i, statement in pairs( datavalue ) do
local entit = getEntityIdFromValue( datavalue.value )
local caca = formatStatements( {property =options.property1, entityId = entit, noref =options.noref ,rank=options.rank,pattern =options.property1pattern,formatting=options.property1formatting,size =options.size,image =options.image,noref='true',enbarten ='true' })
local asdf = formatEntityId( entit , options ).value
if asdf and asdf ~= '' then
if caca and caca ~= '' then
local cooooca = (options.property1pref or '') ..''.. caca ..''.. (options.property1suff or '')
if options.property1after and options.property1after ~= "" then
return {value = asdf .. cooooca }
else
return {value = cooooca .. ' '.. asdf }
end
else
return {value = asdf }
end
end
end
elseif options.propertyimage and options.propertyimage ~= '' then
for i, statement in pairs( datavalue ) do
local entit = getEntityIdFromValue( datavalue.value )
local caca = formatStatements( {property =options.propertyimage , entityId = entit, noref =options.noref ,rank=options.rank,pattern =options.pattern,formatting =options.propertyimageformatting ,size =options.size,image =options.image,noref='true',enbarten ='true' })
local asdf = formatEntityId( entit , options ).value
if caca and caca ~= '' then return {value = caca } else
end
end
elseif options.property2 and options.property2 ~= '' then
for i, statement in pairs( datavalue ) do
local entit = getEntityIdFromValue( datavalue.value )
local caca = formatStatements( {property =options.property2, entityId = entit, noref =options.noref ,rank=options.rank,pattern =options.property2pattern,size =options.size,image =options.image,propertyimage =options.property3,enbarten ='true' })
local asdf = formatEntityId( entit , options ).value
if asdf and asdf ~= '' then
if caca and caca ~= '' then return {value = caca .. ' '.. asdf } else return {value = asdf } end
end
end else
return {value = formatEntityId( getEntityIdFromValue( datavalue.value ), options ).value, item = getEntityIdFromValue( datavalue.value )}
end
end
--[[
datatype wikibase-property
]]
function formatwikibaseproperty( datavalue, datatype, options )
if options.formatting and options.formatting ~= ''
then
if options.formatting == 'raw' then
tid = getEntityIdFromValue( datavalue.value )
else
end
else
tid = formatEntityId( getEntityIdFromValue( datavalue.value ), options ).value
end
return {value = tid}
end
--[[
tabular-data
]]
function formattabulardata( datavalue, datatype, options )
data= '[[commons:' .. datavalue.value .. '|' .. datavalue.value .. ']]'
return {value = data}
end
--[[
geo-shape
]]
function formatgeoshape( datavalue, datatype, options )
shape = '[[commons:' .. datavalue.value .. '|' .. datavalue.value .. ']]'
return {value = shape}
end
--[[
commonsMedia
]]
function formatcommonsMedia( datavalue, datatype, options )
if options.image and options.image ~= '' then -- return real image
tid = '[[file:' .. datavalue.value .. '|'.. (options.size or '60')..'px|'..'border'..']]'
else
tid = formatcharacters(datavalue.value, options)
end
return {value = tid}
end
--[[
datatype math
]]
function formatmath( datavalue, datatype, options )
--return {value = mw.text.tag('math', {}, ''.. datavalue.value..'') } -- that doesn't work well
return {value =mw.getCurrentFrame():callParserFunction( '#tag:math', ''.. datavalue.value..'' ) }
end
--[[
datatype string - external-id
]]
function formatstring( datavalue, datatype, options )
--old value: auktoritetsdata , auktoritetsdata2 , auktoritetsdata3
if options.pattern and options.pattern ~= '' then
par = options.pattern
if par == "autourl" or par == "autourl2" or par == "autourl3" or par == "autourl4"
then tid = formatcharacters(datavalue.value, options)
else tid = formatFromPattern( formatcharacters(datavalue.value, options), options )
end
else
tid = formatcharacters(datavalue.value, options)
end
return {value = tid}
end
function formatexternalid( datavalue, datatype, options )
if options.pattern and options.pattern ~= ''
then
par = options.pattern
local patter = formatStatements( {property = "P1630", entityId = options.property, enbarten = 'true', noref = 'true',rank='all' }) -- get formatter URL
--mw.log( options.property .. ':' .. patter )
local pp = formatFromPattern( datavalue.value, {pattern = patter} )
local plabel = pp
if mw.wikibase
then plabel = mw.wikibase.label( options.property ) or pp
end
ppp = mw.ustring.gsub( pp, ' ', '_' )
if patter and patter ~= '' then -- if P1630 are there
if par == "autourl" then -- like http://example.com/$1.html
tid = ppp
elseif par == "autourl2" then -- like [http://example.com/$1.html $1]
tid = '[' .. ppp .. ' ' .. datavalue.value .. ']'
elseif par == "autourl3" then -- like [http://example.com/$1.html http://example.com/$1.html]
tid = '[' .. ppp .. ' ' .. ppp .. ']'
elseif par == "autourl4" then
tid = '[' .. ppp .. ' ' .. plabel .. ']'
else
tid = formatFromPattern( formatcharacters(datavalue.value, options), options )
end
else -- P1630 are not there
if par == "autourl" or par == "autourl2" or par == "autourl3" or par == "autourl4"
then
tid = formatcharacters(datavalue.value, options) --just return value
else
tid = formatFromPattern( formatcharacters(datavalue.value, options), options )
end
end
else
tid = formatcharacters(datavalue.value, options) --just return value
end
return {value = tid}
end
--[[
datatype time
]]
function formattime( datavalue, datatype, options )
local ModuleTime = require 'Module:wikidata2/time'
local timen = datavalue.value
local modifytime = (options.modifytime or '')
local tid = ModuleTime.getdate( timen , options)
-- local tid = mw.getCurrentFrame():preprocess(mall)
if options.modifytime and options.modifytime ~= '' then
if options.modifytime == 'q' then
local mall = datavalue.value.time
tid = mw.getCurrentFrame():preprocess(mall)
elseif options.modifytime == 'precision' then
local mall = datavalue.value.precision
tid = mw.getCurrentFrame():preprocess(mall)
end
end
return {value = tid}
end
--[[
datatype globe-coordinate
]]
function formatcoordinate( datavalue, datatype, options )
--local GlobeCoordinate = require 'Module:GlobeCoordinate'
--return {value = GlobeCoordinate.newFromWikidataValue( datavalue.value ):toHtml()}
local coord = datavalue.value
local globe = datavalue.value.globe
globe2 = require('Module:Wikidata2/Globes')[globe]
if options.formatting and options.formatting ~= '' then
if options.formatting == 'latitude' then pro =coord.latitude
elseif options.formatting == 'longitude' then pro =coord.longitude
elseif options.formatting == 'dimension' then pro =coord.dimension
elseif options.formatting == 'precision' then pro =coord.precision
elseif options.formatting == 'globe' then pro = globe
elseif options.formatting == 'globe2' then pro = globe2
--elseif options.formatting == 'coord' then
--return {value = }
else
end
else
pro =
mw.getCurrentFrame():preprocess('{{ {{{|safesubst:}}}#invoke:Coordinates|coord'
.. '|'.. coord.latitude
.. '|'.. coord.longitude
.. '|display=inline'
.. '|globe:'.. globe2 ..'_type:landmark'
.. '|format='..(options.formatcoord or '')..'}}'
)..catewikidatainfo(options)
end
return {value = pro }
end
--[[
datatype quantity
]]
function formatquantity( datavalue, datatype, options )
local amount, unit, cat = datavalue.value.amount, datavalue.value.unit, nil
if unit then
unit = unit:match('Q%d+')
end
local formatera = require('وحدة:Math')
local number = formatera.newFromWikidataValue(datavalue.value)
amount = mw.ustring.gsub( amount , '+', '' )
local unitraw = unit
if unit then
-- يتحقق اذا كان هناك اي اختصار لوحدة القياس
local lab = options.label
or formatStatements({property = 'P498', entityId = unit, enbarten = 'true', noref = 'true'})
or formatStatements({property = 'P558', entityId = unit, enbarten = 'true', langpref = options.langpref, noref = 'true'})
if lab and ( not options.nounitshort or options.nounitshort == '' ) then
local s = formatEntityId( unit, {label = lab ,enlabelcate ='t' , nolink = (options.nounitlink or options.nolink) })
unit = s.value
cat = s.cat
else -- om det inte finns en f?rkortning
local s = formatEntityId( unit, {nolink = options.nounitlink ,enlabelcate ='t'})
unit = s.value
cat = s.cat
end
end
local Value = amount .. ' ' .. (unit or '')
if options.nounit and options.nounit ~= "" then
Value = amount
end
return {value = Value, amount = amount, unit = unit, unitraw = unitraw, cat = cat}
end
--[[
datatype url
]]
function formaturl( datavalue, datatype, options )
local label = options.label or options.urllabel
va = mw.ustring.gsub( datavalue.value, ' ', '_' )
if not label and options.property =='P856' then label = 'الموقع الرسمي' end
if label and label ~= '' then
pro = '[' .. va .. ' ' .. label .. ']'
else
-- if property =='P856' then pro = formatFromPattern( formatcharacters(va, options), {pattern = '[$1 الموقع الرسمي]'} )
-- else
pro = va
-- end
end
return {value = pro }
end
--[[
datatype monolingualtext
]]
function formatmonolingualtext( datavalue, datatype, options )
local Moduletext = require 'Module:wikidata2/monolingualtext'
local tid = Moduletext._main( datavalue, datatype, options )
return {value = tid}
end
function formatDatavalue( datavalue, datatype, options )
--Use the customize handler if provided
if options['value-module'] or options['value-function'] then
if not options['value-module'] or not options['value-function'] then
return {value = formatError( 'unknown-value-module' )}
end
local formatter = require ('Module:' .. options['value-module'])
if not formatter then
return {value = formatError( 'value-module-not-found' )}
end
local fun = formatter[options['value-function']]
if not fun then
return {value = formatError( 'value-function-not-found' )}
end
return {value = fun( datavalue, datatype, options )}
end
--Default formatters
if datatype == 'wikibase-item' then return formatwikibaseitem( datavalue, datatype, options )
elseif datatype == 'wikibase-property' then return formatwikibaseproperty( datavalue, datatype, options)
elseif datatype == 'commonsMedia' then return formatcommonsMedia( datavalue, datatype, options)
elseif datatype == 'math' then return formatmath( datavalue, datatype, options )
elseif datatype == 'time' then return formattime( datavalue, datatype, options )
elseif datatype == 'external-id' then return formatexternalid( datavalue, datatype, options )
elseif datatype == 'string' then return formatstring( datavalue, datatype, options )
elseif datatype == 'globe-coordinate' then return formatcoordinate( datavalue, datatype, options )
elseif datatype == 'quantity' then return formatquantity( datavalue, datatype, options )
elseif datatype == 'url' then return formaturl( datavalue, datatype, options )
elseif datatype == 'monolingualtext' then return formatmonolingualtext( datavalue, datatype, options )
elseif datatype == 'geo-shape' then return formatgeoshape( datavalue, datatype, options )
elseif datatype == 'tabular-data' then return formattabulardata( datavalue, datatype, options )
else
return {value = formatError( 'unknown-datatype' )}
end
end
function formatEntityId( entityId, options )
local label = options.label or mw.wikibase.label( entityId )
if label == '' then
label = mw.wikibase.label( entityId ) or nil
end
local link = mw.wikibase.sitelink( entityId )
if link and (not options.nolink or options.nolink == '') then
if label and label ~= '' then
return {value = '[[:' .. link .. '|' .. formatcharacters(label, options) .. ']]'.. catewikidatainfo(options), label = label }
else
return {value = '[[:' .. link .. '|' .. formatcharacters(link, options) .. ']]'.. catewikidatainfo(options), label = link }
end
else
if label and label ~= ''
then
local label3 = Labelfunction( entityId, label,options.label, options)
return {value = label3 , label = label}
else return ''
end
return '' --{value = entityId, cat = 'som har labels med Qid', label = entityId}
end
end
--[[
function to get any link from any sister project
]]
function sitelink_g( id , wikisite )
if not mw.wikibase then return '' end
local site = wikisite or 'arwiki'
local link = mw.wikibase.sitelink( id , site ) or ""
--mw.log("mw.wikibase.sitelink,site: " .. site.. ",link:" .. link )
return link
end
function sitelink( id , wikisite )
local site = wikisite or 'arwiki'
if not mw.wikibase then return '' end
local entity = mw.wikibase.getEntityObject(id)
if entity
and entity.sitelinks
and entity.sitelinks[''..site..'']
and entity.sitelinks[''..site..''].site
and entity.sitelinks[''..site..''].title
then
if entity.sitelinks[''..site..''].site == site then
return entity.sitelinks[''..site..''].title
else return ''
end
end
end
--[[
function to get only the value with link
]]
function formatsitelink( entityId, options )
local link = sitelink( entityId )
if link and link ~= '' then
if not options.nolink or options.nolink == '' then
--return '[[' .. formatcharacters(link, options) .. ']]'.. catewikidatainfo(options)
return '[[' .. link .. ']]'.. catewikidatainfo(options)
else
return link -- formatcharacters(link, options)
end
else
return ''
end
end
--[[
function to replace $1 with string
]]
function formatFromPattern( str, options )
--if options.pattern and options.pattern ~='' then
--mw.log( str .. ':' .. options.pattern )
return mw.ustring.gsub( options.pattern, '$1', str ) --الحصول على اول نتيجة للدالة
-- else return str
--end
end
function addTrackingCategory(prop,options)
local cat = require('Module:Wikidata/تتبع').makecategory1
local category = cat(options)
if prop and prop ~= '' then
if category and category ~= '' then
return prop .. ' ' .. category
else
return prop .. ' '
end
end
end
-- Function to check whether a certain item is a parent of a given item.
-- If pExitItem is reached without finding the searched parent item, the search stops.
-- A parent is connected via P31 or P279.
-- Attention: very intensive function, use carefully!
function isParent(property, pItem, pParent, pExitItem, pMaxDepth, pDepth)
if not pDepth then pDepth = 0 end
if not mw.wikibase then return false end
local entity = mw.wikibase.getEntity(pItem)
if not entity then return false end
local claims31
local claims279
if entity.claims then
if property and property ~= '' then
claims31 = entity.claims[mw.wikibase.resolvePropertyId(property)]
else
claims31 = entity.claims[mw.wikibase.resolvePropertyId('P31')]
claims279 = entity.claims[mw.wikibase.resolvePropertyId('P279')]
end
else
return false
end
function getSnakValue(snak)
if snak.snaktype == "value" then
if snak.datavalue.type == "wikibase-entityid" then
data = snak.datavalue.value['numeric-id']
return data
end
end
end
if not claims31 and not claims279 then return false end
local parentIds = {}
if claims31 and #claims31 > 0 then
for i, v in ipairs(claims31) do parentIds[#parentIds+1] = getSnakValue(v.mainsnak) end
end
if claims279 and #claims279 > 0 then
for i, v in ipairs(claims279) do parentIds[#parentIds+1] = getSnakValue(v.mainsnak) end
end
-- check if searched parent or exit item is reached or do recursive call
if not parentIds[1] or #parentIds == 0 then return false end
local itemString = ""
local result = nil
for i, v in ipairs(parentIds) do
if not v then return false end
itemString = "Q" .. v
if itemString == pParent then
-- successful!
return true
elseif itemString == pExitItem then --or itemString == "Q35120"
-- exit if either "exit item" or node item (Q35120) is reached
return false
else
if pDepth+1 < pMaxDepth then
result = isParent(property, itemString, pParent, pExitItem, pMaxDepth, pDepth+1)
else return false end
if result == true then return result end
end
end
do return false end
end
function isSubclass(options)
if not options.parent then return false end
local maxDepth
maxDepth = tonumber(options.maxDepth) or 10
if not type(maxDepth) == "number" then maxDepth = 5 end
property = options.property
local result
result = isParent(property, options.id, options.parent , options.exitItem, maxDepth)
if options.returnInt then
if result == true then return 1 else return nil end
else
return result
end
end
local p = {}
function p.formatEntityId( entityId, options )
return formatEntityId( entityId, (options or {}) )
end
--[[
function to add tracking category
]]
--[[
The main function
]]
function p.formatStatements( frame, key )
local args = frame.args
--If a value if already set, use it
if args.value and args.value ~= '' then
return args.value
end
local prop = formatStatements( frame.args, key )
if prop and prop ~= '' then
if args.mainprefix and args.mainprefix ~= '' then -- mainprefix
prop = args.mainprefix .. prop
end
if args.mainsuffix and args.mainsuffix ~= '' then -- mainsuffix
prop = prop .. args.mainsuffix
end
if args.addTrackingCat and args.addTrackingCat ~= '' then -- add tracking cat
prop = addTrackingCategory(prop,frame.args)
end
if args.mainsuffixAfterIcon and args.mainsuffixAfterIcon ~= '' then -- another suffix but after wikidata icon
prop = prop .. args.mainsuffixAfterIcon
end
else
if args.NoPropValue and args.NoPropValue ~= '' then -- value if no local value and no wikidata value
prop = args.NoPropValue
end
end
return prop
end
function p.formatStatementsFromLua( options, key ) -- main function but to use from lua module
--If a value if already set, use it
if options.value and options.value ~= '' then
return options.value
end
local s = formatStatements( options, key )
if s == '' then
s = nil
end
if options.addTrackingCat and options.addTrackingCat ~= '' then -- add tracking cat
s= addTrackingCategory(s,options)
end
return s
end
function p.isSubclass(frame)
return isSubclass(frame.args)
end
-- Return the site link for a given data item and a given site (the current site by default)
function p.getSiteLink( frame )
local site = frame.args[2] or frame.args.site
local id = frame.args[1] or frame.args.id
if not id or id == "" then
if frame.args.page and frame.args.page ~= "" then
id = mw.wikibase.getEntityIdForTitle( frame.args.page )
end
end
local link = sitelink( id , site )
if link and link ~= '' then
return link
end
end
function p.getSiteLink1(frame)
local project = frame.args[1]
local id = frame.args[2]
local link =sitelink( id , project )
var = link
return var
end
-- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata
function p.pageId(frame)
local entity = mw.wikibase.getEntityObject()
if not entity then return nil else return entity.id 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 descriptionIn( langcode ,id )
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 labelIn( langcode ,id )
end
function p.ViewSomething(frame) -- from en:Module:Wikidata
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
if f.args.id and f.args.id ~='' then aa = f.args.id end
local data = mw.wikibase.getEntityObject(aa)
if not data then
return nil
end
local i = 1
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.Dump(frame)
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
if f.args.id and f.args.id ~='' then aa = f.args.id end
local data = mw.wikibase.getEntityObject(aa)
if not data then
return i18n.warnDump
end
local i = 1
while true do
local index = f.args[i]
if not index then
return frame:extensionTag("source", mw.dumpObject(data),{ lang= 'lua'}).. i18n.warnDump
end
data = data[index] or data[tonumber(index)]
if not data then
return i18n.warnDump
end
i = i + 1
end
end
function p.EntityIdForTitle(frame)
local title = frame.args[1]
local str = mw.wikibase.getEntityIdForTitle( title )
--mw.log(str)
return str
end
return p