وحدة:Wikidata2
هذه الوحدة نسخت في البداية من sv:Modul:Wikidata2 ومن ثم تم تطويرها هنا. 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/otheruse
- وحدة:Wikidata2/tax
- وحدة:Wikidata2/template
- وحدة:Wikidata2/time
- وحدة:Wikidata2/Flags
الاستعمال[عدل]
مثال
{{#invoke:Wikidata2|formatStatements|property=p17}}
الوسائط[عدل]
formatStatements[عدل]
طالع أيضًا: Help:Statements في ويكي بيانات
|property=
مطلوب الخاصية المطلوبة.|entityId=
أو|id=
معرف عنصر ويكي بيانات.|page=
يمكن إستخدامه بدلاً من|entityId=Q805
كالتالي:|page=اليمن
.
|enbarten=
أو|firstvalue=
يعرض أول قيمة فقط في الخاصية.|firstvalue=2
يعرض القيمة الثانية في الخاصية إن كانت موجودة، يمكن استخدام هذا الخيار حتى رقم 9.
|numval=
يعرض عدد محدد من القيم في الخاصية.|numval=4
يعرض القيم الأربع الأولى في الخاصية إن كانت موجودة.
|prefix=
بادئة|suffix=
لاحقة|formatting=
يحدد تنسيق القيم يستخدم مع ⧼datatypes-type-globe-coordinate⧽، و⧼datatypes-type-wikibase-item⧽، و⧼datatypes-type-wikibase-property⧽.
|label=
اذا كنت تريد الاختيار كيفية ظهور الوصلات. مثلا[[شعار مقاطعة بليكينج|الشعار]]
يمكن الحصول عليها عن طريق اضافة|label=الشعار
تؤثر هذه المعلمة على وحدات القياس.|raw=
يعود بالنتيجة خام على شكل جداول (يستخدم من داخل وحدات لوا أخرى) ويمكن معاينة ما سيكون الناتج عليه عبر إضافة خيار|rawtolua=
.
فصل القيم[عدل]
|separator=
فاصلة بين البنود|
انظر أيضاconjunction
|conjunction=
الفاصلة الأخيرة قبل اخر بند، افتراضي، و
.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P106|rank=all}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|separator=br
يضع القيم في أسطر.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P106|rank=all|separator=br}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|separator=*
يضع القيم في قائمة نقطية.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P106|rank=all|separator=*}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value).
|
تحديد عدد القيم[عدل]
|numval=2
عدد القيم المراد عرضها
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P106|rank=all|numval=2}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value).
|
رتبة القيم / rank[عدل]
طالع أيضًا: Help:Ranking في ويكي بيانات
|rank=
يحدد نوع البيانات المطلوب عرضها:
|rank=all
يظهر جميع البنود في الخاصية.|rank=valid
يظهر البنود المفضلة والتي بوضع "ترتيب عادي" ولكن لا يظهر المهملة.|rank=best
(افتراضي) يظهر القيم المفضلة.
فرز النتيجة / sort[عدل]
|sortbytime=
الترتيب حسب الوقت يفيد هذا مع المعلمة|enbarten=
أعلاه|sortbytime=chronological
ترتيب البنود حسب زمن التصفيات المذكورة.|sortbytime=inverted
عكس البند السابق.
|sortingproperty=
تحديد الخواص المدعومة، الافتراضي هو:'P585','P571','P580','P569','P582','P570'
بالترتيب، الخواص المعتمدة حالياً هي خواص الوقت. [[d:Property:P585|- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P585)]] ،[[d:Property:P571|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P571)]] ،[[d:Property:P580|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P580)]] ،[[d:Property:P569|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P569)]] ،[[d:Property:P582|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P582)]] ،[[d:Property:P570|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P570)]].
|sortingproperty=sortbyarbitrary
فرز القيم بواسطة تاريخ العناصر المرتبطة مثل تاريخ ولادة أبناء شخص "الأطفال". القيم المسموح بها هي:|sortingproperty=chronological
|sortingproperty=inverted
. وتعطى مع الخاصية المراد تفتيشها 'sortingproperty
اعلاه'.
المراجع / References / Sources[عدل]
طالع أيضًا: Help:Sources في ويكي بيانات
|noref=
أدخل قيمة في هذه المعلمة إذا كنت لا تريد جلب المصادر من ويكي بيانات.|justref=
أدخل قيمة في هذه المعلمة إذا كنت تريد جلب المصادر فقط دون ظهور القيمة!.|onlyvaluewithref=
لإظهار البيانات التي لها مراجع فقط.|numberofreferences=
لوضع حد أقصى للمراجع لكل قيمة، مثلاً عند تحديد |numberofreferences=1
يظهر مرجع واحد فقط في كل قيمة إن كان متوفراً.صياغة النص[عدل]
|formatcharacters=
تحديد صيغة اخراج القيمة، القيم المسموح بها هي:lc/uc/lcfirst/ucfirst/formatnum
|formatcharacters=lc
: تحويل جميع أحرف النص الإنجليزي إلى حروف صغيرة.|formatcharacters=lcfirst
: تحويل الحرف الأول من النص الإنجليزي إلى حرف صغير.|formatcharacters=uc
: تحويل جميع أحرف النص الإنجليزي إلى حروف كبيرة.|formatcharacters=ucfirst
: تحويل الحرف الأول من النص الإنجليزي إلى حرف كبير.|formatcharacters=formatnum
: مشروحة في #كمية.
تصفيات / Qualifiers[عدل]
طالع أيضًا: Help:Qualifiers في ويكي بيانات
|withdate=
يضيف تصفية [[d:Property:P585|- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P585)]] إذا كانت موجودة.
|bothdates=
يضيف تصفيات [[d:Property:P580|- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P580)]] و[[d:Property:P582|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P582)]] إذا كانتا موجودتان كلاهما أو إحداهما.
|bothdates=line
يضع سطر جديد قبل التاريخ،|bothdates=before
يضع التاريخ قبل القيمة،|bothdates=after
يضع التاريخ بعد القيمة.
|qual1=
يضيف تصفية محددة.|qual1=P1545
يضيف تصفية [[d:Property:P1545|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P1545)]] الى بنود الخاصية، مثال:منصب باراك أوباما + ترتيبه:
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P39|qual1=P1545|noref=true|rank=best}}
ينتج :← رئيس الولايات المتحدة (44)
فلترة النتائج[عدل]
|avoidqualifier=
يتجاهل القيم التي تحتوي تصفيات معينة، مثل:|avoidqualifier=P518
يظهر البند الذي لا يحتوي على تصفية [[d:Property:P518|- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P518)]].
- بإستخدام
|avoidqualifiervalue=
مع|avoidqualifier=
فإن ذلك يحدد قيمة التصفية إذا طابقت الوسيط|avoidqualifiervalue=
فلن يتم إظهارها، وإذا لم تطابق فسيتم إظهارها، يدعم حالياً العناصر/items فقط.
- بإستخدام
|preferqualifier=
تحديد خاصية تصفيات يجب أن تكون بيانات الخاصية متضمنتها.|preferqualifiervalue=
تحدد القيمة التي تناسب أعلاه. يدعم حالياً العناصر فقط.
|justthisqual=
يظهر فقط التصفية، إذا لم تكن التصفية موجودة لن يظهر شيء.
وسائط حسب نوع البيانات / datatype[عدل]
⧼datatypes-type-wikibase-item⧽ / item[عدل]
طالع أيضًا: Help:Items في ويكي بيانات
|nolink=
يظهر النتيجة دون وصلات.|formatting=raw
يعرض القيمة بشكل Q505.|formatting=sitelink
ينتج الوصلة إذا كانت موجودة في الويكي العربية.فلترة النتيجة[عدل]
|getonly=
يستخدم هذا الوسيط إذا أردنا الحصول على عناصر معينة التي تكون قيمة [[d:Property:P31|- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P31)]] فيها تساوي قيمة هذا الوسيط، مثال:
|getonly=Q5
للحصول على الأفراد فقط.- القيم المتعددة ممكنة، مثل :
|getonly=Q127448,Q193556
للحصول على البلديات السويدية والمناظر الطبيعية.
|getonlyproperty=
إذا أردنا استخدام خاصية أخرى بدلاً من [[d:Property:P31|- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P31)]] في البند السابق.
|avoidvalue=
يستخدم هذا الوسيط إذا أردنا أن نتجاهل أو نلغي ظهور عنصر معين، مثال عند وضع|avoidvalue=Q21769847
فتظهر النتائج دون ظهور (Q21769847).
prefervalue[عدل]
|prefervalue=
يستخدم هذا الوسيط بشكل معاكس للوسيط|avoidvalue=
حيث نقوم بتحديد القيمة التي نريد ظهورها|prefervalue=Q19481
فتظهر النتيجة للعنصر (Q19481) فقط، ولكن الفائدة من إستخدام هذا الوسيط هي التأكد من وجود العنصر في هذه الخاصية أو للحصول على التصفيات، مثال يظهر عناصر [[d:Property:P1346|- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P1346)]] مع تصفية [[d:Property:P1923|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P1923)]] بين قوسين.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q39052816|property=P1923|qual1=P1355}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
إذا كنا قد حصلنا عبر خاصية [[d:Property:P1346|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P1346)]] عن الفريق الفائز في (Q39052816). وأردنا الحصول على عدد مرات الفوز للفريق الفائز، من الجدول السابق ويتم ذلك بإستخدام الوسيط |justthisqual=
ما ينتج:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q39052816|property=P1923|justthisqual=P1355}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
ولكننا نريد ظهور التصفية للفريق الفائز فقط وهو (Q50602):
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q39052816|property=P1923|prefervalue=Q50602|qual1=P1355}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
{{#invoke:Wikidata2|formatStatements|entityId=Q39052816|property=P1923|prefervalue=Q50602|justthisqual=P1355}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
⧼datatypes-type-commonsMedia⧽ / commonsMedia[عدل]
- تظهر الصور افتراضياً كالتالي:
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P18|noref=true|rank=best}}
ينتج ← خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value).
|image=
عند استخدام هذا الوسيط في خواص الصور تظهر الصورة مباشرة.|size=
لتحديد حجم الصورة (60 افتراضياً)، ضع القيمة دون (بك/px إلخ).
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P18|image=true|noref=true|rank=best|size=100}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|center=
لجعل الصورة في الوسط ضع قيمة هذا الخيار|center=yes
.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P18|image=true|noref=true|rank=best|size=100|center=yes}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
⧼datatypes-type-globe-coordinate⧽ / coordinate[عدل]
|formatting=latitude
يعرض خط العرض فقط.|formatting=longitude
يعرض خط الطول فقط.|formatting=precision
يعرض الدقة.|formatting=globe
يعرض عنصر الكوكب. مثال:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P625|formatting=globe}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P625|formatting=longitude}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
نص أحادي اللغة / ⧼datatypes-type-monolingualtext⧽ / monolingualtext[عدل]
طالع أيضًا: Help:Monolingual text languages في ويكي بيانات
|langpref=
في الوحدة، هناك مرشح يعطي أولوية للقيم التي تحتوي على "اللغة = العربية". أضف القيمة المطلوبة لتعطيل هذا الفلتر.
- القيم المقبولة الأخرى هي : justlang و langcode
|langpref=justlang
لإظهار لغة النص فقط دون النص، مثل الإنجليزية.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P1477|langpref=justlang}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|langpref=justlang
لإظهار رمز لغة النص فقط دون النص، مثل en.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P1477|langpref=langcode}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|showlang=
استخدم أي قيمة لإظهار النص حسب تنسيق قالب:رمز لغة واسمها.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P1477|showlang=true}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|textformat=text
اظهار النص فقط دون استخدام قوالب {{رمز لغة واسمها}} أو {{رمز لغة}}
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P1477|textformat=text}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
⧼datatypes-type-quantity⧽ / quantity[عدل]
|nounitlink=
يظهر وحدة القياس دون وصلة.
*
|nounitshort=
لا يظهر وحدات القياس مختصرة. مثلاً لا يظهر كم بدلاً عن كيلومتر.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P2046|noref=t|firstvalue=y}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|formatcharacters=formatnum
: تنسيق الأرقام بالفواصل.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P2046|firstvalue=y|noref=t|formatcharacters=formatnum}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|nounit=
لا يظهر وحدة القياس.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q805|property=P2046|noref=t|firstvalue=y|nounit=t}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
- مثال لاستخدام
|unitshort=
ومثال عند عدم استخدامه:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q219635|property=P2295|unitshort=t}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
{{#invoke:Wikidata2|formatStatements|entityId=Q219635|property=P2295}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
⧼datatypes-type-string⧽ / string[عدل]
|stringpattern=
تنسيق النص في قالب أو وصلة أو ماشابه يتم استبدال القيمة بـ$1. مثل|pattern=
لكن هنا تستخدم مع نوع البيانات string.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q1133289|property=P1748|noref=t|stringpattern=[https://ncit.nci.nih.gov/ncitbrowser/ConceptReport.jsp?dictionary=NCI%20Thesaurus&code=$1 $1]}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
⧼datatypes-type-time⧽ / time[عدل]
|modifytime=
يحدد تنسيق الوقت أو التاريخ:|modifytime=longdate
يكتب التاريخ في شكل "15 فبراير 2025"|modifytime=Y
يكتب التاريخ في شكل "2025" يظهر فقط السنة.|modifytime= F
يكتب التاريخ في شكل "فبراير" يظهر فقط الشهر.|modifytime= j
يكتب التاريخ في شكل "15" يظهر فقط اليوم.
|modifyqualifiertime=
تنسيق التاريخ على النحو الوارد أعلاه، ولكن يؤثر فقط على التصفيات.qualifier
⧼datatypes-type-external-id⧽ / external-id[عدل]
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P2002}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|pattern=
طريقة عرض الخاصية مثلاً في وصلات الضبط الاستنادي$1
مثلاً:<nowiki>https://viaf.org/viaf/$1/</nowiki>
.|pattern=autourl
من خواص البند أعلاه، لنمط مستخدم في الخاصية [[d:Property:P1630|- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P1630)]] (تنسيق عنوان URL) للخاصية المطلوبة.
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P2002|pattern=autourl}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|pattern=autourl2
كما سبق، يقدم وصلة من نوع<nowiki>[https://viaf.org/viaf/$1/ $1] </nowiki>
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P2002|pattern=autourl2}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
⧼datatypes-type-url⧽ / url[عدل]
|urllabel=
وضع تسمية لتظهر بدلاً من الوصلة، كما في ⧼datatypes-type-external-id⧽ ولكن في خواص الروابط.- مثال عند استخدام [[d:Property:P856|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P856)]] ل (Q76) مع/بدون الوسيط |urllabel=الموقع الرسمي
:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P856}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
{{#invoke:Wikidata2|formatStatements|urllabel=الموقع الرسمي|entityId=Q76|property=P856}} |
خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value). |
|displayformat=
يقبل حالياً قيمة واحدة وهي|displayformat=weblink
لاستخدام وحدة:weblink لعرض وصلة الموقع.
{{#invoke:Wikidata2|formatStatements|entityId=Q76|property=P856|displayformat=weblink}}
ينتج ← خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value).
خيارات إضافية[عدل]
|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 الخاصة بخاصية المنصب [[d:Property:P39|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P39)]].
value[عدل]
fun( datavalue, datatype, options )
|value-module=
عنوان الوحدة مثل|value-module=وحدة:Wikidata2/P106
|value-function=
عنوان الوظيفة مثل|value-function=formatEntityWithGenderClaim
- تستخدم هذه الخيارات عند الحاجة لتنسيق قيم الخاصية بشكل منفرد لكل قيمة مثلاً لأخذ تسمية الإناث عند إستخدام خاصية [[d:Property:P106|
- عنصر قائمة منقطة
- تحويل قالب:تسمية
![Light Bulb Icon.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Light_Bulb_Icon.svg/langar-25px-Light_Bulb_Icon.svg.png)
طالع عدد استخدامات القالب في المقالات (من هنا)
(P106)]]، لا نستطيع هنا الحصول على التصفيات/qualifiers والمراجع/references.
- أمثلة:
- الوحدة وحدة:Wikidata2/P106 الخاصة بخاصية المهنة.
pageId[عدل]
{{#invoke:Wikidata2|pageId}}
ينتج عنصر ويكي بيانات للصفحة المستخدم فيها الكود.
- خطأ لوا في السطر 2010: attempt to index field 'wikibase' (a nil value).
labelIn[عدل]
طالع أيضًا: Help:Label في ويكي بيانات
|1=
اللغة مثل fr.|2=
عنصر ويكي بيانات مثل Q76.مثال: {{#invoke:Wikidata2|labelIn|fa|Q76}}
ينتج:
descriptionIn[عدل]
طالع أيضًا: Help:Description في ويكي بيانات
|1=
اللغة مثل fr.|2=
عنصر ويكي بيانات مثل Q76.مثال: {{#invoke:Wikidata2|descriptionIn|en|Q76}}
ينتج: خطأ لوا في السطر 487: attempt to index field 'wikibase' (a nil value).
getSiteLink / وصلات المواقع[عدل]
طالع أيضًا: مساعدة:وصلات المواقع في ويكي بيانات
|2=
أو |site=
الموقع مثل enwiki.|1=
أو|id=
عنصر ويكي بيانات.|page=
يمكن استخدام اسم الصفحة في هذه الويكي بدلاً من استخدام الوسيط|id=
.
|countsitelinks=
يستخدم فقط لإظهار عدد وصلات اللغات.مثال: {{#invoke:Wikidata2|getSiteLink|Q76}}
ينتج:
مثال: {{#invoke:Wikidata2|getSiteLink|Q76|enwiki}}
أو: {{#invoke:Wikidata2|getSiteLink|id=Q76|site=enwiki}}
- ينتج:
أو:
توصيف | يظهر |
---|---|
{{#invoke:Wikidata2
|getSiteLink
|page=اليمن
|site=enwiki
}} |
|
Dump[عدل]
مثال: {{#invoke:Wikidata2|Dump|claims|P19}}
- مثال2:
{{#invoke:Wikidata2|Dump|id=Q76|claims|P19}}
-- local fallback = {'en', 'nb', 'da', 'nn', 'de', 'fr', 'es', 'it', 'pt'} local formatera = require('Module:Wikidata2/Math') local citetitle = 'Module:Cite' if nil ~= string.find (mw.getCurrentFrame():getTitle(), 'ملعب', 1, true) then -- did the {{#invoke:}} use sandbox version? citetitle = 'Module:Cite/ملعب' -- load sandbox versions of support modules end local weblink = require('Module:Weblink') local flags = require('Module:Wikidata2/Flags') local Infobox_Image = require('Module:InfoboxImage').Infobox_Image local p = {} local Frame; local Frame_args = {} local i18n = { ["errors"] = { ["property-param-not-provided"] = "وسيط property غير متوفر.", ["entity-not-found"] = "الكيان غير موجود.", ["unknown-claim-type"] = "نوع claim غير معروف.", ["unknown-snak-type"] = "نوع snak غير معروف.", ["unknown-datatype"] = "نوع data غير معروف.", ["unknown-entity-type"] = "نوع entity غير معروف.", ["unknown-value-module"] = "يجب عليك تعيين كل من value-module و value-function.", ["unknown-claim-module"] = "يجب عليك تعيين كل من claim-module و claim-function.", ["unknown-property-module"] = "يجب عليك تعيين كل من property-module و property-function.", ["property-module-not-found"] = "الوحدة المستخدمة في وسيط property-module غير موجودة.", ["property-function-not-found"] = "الوظيفة المستخدمة في وسيط property-function غير موجودة.", ["value-module-not-found"] = "الوحدة المستخدمة في وسيط value-module غير موجودة.", ["value-function-not-found"] = "الوظيفة المستخدمة في وسيط value-function غير موجودة.", ["claim-module-not-found"] = "الوحدة المستخدمة في وسيط claim-module غير موجودة.", ["claim-function-not-found"] = "الوظيفة المستخدمة في وسيط claim-function غير موجودة." }, ["noarabiclabel"] = "تصنيف:صفحات_ويكي_بيانات_بحاجة_لتسمية_عربية", ["warnDump"] = "[[Category:Called function 'Dump' from module Wikidata]]", ["somevalue"] = "", --''غير محدد'' ["novalue"] ="",--قيمة مجهولة ["cateref"] = "[[" .. "تصنيف:صفحات بها مراجع ويكي بيانات" .. "]]", ['to translate'] = 'صفحات تستعمل معطيات من ويكي بيانات بحاجة لترجمة', ["trackingcat"] = 'صفحات تستخدم خاصية $1', ['see-wikidata-value'] = "الاطلاع ومراجعة البيانات على ويكي داتا", ['see-wikidata'] = "راجع العنصر من ويكي بيانات المقابل", ['see-another-project'] = "مقالة على $1", ['see-another-language'] = "مقالة على ويكيبيديا $1", } local sortingproperties = {'P585','P571','P580','P569','P582','P570'} function No_Tracking_cat(options) local notracking = options.notracking or Frame_args.notracking or "" local raw = options.raw or Frame_args.raw or "" local raw2 = options.raw2 or Frame_args.raw2 or "" --mw.log("raw2" .. raw2 ) local nolink = options.nolink or Frame_args.nolink or "" if notracking ~= "" or raw ~= '' or raw2 ~= '' or nolink ~= '' then return true end return false end function addTrackingCategory(prop,options) if No_Tracking_cat(options) then return prop end local cat = require('Module:Wikidata/تتبع').makecategory1 local category = cat(options) local nbsp = " " if options.nbsp and options.nbsp ~= "" then nbsp = "" end if prop and prop ~= '' then if category and category ~= '' then return prop .. nbsp .. category else return prop .. nbsp end end end function catewikidatainfo(options) --[[ function to add tracking category ]] --if (options.raw and options.raw ~= '') or (options.notracking and options.notracking== true) then return "" end if No_Tracking_cat(options) then return "" end local prop = options.property local cat = ' [[' .. 'تصنيف:صفحات بها بيانات ويكي بيانات|'.. (prop or 'wikidata') .. ']]' if (not options.nolink or options.nolink == '') then return cat else return '' end end function countSiteLinks(id) numb = 0 Table = {} local entity = mw.wikibase.getEntityObject(id) if entity and entity.sitelinks then for i, v in pairs(entity.sitelinks) do Table[v.site] = v.title numb = numb +1 end --return Frame:extensionTag("source", mw.dumpObject( Table ),{ lang= 'lua'}) end return numb end function make_format_num(String) local line = String line = mw.getCurrentFrame():preprocess("{{ {{{|safesubst:}}}formatnum: " .. String .. " }}") line = mw.ustring.gsub( line , '٫', '.' ) line = mw.ustring.gsub( line , '٬', ',' ) return line 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 .. " }}") elseif formatcharacters == 'formatnum' then return make_format_num( 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' and options.sortingproperty ~= '' then sortingproperty = {options.sortingproperty} end return getqualifierbysortingproperty(claim, sortingproperty) end function get_entityId(options) local id = options.entityId or options["entityId"] id = id or options.id or options["id"] 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 or "" 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, firstvalue = 'true', sortbytime = 'chronological', noref = 'true'}) end end function descriptionIn(langcode , id) -- returns item description for a given language local lan = langcode or 'ar' local entity = getEntityFromId(id) --[[ local description, lange = mw.wikibase.getDescriptionWithLang( id ) --mw.log( "descriptionIn:description : " .. description ",lange : " .. lange ".") if lange == lan then --return description return mw.getCurrentFrame():extensionTag("source", mw.dumpObject( description ),{ lang= 'lua'}) else --mw.log( "descriptionIn:langcode : " .. langcode ",lange : " .. lange ".") --return nil return mw.getCurrentFrame():extensionTag("source", mw.dumpObject( description ),{ lang= 'lua'}) --return str end ]] if entity and entity.descriptions then local description = entity.descriptions[lan] if description and description.value then -- return mw.getCurrentFrame():extensionTag("source", mw.dumpObject( description ),{ lang= 'lua'}) if description['language'] == lan then return description.value else return nil end end end end function labelIn(langcode,id) -- returns item label for a given language if not mw.wikibase then return nil end local lang = langcode if not langcode or langcode == "" then lang = "ar" end if type(id) ~= "string" then id = tostring(id) end local label = mw.wikibase.getLabelByLang( id , lang ) or nil return label --[[ 2nd old way local label, lange = mw.wikibase.getLabelWithLang( id ) if lange == lang then return label else return nil --return str end ]] --[[ old way local entity = mw.wikibase.getEntityObject(id) if entity and entity.labels and entity.labels[''..lang..''] and entity.labels[''..lang..''].value then local lang = entity.labels[''..lang..''] if lang['language'] == lang then return entity.labels[''..lang..''].value else return nil end end ]] end function get_snak_id(snak) if snak and snak.type and snak.type == "statement" and snak.mainsnak and snak.mainsnak.snaktype and snak.mainsnak.snaktype == "value" and snak.mainsnak.datavalue and snak.mainsnak.datavalue.type and snak.mainsnak.datavalue.type == "wikibase-entityid" and snak.mainsnak.datavalue.value and snak.mainsnak.datavalue.value.id then --ID = 'Q' .. snak.datavalue.value['numeric-id'] ID = snak.mainsnak.datavalue.value.id return ID 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 getonly(claims, options) -- options.getonly -- options.getonlyproperty local claims2 = {} --mw.log("wikidata2 : getonly:" .. options.getonly ) for i, j in pairs(claims) do local id = get_snak_id(j) --if j.mainsnak and j.mainsnak.snaktype == 'value' and j.mainsnak.datavalue and j.mainsnak.datavalue.value and j.mainsnak.datavalue.value.id then --local id = j.mainsnak.datavalue.value.id if id then local traff = false local t2 = formatStatements( {property = (options.getonlyproperty or "P31"), entityId = id, noref = 'true', raw = 'true' }) if t2 and #t2 > 0 then for k, state in pairs( t2 ) do for j2, only in pairs(mw.text.split(options.getonly,',')) do if state.item == only then traff = true end end end end if traff then table.insert(claims2, j) end end end return claims2 end function claimindex(claims, options) local claims2 = {} for j, index in pairs(mw.text.split(options.claimindex,',')) do if tonumber(index) and #claims >= tonumber(index) then table.insert(claims2, claims[tonumber(index)]) end end return claims2 end function avoidvalue(claims, options) -- options.avoidvalue -- to avoid values local claims4 = {} local add2claims local avoidvalue if(type(options.avoidvalue) == 'string') then avoidvalue = mw.text.split(options.avoidvalue,',') elseif(type(options.avoidvalue) == 'table') then avoidvalue = options.avoidvalue else return claims end --mw.log("avoidvalue: " .. mw.dumpobject(options.avoidvalue)) for i, j in pairs( claims ) do --mw.log('t:' .. t) ID = get_snak_id(j) add2claims = true if ID then for k, t in pairs(avoidvalue) do --mw.log("ID: " .. ID) if ID == t then add2claims = false end end if add2claims then table.insert( claims4, j) end end end return claims4 end function prefervalue(claims, options) local claims3 = {} --mw.log("prefervalue: " .. mw.dumpobject(options.prefervalue)) local prefervalue if(type(options.prefervalue) == 'string') then prefervalue = mw.text.split(options.prefervalue,',') elseif(type(options.prefervalue) == 'table') then prefervalue = options.prefervalue else return claims end for k, t in pairs(prefervalue) do --mw.log('t:' .. t) for i, j in pairs( claims ) do local active = false ID = get_snak_id(j) if ID then --mw.log("ID: " .. ID) if ID == t and not active then table.insert( claims3, j) active = true --mw.log("ID == t" .. t) end end end end return claims3 end function preferqualifier(claims, options) -- options.preferqualifier -- options.preferqualifiervalue mw.log("preferqualifier: " .. options.preferqualifier) 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 --mw.log( "t " .. t ) --kaso = formatStatements({property=options.preferqualifier:upper(), raw = 'true', formatting = 'raw'}, statement.qualifiers) ----kaso = formatStatements({property=options.preferqualifier:upper(), formatting = 'raw'}, statement.qualifiers) ----value = kaso for ii, quall in pairs( statement.qualifiers[options.preferqualifier:upper()] ) do --mw.log( "value " .. value ) snaktype = quall.snaktype if snaktype == "value" then ty = quall.datavalue.value['id'] if ty and ty == t and not active then --if value == t and not active then table.insert( claims2, statement) active = true --end end end end end else table.insert( claims2, statement) end end end return claims2 end function avoidqualifier(claims, options) -- options.avoidqualifier -- options.avoidqualifiervalue if not options.avoidqualifier or options.avoidqualifier == "" then return claims end local av = options.avoidqualifier:upper() 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) elseif statement.qualifiers and statement.qualifiers[av] then if options.avoidqualifiervalue and options.avoidqualifiervalue ~= '' then list = {} if(type(options.avoidqualifiervalue) == 'string') then list = mw.text.split(options.avoidqualifiervalue,',') elseif(type(options.avoidqualifiervalue) == 'table') then list = options.avoidqualifiervalue end local active = true for k, t in pairs( list ) do for ii, quall in pairs( statement.qualifiers[av] ) do if quall.snaktype == "value" and quall.datavalue and quall.datavalue.value and quall.datavalue.value['id'] then if quall.datavalue.value['id'] == t then active = false end end end end if active then table.insert( claims2, statement) end 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 sortbyqualifiernumber(claims, options) local sortingproperty = options.sortingproperty if type(options.sortingproperty) == 'string' then sortingproperty = {options.sortingproperty} end table.sort(claims, function(a,b) local timeA = getqualifierbysortingproperty(a, sortingproperty) local timeB = getqualifierbysortingproperty(b, sortingproperty) if options.sortbynumber == 'inverted' then return comparedates(timeB, timeA) else return comparedates(timeA, timeB) end end ) return claims end function sortbyarb(claims, options) --mw.log("sortbyarb: " .. options.sortbyarbitrary) 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 getEntityFromId( id ) if id and id ~= "" then -- if not(mw.wikibase.isValidEntityId(id)) or not(mw.wikibase.entityExists(id)) then -- return false --end 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 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 --mw.log('ar'..ar) local arlabel = ar --formatcharacters(ar, options) if labeloption and labeloption ~= '' then jlabel = labeloption elseif options.illwd2 and options.illwd2 ~= '' and arlabel and arlabel ~= '' then jlabel = mw.getCurrentFrame():expandTemplate{ title = 'Ill-WD2', args = {arlabel, fromlua="t", id=entityId, y = (options.illwd2y or '') } } --jlabel = arlabel --elseif options.enlabelcate and options.enlabelcate ~= '' then --jlabel = mw.getCurrentFrame():expandTemplate{ title = 'Ill-WD2', args = {id=entityId, fromlua="t", target='en', y = (options.illwd2y or '') } } --jlabel = label --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 else jlabel = arlabel 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 --mw.log('jlabel' .. jlabel ) return jlabel .. catewikidatainfo(options) end end function formatOneStatement( statement ,ref , options) local vava = nil local stat = formatStatement( statement, options ) if stat then if not stat.qualifiers then stat.qualifiers = {} end local s = stat.value local P585 = stat.qualifiers.P585 or "" 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 reff =stat.reff local QPrefix local QSuffix 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 ,entityId = options.entityId ,id = stat.ID} } end if options.football and options.football ~= '' then s =mw.getCurrentFrame():expandTemplate{ title = "صندوق معلومات سيرة كرة قدم/سطر فريق", args = { stat.qualifiers.P580 or "", stat.qualifiers.P582 or "", s, stat.amatch, stat.goal } } end if options.office and options.office ~= '' then s = mw.getCurrentFrame():expandTemplate{ title = "معلومات صاحب منصب/منصب ويكي بيانات/نواة", args = {office = s, termstart = stat.qualifiers.P580 or "", termend = stat.qualifiers.P582 or "", constituency = stat.qualifiers.P768 or "", predecessor = stat.qualifiers.P1365 or "", successor = stat.qualifiers.P1366 or "", series= stat.qualifiers.P1545 or "", of=stat.qualifiers.P642 or "", electedin=stat.qualifiers.P2715 or "", jurisdiction=stat.qualifiers.P1001 or "", employer=stat.qualifiers.P108 or "", entityId=options.entityId } } end function qoo(Prefix,qualpref,p,Suffix) if p and p ~='' then stri = (Prefix or ' (').. (qualpref or '') .. p .. (Suffix or ')') if options.nosmall and options.nosmall ~= '' then return stri else return mw.text.tag('small', {}, stri ) end 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 -- We need only the qualifier end end if ro and ro ~='' and options.withro and options.withro ~= '' then s = s .. qoo(QPrefix, '' , ro, QSuffix) end if options.withdate and options.withdate ~= '' then if P585 and P585 ~='' then if options.withdate == 'y' then s = s .. qoo(QPrefix, 'سنة ' , P585, QSuffix) elseif options.withdate == 'before' then s = '*' .. P585 ..':' .. s..'\n' else s = s .. qoo(QPrefix, '' , P585, QSuffix) end end end if awardqual and options.awardqua and options.awardqua ~= '' then s = s .. qoo(QPrefix, '' , awardqual, QSuffix) end local bothdates = options.withintervall or options.bothdates if tf and bothdates and bothdates ~= '' then if bothdates == 'line' then s = s .. mw.text.tag('br') .. qoo(QPrefix, '' , tf, QSuffix) elseif 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 filter_claims( claims , options) local claims = claims --====================================================== if options.avoidqualifier and options.avoidqualifier ~= '' then -- to avoid value with a given qualifier claims = avoidqualifier(claims, options) end --====================================================== if options.preferqualifier and options.preferqualifier ~= '' then claims = preferqualifier(claims, options) end --====================================================== -- options.avoidvalue if options.avoidvalue and options.avoidvalue ~= '' then claims = avoidvalue(claims, options) end --====================================================== -- options.prefervalue if options.prefervalue and options.prefervalue ~= '' then claims = prefervalue(claims, options) end --====================================================== -- options.getonly if options.getonly and options.getonly ~= '' then claims = getonly(claims, options) end --====================================================== if not options.langpref or options.langpref == '' then local claims7 = {} 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( claims7, 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( claims7, statement ) end end end end if #claims7 > 0 then claims = claims7 end end --====================================================== if options.sortbytime == 'chronological' or options.sortbytime == 'inverted' then claims = sortbyqualifier(claims, options) elseif options.sortbynumber == 'chronological' or options.sortbynumber == 'inverted' then claims = sortbyqualifiernumber(claims, options) elseif options.sortbyarbitrary == 'chronological' or options.sortbyarbitrary == 'inverted' then claims = sortbyarb(claims, options) end --====================================================== local firstvalue = options.enbarten or options.firstvalue if firstvalue and firstvalue ~='' and #claims > 1 then if firstvalue == '2' then claims = {claims[2]} elseif firstvalue == '3' and #claims > 2 then claims = {claims[3]} elseif firstvalue == '4' and #claims > 3 then claims = {claims[4]} elseif firstvalue == '5' and #claims > 4 then claims = {claims[5]} elseif firstvalue == '6' and #claims > 5 then claims = {claims[6]} elseif firstvalue == '7' and #claims > 6 then claims = {claims[7]} elseif firstvalue == '8' and #claims > 7 then claims = {claims[8]} elseif firstvalue == '9' and #claims > 8 then claims = {claims[9]} else claims = {claims[1]} end end local numval = options.numval if numval and type(numval) ~= "number" then numval = tonumber(numval) end if numval and type(numval) == "number" and #claims > 1 and #claims > numval then local claimsnumval= {} local ic = 1 while (numval >= ic) and (#claims >= ic) do table.insert( claimsnumval, claims[ic] ) ic =ic +1 end claims = claimsnumval; end return claims end function formatStatements( options, ref ) local valuetable = {} -- formattedStatements local claims = {} if not options.property then return formatError( 'property-param-not-provided' ) end --[[functions = { ["P172"] = {["value-module"] ="Wikidata2/P172" ,["value-function"] ="get_P172_lab"} , ["P106"] = {["value-module"] ="Wikidata2/P106" ,["value-function"] ="formatEntityWithGenderClaim"} , } functions["P413"] = functions["P106"] if ( not options["value-module"] or options["value-module"] == "" ) or ( not options["value-function"] or options["value-function"] == "" ) or ( not options["property-module"] or options["property-module"] == "" ) or ( not options["property-function"] or options["property-function"] == "" ) or ( not options["claim-module"] or options["claim-module"] == "" ) or ( not options["claim-function"] or options["claim-function"] == "" ) then if functions[options.property:upper()] then options["value-module"] = functions[options.property:upper()]["value-module"] options["value-function"] = functions[options.property:upper()]["value-function"] end end]] local option1 = options["option1"] or options.option1 if option1 and options["option1value"] then options[ option1 ] = options["option1value"] options['"' .. option1 .. '"'] = options["option1value"] --mw.log( "option1: " .. option1 .. "value: " .. options["option1value"] ) 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 --local property = mw.wikibase.resolvePropertyId( options.property:upper() ) local property = options.property:upper() --property = options.property:upper() if not entity then return '' end --TODO error? if not entity.claims or not entity.claims[property] then if options.otherproperty and options.otherproperty ~= "" then options.property = options.otherproperty property = options.otherproperty end end if not entity.claims or not entity.claims[property] then return '' --TODO error? end --Format statement and concat them cleanly if options.rank == 'best' or not options.rank then --claims = entity:getAllStatements( property ) claims = entity:getBestStatements( property ) elseif options.rank == 'valid' then for i, statement in pairs( entity.claims[ property ] ) 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[property] ) do table.insert( claims, statement ) end else for i, statement in pairs( entity.claims[property] ) do if statement.rank == options.rank then table.insert( claims, statement ) end end end end claims = filter_claims( claims , options) local statementsraw = {} local All_claims = claims 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( valuetable, va.v ) end table.insert( statementsraw, va.raw ) end end end local priff = "" local Separator = options.separator-- or "" local Conjunction = options.conjunction-- or "" --if Conjunction and Conjunction == "br" then Conjunction = "\n" end if (Separator and Separator == "br") or (Conjunction and Conjunction == "br") then Separator = mw.text.tag('br') Conjunction = mw.text.tag('br') end if Separator and Separator == "*" then priff = "\n*" Separator = "\n*" Conjunction = "\n*" end if Separator and Separator == "#" then priff = "\n#" Separator = "\n#" Conjunction = "\n#" end local tot = mw.text.listToText( valuetable, Separator, Conjunction ) if #valuetable > 1 then tot = priff .. tot end if tot == '' then tot = nil end if options.raw and options.raw ~= '' then if options.rawtolua and options.rawtolua ~= '' then return mw.getCurrentFrame():extensionTag("source", mw.dumpObject(statementsraw),{ lang= 'lua'}) end return statementsraw end if options.returnnumberofvalues and (options.returnnumberofvalues ~= "" or options.returnnumberofvalues == true ) then return tot, #valuetable end if options.numberofclaims and options.numberofclaims ~= '' then return #All_claims end return tot end function p.formatAndCat(args) if args then Frame_args = args end if not args then return nil end args.linkback = args.linkback or true args.addcat = true if args.value then if args.value == '-' then return nil end local val = args.value .. addTrackingCategory(args.property,args) --catewikidatainfo({property = args.property}) val = p.addLinkBack(val, args.entity, args.property) return val end return p.formatStatementsFromLua( args ) end function formatReferences( statement, options ) local ic local s local statementreferences = statement.references local reference = {} local numberofref = tonumber(options.numberofreferences) or 7 if statementreferences then local cite = require( citetitle ) ic = 1 for i, ref in pairs( statementreferences ) do if ref.snaks then if numberofref >= ic then s = cite.citeitem2(ref , options ) if s and s ~= "" then ic = ic + 1 table.insert(reference, s) end end end 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 ) s.qualifiers = {} function qua(p,firstvalue,modifytime) if p and p ~='' then vvv = formatStatements({property =p,enlabelcate = 't', firstvalue = (firstvalue or '') ,modifytime = (modifytime or 'longdate'), noref = 'true'}, statement.qualifiers) or '' s.qualifiers[p] = vvv return vvv end end if options.template and options.template ~= '' then s.ID = getEntityIdFromValue(statement.mainsnak.datavalue.value) 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 options.football and options.football ~= '' then if statement.qualifiers.P1350 or statement.qualifiers.P1351 then s.amatch = qua("P1350",'true') s.goal = qua("P1351",'true') end end if (options.football and options.football ~= '' ) or (options.office and options.office ~= '') then s.start1 = qua("P580",'true') s.finish1 = qua("P582",'true') end if options.office and options.office ~= '' then if statement.qualifiers.P580 or statement.qualifiers.P582 or statement.qualifiers.P1365 or statement.qualifiers.P1366 then 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 end if options.withdate and options.withdate ~= '' then --if statement.qualifiers.P585 then s.P585 = 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', firstvalue = '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 --]] local bothdates_option = options.withintervall or options.bothdates if bothdates_option and bothdates_option ~= '' then 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 end if options.awardqua and options.awardqua ~= '' then 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 end function quaaal(opti,options) if opti and opti ~='' and statement.qualifiers[opti] then kkk = 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 '' s.qualifiers[ opti ] = kkk return kkk 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 s.qualifiers = {} if statement.qualifiers then qualu = formatqualifiers( statement,s, options ) --if qualu and qualu ~= '' then table.insert(qualu) end end if statement.references then if options.reff and options.reff ~= '' then s.reff = formatReferences( statement, options ) 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 then if options.getsimpleproperty ~= '' and options.getproperty and options.getproperty ~= '' then local pr = formatStatements({property = options.getproperty, entityId = s.item, firstvalue = options.getenbarten , noref = 'true', modifytime = options.getmodifytime, raw = options.getraw}) if pr then s.pr = pr end end end return s else return {value = formatError( 'unknown-snak-type' )} end end local skiip = { ["P106"] = { "Q42857" , -- prophet "Q14886050" , -- terrorist "Q2159907" , -- criminal }} --[[ function to get countries flags without reload large countries items ]] function get_property1(options , item) local flagprop = { "p27","p1532","p17","p495","p1376" } local work_flag = false local property1 = options.property1 or options["property1"] if string.lower(property1) == "p41" then for k, l in pairs(flagprop) do if string.lower(options.property) == l then work_flag = true end end end caca = '' local size = options.size or "" if size == "" then size = "20" end if work_flag then local flag = flags[item] if not flag or flag == '' then flag = formatStatements( {property = options.property1 or options["property1"] , entityId = item , noref =options.noref or options["noref"] ,rank=options.property1rank or options["property1rank"] ,pattern = options.property1pattern or options["property1pattern"] ,formatting=options.property1formatting or options["property1formatting"] ,noref='true' ,firstvalue ='true' } ) --mw.log("get flag2 :" .. flag .. ", for item ".. item ) end if flag and flag ~= '' then -- return real image if options.image and options.image ~= '' then -- return real image caca = '[[file:' .. flag .. '|'.. size ..'px|'..'border'..']]' --caca = Infobox_Image( {image = flag, size = size, maxsize = "280x330px", center = options.center} ) mw.log("get flag :" .. flag .. ", for item ".. item ) end end end if caca == "" then caca = formatStatements( {property = options.property1 or options["property1"] , entityId = item , noref =options.noref or options["noref"] ,rank=options.property1rank or options["property1rank"] ,pattern = options.property1pattern or options["property1pattern"] ,formatting=options.property1formatting or options["property1formatting"] ,size =options.size or options["size"] ,image =options.image or options["image"] ,noref='true' ,firstvalue ='true' } ) end return caca end function formatwikibaseitem( datavalue, datatype, options ) --[[ datatype wikibase-item ]] local item = getEntityIdFromValue( datavalue.value ) local itemValue = formatEntityId( item , options ).value local Format = options.formatting or options["formatting"] local Skipped = skiip[options.property] or {} for k, v in pairs(Skipped) do if datavalue.value.id == v then return {value = ""} end end if Format and Format ~= '' then if Format == 'raw' then --mw.log("raw: " .. item ) return {value = item } elseif Format == 'rawtotemplate' then --mw.log('options') --mw.log(options) if options.rawtotemplate and options.rawtotemplate ~= '' then return {value = mw.getCurrentFrame():expandTemplate{ title = options.rawtotemplate, args = { q = item , no1 = options.no1 or '' , no2 = options.no2 or '' }} .. '\n' } end elseif Format == 'fu' then fu_temp = "Cycling race/stageclassification1" return {value = mw.getCurrentFrame():expandTemplate{ title = fu_temp , args = {item}} } elseif Format == '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 ~= '' and options.property1:upper():sub(1,1) =="P" then for i, statement in pairs( datavalue ) do caca = get_property1(options , item) if itemValue and itemValue ~= '' then if caca and caca ~= '' then cooooca = (options.property1pref or '') ..''.. caca ..''.. (options.property1suff or '') if options.property1after and options.property1after ~= "" then return {value = itemValue .. cooooca } else return {value = cooooca .. ' '.. itemValue } end else return {value = itemValue } end end end elseif options.propertyimage and options.propertyimage ~= '' then local p_f = options.propertyimageformatting or options.formattingpropertyimage for i, statement in pairs( datavalue ) do local vas = formatStatements( { property =options.propertyimage ,formatting = p_f ,entityId = item ,noref =options.noref ,rank=options.rank ,pattern =options.pattern ,size =options.size ,image =options.image ,noref='true' ,avoidvalue = options.avoidvaluepropertyimage ,firstvalue ='true' ,nolink=options.nolink }) if vas and vas ~= '' then return {value = vas } else end end elseif options.property2 and options.property2 ~= '' then for i, statement in pairs( datavalue ) do local caca = formatStatements( {property =options.property2 , entityId = item , noref =options.noref ,rank=options.rank ,pattern =options.property2pattern ,size =options.size ,image =options.image ,propertyimage =options.property3 ,firstvalue ='true' }) if itemValue and itemValue ~= '' then if caca and caca ~= '' then return {value = caca .. ' '.. itemValue } else return {value = itemValue } end end end else return {value = formatEntityId( item, options ).value, item = item } end end function formatwikibaseproperty( datavalue, datatype, options ) --[[ datatype wikibase-property ]] 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 function formattabulardata( datavalue, datatype, options ) --[[ tabular-data ]] data= '[[commons:' .. datavalue.value .. '|' .. datavalue.value .. ']]' return {value = data} end function formatgeoshape( datavalue, datatype, options ) --[[ geo-shape ]] shape = '[[commons:' .. datavalue.value .. '|' .. datavalue.value .. ']]' return {value = shape} end function formatcommonsMedia( datavalue, datatype, options ) --[[ commonsMedia ]] local size = options.size or "" if options.image and options.image ~= '' then -- return real image --tid = '[[file:' .. datavalue.value .. '|'.. (options.size or '60')..'px|'..'border'..']]' params = { image = datavalue.value , maxsize = "280x330px" , center = options.center } if options.size and options.size ~= "" then params.size = size end tid = Infobox_Image( params ) --tid = '[[file:' .. datavalue.value .. '|'.. (options.size or '20')..'px|border]]' --if options.center and options.center ~= "" then --tid = '[[file:' .. datavalue.value .. '|'.. (options.size or '20')..'px|border|center]]' --end else tid = formatcharacters(datavalue.value, options) end return {value = tid} end function formatmath( datavalue, datatype, options ) --[[datatype math ]] --return {value = mw.text.tag('math', {}, ''.. datavalue.value..'') } -- that doesn't work well return {value =mw.getCurrentFrame():callParserFunction( '#tag:math', ''.. datavalue.value..'' ) } end function formatstring( datavalue, datatype, options ) --[[ datatype string - external-id ]] --old value: auktoritetsdata , auktoritetsdata2 , auktoritetsdata3 local par = options.pattern if options.stringpattern and options.stringpattern ~= "" then --mw.log(options.stringpattern) tid = mw.ustring.gsub( options.stringpattern, '$1', datavalue.value ) elseif par and par ~= '' then 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, firstvalue = '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 function formattime( datavalue, datatype, options ) --[[ datatype time ]] 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 function formatcoordinate( datavalue, datatype, options ) --[[ datatype globe-coordinate ]] --local GlobeCoordinate = require 'Module:GlobeCoordinate' --return {value = GlobeCoordinate.newFromWikidataValue( datavalue.value ):toHtml()} local coord = datavalue.value local globe = datavalue.value.globe --local globe = globe:match('Q%d+') local globe2 = require('Module:Wikidata2/Globes')[globe] or "" 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:match('Q%d+') 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 function formatquantity( datavalue, datatype, options ) --[[ datatype quantity ]] local amount, unit, cat = datavalue.value.amount, datavalue.value.unit, nil amount = mw.ustring.gsub( amount , '+', '' ) if unit then unit = unit:match('Q%d+') end local number = formatera.newFromWikidataValue(datavalue.value) local unitraw = unit if unit then -- يتحقق اذا كان هناك اي اختصار لوحدة القياس --if lab and ( not options.nounitshort or options.nounitshort == '' ) then if options.unitshort and options.unitshort ~= '' then local lab = options.label or formatStatements({property = 'P498', entityId = unit, firstvalue = 'true', noref = 'true'}) or formatStatements({property = 'P5061', entityId = unit, firstvalue = 'true', langpref = options.langpref, noref = 'true'}) or "" 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 if options.formatcharacters and options.formatcharacters =="formatnum" then amount = make_format_num( amount ) 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 function formaturl( datavalue, datatype, options ) --[[ datatype url ]] local label = options.label if options.urllabel and options.urllabel ~= '' then label = options.urllabel end va = mw.ustring.gsub( datavalue.value, ' ', '_' ) if not label and options.property =='P856' then label = 'الموقع الرسمي' end if options.displayformat and options.displayformat == "weblink" then return {value = weblink.makelink(va ) } end if options.formatting and options.formatting == "raw" then return {value = va } 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 function formatmonolingualtext( datavalue, datatype, options ) -- showlang local text = datavalue.value.text if options.textformat and options.textformat == "text" then return {value = text} end 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 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 sitelink_g( id , wikisite ) --[[ function to get any link from any sister project ]] 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 ) if not mw.wikibase then return '' end local site = wikisite or 'arwiki' --local link = mw.wikibase.getSitelink( id , site ) or "" --return link 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 formatsitelink( entityId, options ) --[[ function to get only the value with link ]] 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 formatFromPattern( str, options ) --[[ function to replace $1 with string ]] --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 p.getEntity( id ) if type(id) == 'table' then return id end return getEntityFromId(id) end function p.translate(str, rep1, rep2) str = i18n[str] or str if rep1 and (type (rep1) == 'string') then str = str:gsub('$1', rep1) end if rep2 and (type (rep2) == 'string')then str = str:gsub('$2', rep2) end return str end function p.getId(snak) if (snak.snaktype == 'value') then if snak.datavalue.type == "wikibase-entityid" then return 'Q' .. snak.datavalue.value['numeric-id'] end end end function p.addLinkBack(str, id, property) if not id then id = p.getEntity() end if not id then return str end if type(property) == 'table' then property = property[1] end if type(id) == 'table' then id = id.id end local class = '' if property then class = 'wd_' .. string.lower(property) end local icon = '[[File:Blue pencil.svg|%s|10px|baseline|class=noviewer|link=%s]]' local title = i18n['see-wikidata-value'] local url = mw.uri.fullUrl('d:' .. id, 'uselang=ar') url.fragment = property url = tostring(url) local v = mw.html.create('span') :addClass(class) :wikitext(str) :tag('span') :addClass('noprint wikidata-linkback') :css('padding-left', '0.5em') :wikitext(icon:format(title, url)) :allDone() return tostring(v) 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[property] else claims31 = entity.claims['P31'] claims279 = entity.claims['P279'] end else return false 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] = p.getId(v.mainsnak) end end if claims279 and #claims279 > 0 then for i, v in ipairs(claims279) do parentIds[#parentIds+1] = p.getId(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, qid in ipairs(parentIds) do if not qid then return false end --itemString = "Q" .. v itemString = qid 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 p.Subclass(options) if options then Frame_args = options end local parent = options.parent or "" local id = options.id or "" local Entity = getEntityFromId(id) if Entity then id = Entity.id end local property = options.property or "P31" if parent == "" or id == "" or property == "" then return false end local tab = mw.text.split(options.parent,',') local result = mw.wikibase.getReferencedEntityId( id , property, tab ) -- { 'Q5', 'Q2095' } ) if not result and property == "P31" then result = mw.wikibase.getReferencedEntityId( id , "P279" , tab ) end if result then return true end end function old_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 function p.formatSnak( snak, options ) return formatSnak( snak, options ) end function p.getLabel( entity, lang ) return labelIn( lang , entity ) end function p.formatEntityId( entityId, options ) return formatEntityId( entityId, (options or {}) ) end function p.formatStatements( frame, key ) if frame.args then if type(key) == 'table' and key ~= {} then else Frame_args = frame.args end end --[[ The main function ]] local args = frame.args --If a value if already set, use it if args.value and args.value ~= '' then return args.value end local wd_arg = frame:getParent().args["ويكي بيانات"] or frame.args["ويكي بيانات"] -- arg used to ban wikidata value if wd_arg and wd_arg == 'لا' then return "" end local valuesnumb = 0 local prop = formatStatements( args, key ) if args.returnnumberofvalues then s , valuesnumb = formatStatements( frame.args, key ) end 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 if args.returnnumberofvalues and args.returnnumberofvalues ~= "" then mw.log( "valuesnumb: " .. valuesnumb ) return s , valuesnumb end return prop end function p.formatStatementsFromLua( options, key ) -- main function but to use from lua module if options then if type(key) == 'table' and key ~= {} then else Frame_args = options end end --If a value if already set, use it if options.value and options.value ~= '' then return options.value end local valuesnumb = 0 local s = formatStatements( options, key ) if options.returnnumberofvalues and (options.returnnumberofvalues ~= "" or options.returnnumberofvalues == true ) then s , valuesnumb = formatStatements( options, key ) end if s == '' then s = nil end if s and s ~= '' then if options.mainprefix and options.mainprefix ~= '' then -- mainprefix s = options.mainprefix .. s end if options.mainsuffix and options.mainsuffix ~= '' then -- mainsuffix s = s .. options.mainsuffix end if options.addTrackingCat and options.addTrackingCat ~= '' then -- add tracking cat s = addTrackingCategory(s,options) end if options.mainsuffixAfterIcon and options.mainsuffixAfterIcon ~= '' then -- another suffix but after wikidata icon s = s .. options.mainsuffixAfterIcon end else if options.NosValue and options.NosValue ~= '' then -- value if no local value and no wikidata value s = options.NosValue end end if options.returnnumberofvalues and (options.returnnumberofvalues ~= "" or options.returnnumberofvalues == true ) then -- mw.log( "valuesnumb: " .. valuesnumb ) return s , valuesnumb end return s end function p.isSubclass(frame) if frame.args then Frame_args = frame.args end return p.Subclass(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 ) if not mw.wikibase then return '' end if frame.args then Frame_args = frame.args end local site = frame.args[2] or frame.args.site local id = frame.args[1] or frame.args.id local count = frame.args.countsitelinks 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 count and count ~= "" then return countSiteLinks(id) end local link = sitelink( id , site ) if link and link ~= '' then return link end end function p.getSiteLink1(frame) if frame.args then Frame_args = frame.args end 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) return mw.wikibase.getEntityIdForCurrentPage() end function p.descriptionIn(frame) if frame.args then Frame_args = frame.args end local langcode = frame.args[1] or frame.args["lang"] local id = frame.args[2] or frame.args["id"] return descriptionIn( langcode ,id ) end function p.labelIn(frame) if frame.args then Frame_args = frame.args end 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 if frame.args then Frame_args = frame.args end 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) if frame.args then Frame_args = frame.args end 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.countSiteLinks(id) return countSiteLinks(id) end function p.EntityIdForTitle(frame) if frame.args then Frame_args = frame.args end local title = frame.args[1] local str = mw.wikibase.getEntityIdForTitle( title ) --mw.log(str) return str end return p