Wikidata
testwikidatawiki
https://test.wikidata.org/wiki/Wikidata:Main_Page
MediaWiki 1.48.0-wmf.4
first-letter
Media
Special
Talk
User
User talk
Wikidata
Wikidata talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Property
Property talk
Query
Query talk
Lexeme
Lexeme talk
EntitySchema
EntitySchema talk
TimedText
TimedText talk
Module
Module talk
Translations
Translations talk
Q68
0
267
806858
806847
2026-11-09T13:35:18Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P115]]: [[Q271]]
806858
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794085758.2260168"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$05d068b4-9e4a-42a7-a830-03d113dbf645","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$6edd3f95-5ca9-4256-b1c8-db24f8639304","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
8mwpm7dz1ipopkdsfda888sdsufvmyl
806859
806858
2026-11-09T13:35:28Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P115]]: [[Q271]]
806859
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794085758.2260168"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$05d068b4-9e4a-42a7-a830-03d113dbf645","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$6edd3f95-5ca9-4256-b1c8-db24f8639304","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
qsjqooylia77ubzl3df8g13zxhu889v
806860
806859
2026-11-09T13:35:38Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P88]]: 2012
806860
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794085758.2260168"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$05d068b4-9e4a-42a7-a830-03d113dbf645","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$6edd3f95-5ca9-4256-b1c8-db24f8639304","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
b3qcsyw1n7zgy122z83s3mrolq2edwu
806864
806860
2026-11-09T13:36:18Z
Pywikibot-test
822
/* wbsetaliases-update:1|en */ 1794231368.097816
806864
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$05d068b4-9e4a-42a7-a830-03d113dbf645","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$6edd3f95-5ca9-4256-b1c8-db24f8639304","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
9606ssi9kbcwlsiyk871if1gqf5um8w
806871
806864
2026-11-09T13:37:28Z
Pywikibot-test
822
/* wbsetlabel-add:1|fa */ Test123
806871
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"},"fa":{"language":"fa","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$05d068b4-9e4a-42a7-a830-03d113dbf645","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$6edd3f95-5ca9-4256-b1c8-db24f8639304","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
mvdkssikid4s8oxn98oqul581li70ym
806872
806871
2026-11-09T13:37:38Z
Pywikibot-test
822
/* wbsetlabel-remove:1|fa */ Test123
806872
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$05d068b4-9e4a-42a7-a830-03d113dbf645","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$6edd3f95-5ca9-4256-b1c8-db24f8639304","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
9606ssi9kbcwlsiyk871if1gqf5um8w
806874
806872
2026-11-09T13:38:08Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P20480]]: 12°0'N, 13°0'E
806874
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$6edd3f95-5ca9-4256-b1c8-db24f8639304","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
fhxamunycz6ghqe7zcdpaa3qdubvw0u
806875
806874
2026-11-09T13:38:18Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P20480]]: 12°0'N, 13°0'E
806875
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$6edd3f95-5ca9-4256-b1c8-db24f8639304","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
0qe31okq17tcvlsxfo0uy5qi4y9jprb
806876
806875
2026-11-09T13:38:28Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P27199]]: Data:Lyngby Hovedgade.map
806876
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
sw5x2e4z3i2fh2ft6wxxrhcealaxh3f
806877
806876
2026-11-09T13:38:38Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P27199]]: Data:Lyngby Hovedgade.map
806877
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$92a38913-877b-4786-8d63-f27b51c8854d","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
kei72em6lccevchoy1695scvsj50ljj
806878
806877
2026-11-09T13:38:48Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P271]]: Test this!
806878
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
j0xghwaq6m4w60d7w4o18rhswxwwurh
806879
806878
2026-11-09T13:38:58Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P271]]: Test this!
806879
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$f63888ee-f433-40f2-a18e-cf9c82a7921f","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
jorcr4cgw5pe1lp4jf21ki95zraevx2
806880
806879
2026-11-09T13:39:08Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P69]]: 1,234
806880
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
kgxhqyp4tx0olo5sveoey3atuvxz8tl
806881
806880
2026-11-09T13:39:18Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P69]]: 1,234±1 Test123
806881
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"eaebd9e87e7b31b3a0b883c9cafb005d594e8461","datavalue":{"value":{"amount":"+1234","unit":"http:\/\/test.wikidata.org\/entity\/Q68","upperBound":"+1235","lowerBound":"+1233"},"type":"quantity"}},"type":"statement","id":"Q68$84824b35-ffb0-48b1-af73-4af820373983","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
5vwbfjze4fc6dkw2xp99xx16sk8t61l
806882
806881
2026-11-09T13:39:28Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P69]]: 1,234±1 Test123
806882
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
kgxhqyp4tx0olo5sveoey3atuvxz8tl
806883
806882
2026-11-09T13:39:38Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P69]]: 1,234
806883
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$2e3e8ee9-e7fa-4f30-8d37-34f7edb76855","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
469cmt9f05hlsqb236xmahbhk5rvbp9
806885
806883
2026-11-09T13:39:48Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P30175]]: Data:Bea.gov/GDP by state.tab
806885
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
dhuyd0fopbc3iseoqc17tu2yo5n4jvv
806886
806885
2026-11-09T13:39:58Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P30175]]: Data:Bea.gov/GDP by state.tab
806886
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$0ed49182-2c5d-4ad2-8b5e-c5538f88526c","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
6qg470n1wbiiej2oyd5gmpnjevphgru
806887
806886
2026-11-09T13:40:08Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P66]]: 2012
806887
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
hw3qhfstxcm54t6eunbzr2xreboff68
806888
806887
2026-11-09T13:40:28Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P66]]: 2012
806888
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$c0cd797b-d785-41f3-9a47-fc3544d075a8","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
hkpgowk7aq72q0sk0f8fk7s9nv89n2h
806889
806888
2026-11-09T13:40:38Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P718]]: CrazyURI123_:)
806889
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
fi11vmo9yf2tg72t9kchiqh8978bp2c
806890
806889
2026-11-09T13:40:48Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P718]]: CrazyURI123_:)
806890
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$98813835-eb32-4239-a326-23ded6170662","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
ag0fyrheubg7zbffc61b6ml86b4v7ft
806891
806890
2026-11-09T13:40:58Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P717]]: a^2 + b^2 = c^2
806891
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
1984fl4c4jhht34xap6xfshzwnfr21a
806893
806891
2026-11-09T13:41:08Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P717]]: a^2 + b^2 = c^2
806893
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$e8003283-c4cd-4c27-85d3-480d10fc7abe","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
0w84gr1stkwrttsyrygfif6r78a9c4k
806894
806893
2026-11-09T13:41:18Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P88936]]: \relative c' { c d e f | g2 g | a4 a a a | g1 |}
806894
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
kvqxe7bae1juychswvtkqoxby2bzvnq
806895
806894
2026-11-09T13:41:28Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P88936]]: \relative c' { c d e f | g2 g | a4 a a a | g1 |}
806895
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$2d9624c6-de40-45a8-ab7e-3aa28badc5e6","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
6pt13sqmpk2zqon34cuf97n3gbz265a
806896
806895
2026-11-09T13:41:39Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P115]]: [[Q271]]
806896
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
2fzuz8vka5y5uuxgkjgxrf0ovezk7r7
806898
806896
2026-11-09T13:41:49Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P115]]: [[Q271]]
806898
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","id":"Q68$de299e61-f449-41c1-a5b7-5aad7cc37598","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
16t53wz5ihtl6oyr2ei8i3hyravzszq
806899
806898
2026-11-09T13:41:59Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P88]]: 2012
806899
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$de299e61-f449-41c1-a5b7-5aad7cc37598","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
pimspxar6katj591sj5tsx9zcgt0jia
806900
806899
2026-11-09T13:42:09Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P580]]: [[Q67]]
806900
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}],"P580":[{"snaktype":"value","property":"P580","hash":"8fda31bdc53d7d27fbe56460146cb48d345b9834","datavalue":{"value":{"entity-type":"item","numeric-id":67,"id":"Q67"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P88","P580"],"id":"Q68$de299e61-f449-41c1-a5b7-5aad7cc37598","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
afgrdqhy06zex1k1lfh1a9v4xgnjbbq
806901
806900
2026-11-09T13:42:19Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P115]]: [[Q271]]
806901
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
2fzuz8vka5y5uuxgkjgxrf0ovezk7r7
806902
806901
2026-11-09T13:42:29Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P115]]: [[Q271]]
806902
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","id":"Q68$3511e453-c64f-47d9-b2aa-f299d63da44e","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
94apdm2bddwkn8bfhjqo08rwojo7vk1
806903
806902
2026-11-09T13:42:39Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P88]]: 2012
806903
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$3511e453-c64f-47d9-b2aa-f299d63da44e","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
9sm70xyi8sz81lxfpjr24g2fy3j1nkv
806904
806903
2026-11-09T13:42:49Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P580]]: [[Q67]]
806904
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}],"P580":[{"snaktype":"value","property":"P580","hash":"8fda31bdc53d7d27fbe56460146cb48d345b9834","datavalue":{"value":{"entity-type":"item","numeric-id":67,"id":"Q67"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P88","P580"],"id":"Q68$3511e453-c64f-47d9-b2aa-f299d63da44e","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
crxmma54wpei32s7jh2dxwy40aunwtg
806905
806904
2026-11-09T13:42:59Z
Pywikibot-test
822
/* wbremovequalifiers-update:0| */
806905
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","id":"Q68$3511e453-c64f-47d9-b2aa-f299d63da44e","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
94apdm2bddwkn8bfhjqo08rwojo7vk1
806906
806905
2026-11-09T13:43:09Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P115]]: [[Q271]]
806906
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
2fzuz8vka5y5uuxgkjgxrf0ovezk7r7
806907
806906
2026-11-09T13:43:19Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P115]]: [[Q271]]
806907
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","id":"Q68$a2b10c9a-8755-49a1-a015-bbdec267b8dc","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
hqgatdhwwzw7mqdsboqc8l07k1jy134
806908
806907
2026-11-09T13:43:30Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P88]]: 2012
806908
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$a2b10c9a-8755-49a1-a015-bbdec267b8dc","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
5ssu9zcgip7aeqinmw8z67ahdwtn7h4
806909
806908
2026-11-09T13:43:39Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P580]]: [[Q67]]
806909
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}],"P580":[{"snaktype":"value","property":"P580","hash":"8fda31bdc53d7d27fbe56460146cb48d345b9834","datavalue":{"value":{"entity-type":"item","numeric-id":67,"id":"Q67"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P88","P580"],"id":"Q68$a2b10c9a-8755-49a1-a015-bbdec267b8dc","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
05bhp6l921czf0uhytg9fiar0912g4o
806910
806909
2026-11-09T13:43:49Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P115]]: [[Q271]]
806910
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
2fzuz8vka5y5uuxgkjgxrf0ovezk7r7
806911
806910
2026-11-09T13:44:00Z
Pywikibot-test
822
/* wbsetclaim-create:2||1 */ [[Property:P115]]: [[Q271]]
806911
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
7vk665t4niyxgy2qnx7ua1sstnjha92
806912
806911
2026-11-09T13:44:10Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P88]]: 2012
806912
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
4bjvpuft96x84e0f16r17rwwuit6qqs
806913
806912
2026-11-09T13:44:20Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P580]]: [[Q67]]
806913
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}],"P580":[{"snaktype":"value","property":"P580","hash":"8fda31bdc53d7d27fbe56460146cb48d345b9834","datavalue":{"value":{"entity-type":"item","numeric-id":67,"id":"Q67"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P88","P580"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
pwix9sbofpttbkq1n8y23ayqmeji022
806914
806913
2026-11-09T13:44:30Z
Pywikibot-test
822
/* wbremovequalifiers-remove:1| */ [[Property:P580]]: [[Q67]]
806914
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
4bjvpuft96x84e0f16r17rwwuit6qqs
806915
806914
2026-11-09T13:44:40Z
Pywikibot-test
822
/* wbsetlabel-remove:1|it */ Test123
806915
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
3zspc7m0ntssfpozdtlgrsj1fin6dts
806916
806915
2026-11-09T13:44:50Z
Pywikibot-test
822
/* wbsetlabel-add:1|it */ Test123
806916
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
4bjvpuft96x84e0f16r17rwwuit6qqs
806917
806916
2026-11-09T13:45:00Z
Pywikibot-test
822
/* wbsetsitelink-add-both:2|enwikisource */ Test page, [[Q608]]
806917
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]},"enwikisource":{"site":"enwikisource","title":"Test page","badges":["Q608"]}}}
eu1842gyavoz2717bio4pnccnb00ul9
806918
806917
2026-11-09T13:45:10Z
Pywikibot-test
822
/* wbsetsitelink-remove:1|enwikisource */ Test page
806918
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$72CD93E4-4EB8-468A-9F63-37F8001E303E","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$91016470-2FFE-457B-963E-5197398D3D98","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
4bjvpuft96x84e0f16r17rwwuit6qqs
806919
806918
2026-11-09T13:45:21Z
Pywikibot-test
822
/* wbremoveclaims-update:0| */
806919
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
p97eig42xpcbxn3ecb9syk5wl5wocfx
806920
806919
2026-11-09T13:45:31Z
Pywikibot-test
822
/* wbsetclaim-create:1||1 */ [[Property:P95931]]: treccid0, Set initial claim
806920
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$815B4FB8-963B-428E-B25A-57462B777438","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
tjeunpyoueeq0yv4d8r7p2ulpj1e5mg
806921
806920
2026-11-09T13:45:41Z
Pywikibot-test
822
/* wbsetclaim-create:1||1 */ [[Property:P95931]]: treccid1, Set second claim
806921
wikibase-item
application/json
{"type":"item","id":"Q68","labels":{"en":{"language":"en","value":"Test123"},"nb":{"language":"nb","value":"Testetikett \u00e6\u00f8\u00e5"},"mul":{"language":"mul","value":"Test456"},"es":{"language":"es","value":"Test456"},"it":{"language":"it","value":"Test123"}},"descriptions":{"nb":{"language":"nb","value":"testbeskrivelse \u00e6\u00f8\u00e5"},"en":{"language":"en","value":"Test page"}},"aliases":{"en":[{"language":"en","value":"1794231368.097816"}]},"claims":{"P64":[{"mainsnak":{"snaktype":"value","property":"P64","hash":"5f4a2731dc1bfeb1945de30b2efdf6e56b49279e","datavalue":{"value":{"amount":"+0.0000001","unit":"1","upperBound":"+0.00000012","lowerBound":"+0.00000008"},"type":"quantity"}},"type":"statement","id":"Q68$1cf312ec-8280-42ca-a13f-4d9b7d59e027","rank":"normal"}],"P20480":[{"mainsnak":{"snaktype":"value","property":"P20480","hash":"ecf0a04d07486f84315117f28f1501ee01416d03","datavalue":{"value":{"latitude":12,"longitude":13,"altitude":null,"precision":0.1,"globe":"http:\/\/www.wikidata.org\/entity\/Q2"},"type":"globecoordinate"}},"type":"statement","id":"Q68$44b37c3d-51af-453e-970f-ccbefce8b71b","rank":"normal"}],"P27199":[{"mainsnak":{"snaktype":"value","property":"P27199","hash":"849b7b9fb392c1398f86628d9c366906739a199d","datavalue":{"value":"Data:Lyngby Hovedgade.map","type":"string"}},"type":"statement","id":"Q68$b8ecf4fd-fafd-4c2d-a046-7b693bd786e2","rank":"normal"}],"P271":[{"mainsnak":{"snaktype":"value","property":"P271","hash":"b55930d1d6fe368ea8f05f3572ab76ebcd3ebd93","datavalue":{"value":{"text":"Test this!","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q68$766088d8-bfe3-4ad1-9f0a-6eed93452875","rank":"normal"}],"P69":[{"mainsnak":{"snaktype":"value","property":"P69","hash":"1b58108f594ec6a9d90926549d5f568b1604a099","datavalue":{"value":{"amount":"+1234","unit":"1"},"type":"quantity"}},"type":"statement","id":"Q68$06d52f99-5729-42e3-be63-4faa67c4e006","rank":"normal"}],"P30175":[{"mainsnak":{"snaktype":"value","property":"P30175","hash":"a54cc95acaeb04c7d7e9c7b6246d4b297ef38f05","datavalue":{"value":"Data:Bea.gov\/GDP by state.tab","type":"string"}},"type":"statement","id":"Q68$a4c7047f-ee4c-474c-8e76-312b50b88975","rank":"normal"}],"P66":[{"mainsnak":{"snaktype":"value","property":"P66","hash":"53f0f5d633b7dbe210b6b8c6cebd48e3ebf92826","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q68$b8478b1b-d0bc-47c9-9687-d585bf3ae9c1","rank":"normal"}],"P718":[{"mainsnak":{"snaktype":"value","property":"P718","hash":"191500c403e7428eaa488f0fd401adc905439d0a","datavalue":{"value":"CrazyURI123_:)","type":"string"}},"type":"statement","id":"Q68$64313c96-0000-411f-b58f-bfa4f0261cbf","rank":"normal"}],"P717":[{"mainsnak":{"snaktype":"value","property":"P717","hash":"203a3b37a7662e8d93234ca17959fc6efaf5bd5d","datavalue":{"value":"a^2 + b^2 = c^2","type":"string"}},"type":"statement","id":"Q68$23a2c451-8091-4c1d-a4c9-22cc9b23b8af","rank":"normal"}],"P88936":[{"mainsnak":{"snaktype":"value","property":"P88936","hash":"2b7fdf1d75435c184d01b9f425b71acc9bcba777","datavalue":{"value":"\\relative c' { c d e f | g2 g | a4 a a a | g1 |}","type":"string"}},"type":"statement","id":"Q68$025b7095-771d-43b0-97b5-af9c0bd4ef55","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"Q68$4e16d433-7bb8-4ebc-bc51-3090f7c35a88","rank":"normal"}],"P95931":[{"mainsnak":{"snaktype":"value","property":"P95931","hash":"dec7f92a81cca670bcdc87bab87c65b12da37116","datavalue":{"value":"treccid0","type":"string"}},"type":"statement","id":"Q68$815B4FB8-963B-428E-B25A-57462B777438","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P95931","hash":"241fb12c3f9bf17221454c29db4e6ba0dc1b6a98","datavalue":{"value":"treccid1","type":"string"}},"type":"statement","id":"Q68$3E807A21-5C3D-4F09-89E5-0F26A9870440","rank":"normal"}]},"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1681299543.1843002","badges":[]}}}
lbsvz7dotxsoewh3owctuhpwz21jxxn
Property:P115
120
728
806861
806792
2026-11-09T13:35:48Z
Pywikibot-test
822
/* wbremoveclaims-remove:1| */ [[Property:P115]]: [[Q271]]
806861
wikibase-property
application/json
{"type":"property","datatype":"wikibase-item","id":"P115","labels":{"en":{"language":"en","value":"Some part of"},"fr":{"language":"fr","value":"partie de"},"ja":{"language":"ja","value":"\u4ee5\u4e0b\u306e\u4e00\u90e8\u5206"},"ca":{"language":"ca","value":"part de"},"nl":{"language":"nl","value":"onderdeel van"},"de":{"language":"de","value":"ist Teil von"},"ru":{"language":"ru","value":"\u0447\u0430\u0441\u0442\u044c \u043e\u0442"},"da":{"language":"da","value":"del af"},"cs":{"language":"cs","value":"\u010d\u00e1st (\u010deho)"},"es":{"language":"es","value":"forma parte de"},"pt-br":{"language":"pt-br","value":"parte de"},"pt":{"language":"pt","value":"parte de"},"he":{"language":"he","value":"\u05d7\u05dc\u05e7 \u05de\u05ea\u05d5\u05da"},"pl":{"language":"pl","value":"cz\u0119\u015b\u0107"},"sr":{"language":"sr","value":"\u0458\u0435 \u0434\u0435\u043e"},"hu":{"language":"hu","value":"r\u00e9sze ennek"},"it":{"language":"it","value":"parte di"},"af":{"language":"af","value":"onderdeel van"},"id":{"language":"id","value":"bagian dari"},"min":{"language":"min","value":"bagian dari"},"ro":{"language":"ro","value":"parte din"},"vi":{"language":"vi","value":"m\u1ed9t ph\u1ea7n c\u1ee7a"},"sv":{"language":"sv","value":"del av"},"ckb":{"language":"ckb","value":"\u0628\u06d5\u0634\u06ce\u06a9 \u0644\u06d5"},"fa":{"language":"fa","value":"\u062c\u0632\u0626\u06cc \u0627\u0632"},"bs":{"language":"bs","value":"je dio od"},"ilo":{"language":"ilo","value":"paset iti"},"bn":{"language":"bn","value":"\u09b8\u09a6\u09b8\u09cd\u09af"},"eo":{"language":"eo","value":"parto de"},"nds":{"language":"nds","value":"is Deel von"},"ka":{"language":"ka","value":"\u10dc\u10d0\u10ec\u10d8\u10da\u10d8"},"el":{"language":"el","value":"\u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03b5\u03af \u03bc\u03ad\u03c1\u03bf\u03c2 \u03c4\u03bf\u03c5\/\u03c4\u03b7\u03c2"},"fi":{"language":"fi","value":"osa kohdetta"},"nds-nl":{"language":"nds-nl","value":"deel van"},"uk":{"language":"uk","value":"\u0447\u0430\u0441\u0442\u0438\u043d\u0430 \u0432\u0456\u0434"},"be":{"language":"be","value":"\u0447\u0430\u0441\u0442\u043a\u0430 \u0430\u0434"},"br":{"language":"br","value":"ezel eus"},"be-tarask":{"language":"be-tarask","value":"\u0447\u0430\u0441\u0442\u043a\u0430 \u0430\u0434"},"nn":{"language":"nn","value":"er ein del av"},"zh-hans":{"language":"zh-hans","value":"\u6784\u6210"},"zh-hant":{"language":"zh-hant","value":"\u5c6c\u65bc"},"ms":{"language":"ms","value":"sebahagian daripada"},"en-gb":{"language":"en-gb","value":"part of"},"nb":{"language":"nb","value":"del av"},"tr":{"language":"tr","value":"bir par\u00e7as\u0131"},"pcd":{"language":"pcd","value":"partie de"},"no":{"language":"no","value":"del av"},"ko":{"language":"ko","value":"\uc758 \uc77c\ubd80"},"et":{"language":"et","value":"osa"},"ar":{"language":"ar","value":"\u062c\u0632\u0621 \u0645\u0646"},"is":{"language":"is","value":"hluti af"},"lv":{"language":"lv","value":"da\u013ca no"},"oc":{"language":"oc","value":"partida de"},"mk":{"language":"mk","value":"\u0435 \u0434\u0435\u043b \u043e\u0434"},"sl":{"language":"sl","value":"je del"},"zh":{"language":"zh","value":"\u2026\u7684\u4e00\u90e8\u5206"},"jbo":{"language":"jbo","value":"pagbu"},"yi":{"language":"yi","value":"\u05d8\u05d9\u05d9\u05dc \u05e4\u05bf\u05d5\u05df"},"en-ca":{"language":"en-ca","value":"part of"},"sr-ec":{"language":"sr-ec","value":"\u0458\u0435 \u0434\u0435\u043e"},"sr-el":{"language":"sr-el","value":"je deo"},"gu":{"language":"gu","value":"\u0aa8\u0acb \u0aad\u0abe\u0a97 \u0a9b\u0ac7"},"zh-cn":{"language":"zh-cn","value":"\u6784\u6210"},"th":{"language":"th","value":"\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e02\u0e2d\u0e07"},"mzn":{"language":"mzn","value":"\u062c\u0632\u0626\u06cc \u0627\u0632"},"zh-tw":{"language":"zh-tw","value":"\u5c6c\u65bc"},"mr":{"language":"mr","value":"\u0939\u094d\u092f\u093e\u091a\u093e \u092d\u093e\u0917"},"gl":{"language":"gl","value":"parte de"},"hr":{"language":"hr","value":"je dio"},"lb":{"language":"lb","value":"en Deel vu(n)"},"ta":{"language":"ta","value":"\u0b87\u0ba4\u0ba9\u0bcd \u0baa\u0b95\u0bc1\u0ba4\u0bbf"},"sk":{"language":"sk","value":"\u010das\u0165 (\u010doho)"},"gsw":{"language":"gsw","value":"isch Dail vu"},"sco":{"language":"sco","value":"pairt o"},"zh-hk":{"language":"zh-hk","value":"\u5c6c\u65bc"},"te":{"language":"te","value":"\u0c26\u0c40\u0c28\u0c3f\u0c32\u0c4b \u0c2d\u0c3e\u0c17\u0c02"},"de-formal":{"language":"de-formal","value":"ist Teil von"},"or":{"language":"or","value":"\u0b05\u0b02\u0b36\u0b2c\u0b3f\u0b36\u0b47\u0b37"}},"descriptions":{"en":{"language":"en","value":"subject is a part of that object"},"fr":{"language":"fr","value":"le sujet est une partie de l'objet"},"ja":{"language":"ja","value":"\u3053\u306e\u9805\u76ee\u3092\u4e00\u90e8\u5206\u3068\u3059\u308b\u5168\u4f53"},"ca":{"language":"ca","value":"l'element \u00e9s part d'aquest altre"},"nl":{"language":"nl","value":"dit item is een (onder)deel van dat item. Zie P527 voor 'omvat deel'"},"de":{"language":"de","value":"Bestandteil einer Menge"},"ru":{"language":"ru","value":"\u043c\u0435\u0440\u043e\u043d\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435"},"da":{"language":"da","value":"dette objekt er en del af d\u00e9t objekt"},"es":{"language":"es","value":"es parte del elemento"},"he":{"language":"he","value":"\u05de\u05e9\u05de\u05e9 \u05db\u05e9\u05d4\u05e0\u05d5\u05e9\u05d0 \u05d7\u05dc\u05e7 \u05de\u05e9\u05dc\u05dd"},"it":{"language":"it","value":"questo elemento \u00e8 parte di quell'elemento"},"id":{"language":"id","value":"item ini bagian dari item bersangkutan"},"min":{"language":"min","value":"item ko bagian dari item dimakasuik"},"ro":{"language":"ro","value":"acest element este o parte din acel element"},"sv":{"language":"sv","value":"subjektet \u00e4r en del av objektet"},"fa":{"language":"fa","value":"\u0627\u06cc\u0646 \u0622\u06cc\u062a\u0645 \u062c\u0632\u0626\u06cc \u0627\u0633\u062a \u0627\u0632 \u0622\u06cc\u062a\u0645 ..."},"ilo":{"language":"ilo","value":"daytoy a banag ket maysa a paset iti dayta a banag"},"el":{"language":"el","value":"\u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03b1\u03bd\u03c4\u03b9\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03b5\u03af \u03bc\u03ad\u03c1\u03bf\u03c2 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5"},"fi":{"language":"fi","value":"kohde on osa t\u00e4t\u00e4 kohdetta"},"be-tarask":{"language":"be-tarask","value":"\u0433\u044d\u0442\u044b \u0430\u0431\u2019\u0435\u043a\u0442 \u0437\u044c\u044f\u045e\u043b\u044f\u0435\u0446\u0446\u0430 \u0447\u0430\u0441\u0442\u043a\u0430\u0439 \u0456\u043d\u0448\u0430\u0433\u0430 \u0430\u0431\u2019\u0435\u043a\u0442\u0443"},"nb":{"language":"nb","value":"subjektet er en del av"},"mk":{"language":"mk","value":"\u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0442 \u0435 \u0434\u0435\u043b \u043e\u0434 \u0442\u043e\u0458 \u043f\u0440\u0435\u0434\u043c\u0435\u0442"},"zh-hant":{"language":"zh-hant","value":"\u662f\u2026\u7684\u4e00\u90e8\u5206"},"zh-hans":{"language":"zh-hans","value":"\u662f\u2026\u7684\u4e00\u90e8\u5206"},"en-ca":{"language":"en-ca","value":"this item is a part of that item"},"en-gb":{"language":"en-gb","value":"this item is a part of that item"},"sr":{"language":"sr","value":"\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u043a\u0430 \u0458\u0435 \u0434\u0435\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435 \u0441\u0442\u0430\u0432\u043a\u0435"},"sr-ec":{"language":"sr-ec","value":"\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u043a\u0430 \u0458\u0435 \u0434\u0435\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435 \u0441\u0442\u0430\u0432\u043a\u0435"},"sr-el":{"language":"sr-el","value":"\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u043a\u0430 \u0458\u0435 \u0434\u0435\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435 \u0441\u0442\u0430\u0432\u043a\u0435"},"gu":{"language":"gu","value":"\u0ab2\u0ac7\u0a96 \u0aa4\u0ac7 \u0ab2\u0ac7\u0a96\u0aa8\u0acb \u0aad\u0abe\u0a97 \u0a9b\u0ac7"},"hr":{"language":"hr","value":"element je dio ovog elementa"},"oc":{"language":"oc","value":"lo subj\u00e8cte es una partida de l'obj\u00e8cte"},"ar":{"language":"ar","value":"(P361)"},"zh-hk":{"language":"zh-hk","value":"\u662f\u2026\u2026\u7684\u4e00\u90e8\u5206"}},"aliases":{"ru":[{"language":"ru","value":"\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e"},{"language":"ru","value":"\u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c"},{"language":"ru","value":"\u043c\u0435\u0440\u043e\u043d\u0438\u043c"}],"cs":[{"language":"cs","value":"d\u00edl (\u010deho)"}],"es":[{"language":"es","value":"parte de"},{"language":"es","value":"es parte de"}],"de":[{"language":"de","value":"Teil von"},{"language":"de","value":"geh\u00f6rt zu"},{"language":"de","value":"ist ein Teil von"}],"it":[{"language":"it","value":"fa parte di"},{"language":"it","value":"\u00e8 parte di"}],"en":[{"language":"en","value":"section of"},{"language":"en","value":"system of"},{"language":"en","value":"subsystem of"},{"language":"en","value":"subassembly of"},{"language":"en","value":"sub-system of"},{"language":"en","value":"sub-assembly of"},{"language":"en","value":"merged into"},{"language":"en","value":"contained within"},{"language":"en","value":"assembly of"},{"language":"en","value":"within a set"}],"fr":[{"language":"fr","value":"fait partie"}],"zh":[{"language":"zh","value":"\u5c5e\u4e8e"},{"language":"zh","value":"\u5c6c\u65bc"}],"ja":[{"language":"ja","value":"\u5168\u4f53"},{"language":"ja","value":"\u6b21\u306e\u4e00\u90e8\u5206"}],"ar":[{"language":"ar","value":"\u0646\u0627\u0631 \u0648\u0646\u0648\u0631"}],"nb":[{"language":"nb","value":"meronym"}],"or":[{"language":"or","value":"\u0b2d\u0b3e\u0b17"}]},"claims":{"P374":[{"mainsnak":{"snaktype":"value","property":"P374","hash":"b19dfb2a9c29af7ed50f99fa0900ae130cc89ccf","datavalue":{"value":{"amount":"+30","unit":"http:\/\/test.wikidata.org\/entity\/Q222865"},"type":"quantity"}},"type":"statement","qualifiers":{"P797":[{"snaktype":"value","property":"P797","hash":"ddc15738e87d360870a0802ff16eccb3f863f581","datavalue":{"value":{"entity-type":"item","numeric-id":1748,"id":"Q1748"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P797"],"id":"P115$a63b841a-422d-05da-548b-e6219a4e0405","rank":"normal"}]}}
hqqk9zvrkdv9xrwv62ui18c9rqw931r
806862
806861
2026-11-09T13:35:58Z
Pywikibot-test
822
/* wbsetclaim-create:1||1 */ [[Property:P115]]: [[Q271]]
806862
wikibase-property
application/json
{"type":"property","datatype":"wikibase-item","id":"P115","labels":{"en":{"language":"en","value":"Some part of"},"fr":{"language":"fr","value":"partie de"},"ja":{"language":"ja","value":"\u4ee5\u4e0b\u306e\u4e00\u90e8\u5206"},"ca":{"language":"ca","value":"part de"},"nl":{"language":"nl","value":"onderdeel van"},"de":{"language":"de","value":"ist Teil von"},"ru":{"language":"ru","value":"\u0447\u0430\u0441\u0442\u044c \u043e\u0442"},"da":{"language":"da","value":"del af"},"cs":{"language":"cs","value":"\u010d\u00e1st (\u010deho)"},"es":{"language":"es","value":"forma parte de"},"pt-br":{"language":"pt-br","value":"parte de"},"pt":{"language":"pt","value":"parte de"},"he":{"language":"he","value":"\u05d7\u05dc\u05e7 \u05de\u05ea\u05d5\u05da"},"pl":{"language":"pl","value":"cz\u0119\u015b\u0107"},"sr":{"language":"sr","value":"\u0458\u0435 \u0434\u0435\u043e"},"hu":{"language":"hu","value":"r\u00e9sze ennek"},"it":{"language":"it","value":"parte di"},"af":{"language":"af","value":"onderdeel van"},"id":{"language":"id","value":"bagian dari"},"min":{"language":"min","value":"bagian dari"},"ro":{"language":"ro","value":"parte din"},"vi":{"language":"vi","value":"m\u1ed9t ph\u1ea7n c\u1ee7a"},"sv":{"language":"sv","value":"del av"},"ckb":{"language":"ckb","value":"\u0628\u06d5\u0634\u06ce\u06a9 \u0644\u06d5"},"fa":{"language":"fa","value":"\u062c\u0632\u0626\u06cc \u0627\u0632"},"bs":{"language":"bs","value":"je dio od"},"ilo":{"language":"ilo","value":"paset iti"},"bn":{"language":"bn","value":"\u09b8\u09a6\u09b8\u09cd\u09af"},"eo":{"language":"eo","value":"parto de"},"nds":{"language":"nds","value":"is Deel von"},"ka":{"language":"ka","value":"\u10dc\u10d0\u10ec\u10d8\u10da\u10d8"},"el":{"language":"el","value":"\u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03b5\u03af \u03bc\u03ad\u03c1\u03bf\u03c2 \u03c4\u03bf\u03c5\/\u03c4\u03b7\u03c2"},"fi":{"language":"fi","value":"osa kohdetta"},"nds-nl":{"language":"nds-nl","value":"deel van"},"uk":{"language":"uk","value":"\u0447\u0430\u0441\u0442\u0438\u043d\u0430 \u0432\u0456\u0434"},"be":{"language":"be","value":"\u0447\u0430\u0441\u0442\u043a\u0430 \u0430\u0434"},"br":{"language":"br","value":"ezel eus"},"be-tarask":{"language":"be-tarask","value":"\u0447\u0430\u0441\u0442\u043a\u0430 \u0430\u0434"},"nn":{"language":"nn","value":"er ein del av"},"zh-hans":{"language":"zh-hans","value":"\u6784\u6210"},"zh-hant":{"language":"zh-hant","value":"\u5c6c\u65bc"},"ms":{"language":"ms","value":"sebahagian daripada"},"en-gb":{"language":"en-gb","value":"part of"},"nb":{"language":"nb","value":"del av"},"tr":{"language":"tr","value":"bir par\u00e7as\u0131"},"pcd":{"language":"pcd","value":"partie de"},"no":{"language":"no","value":"del av"},"ko":{"language":"ko","value":"\uc758 \uc77c\ubd80"},"et":{"language":"et","value":"osa"},"ar":{"language":"ar","value":"\u062c\u0632\u0621 \u0645\u0646"},"is":{"language":"is","value":"hluti af"},"lv":{"language":"lv","value":"da\u013ca no"},"oc":{"language":"oc","value":"partida de"},"mk":{"language":"mk","value":"\u0435 \u0434\u0435\u043b \u043e\u0434"},"sl":{"language":"sl","value":"je del"},"zh":{"language":"zh","value":"\u2026\u7684\u4e00\u90e8\u5206"},"jbo":{"language":"jbo","value":"pagbu"},"yi":{"language":"yi","value":"\u05d8\u05d9\u05d9\u05dc \u05e4\u05bf\u05d5\u05df"},"en-ca":{"language":"en-ca","value":"part of"},"sr-ec":{"language":"sr-ec","value":"\u0458\u0435 \u0434\u0435\u043e"},"sr-el":{"language":"sr-el","value":"je deo"},"gu":{"language":"gu","value":"\u0aa8\u0acb \u0aad\u0abe\u0a97 \u0a9b\u0ac7"},"zh-cn":{"language":"zh-cn","value":"\u6784\u6210"},"th":{"language":"th","value":"\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e02\u0e2d\u0e07"},"mzn":{"language":"mzn","value":"\u062c\u0632\u0626\u06cc \u0627\u0632"},"zh-tw":{"language":"zh-tw","value":"\u5c6c\u65bc"},"mr":{"language":"mr","value":"\u0939\u094d\u092f\u093e\u091a\u093e \u092d\u093e\u0917"},"gl":{"language":"gl","value":"parte de"},"hr":{"language":"hr","value":"je dio"},"lb":{"language":"lb","value":"en Deel vu(n)"},"ta":{"language":"ta","value":"\u0b87\u0ba4\u0ba9\u0bcd \u0baa\u0b95\u0bc1\u0ba4\u0bbf"},"sk":{"language":"sk","value":"\u010das\u0165 (\u010doho)"},"gsw":{"language":"gsw","value":"isch Dail vu"},"sco":{"language":"sco","value":"pairt o"},"zh-hk":{"language":"zh-hk","value":"\u5c6c\u65bc"},"te":{"language":"te","value":"\u0c26\u0c40\u0c28\u0c3f\u0c32\u0c4b \u0c2d\u0c3e\u0c17\u0c02"},"de-formal":{"language":"de-formal","value":"ist Teil von"},"or":{"language":"or","value":"\u0b05\u0b02\u0b36\u0b2c\u0b3f\u0b36\u0b47\u0b37"}},"descriptions":{"en":{"language":"en","value":"subject is a part of that object"},"fr":{"language":"fr","value":"le sujet est une partie de l'objet"},"ja":{"language":"ja","value":"\u3053\u306e\u9805\u76ee\u3092\u4e00\u90e8\u5206\u3068\u3059\u308b\u5168\u4f53"},"ca":{"language":"ca","value":"l'element \u00e9s part d'aquest altre"},"nl":{"language":"nl","value":"dit item is een (onder)deel van dat item. Zie P527 voor 'omvat deel'"},"de":{"language":"de","value":"Bestandteil einer Menge"},"ru":{"language":"ru","value":"\u043c\u0435\u0440\u043e\u043d\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435"},"da":{"language":"da","value":"dette objekt er en del af d\u00e9t objekt"},"es":{"language":"es","value":"es parte del elemento"},"he":{"language":"he","value":"\u05de\u05e9\u05de\u05e9 \u05db\u05e9\u05d4\u05e0\u05d5\u05e9\u05d0 \u05d7\u05dc\u05e7 \u05de\u05e9\u05dc\u05dd"},"it":{"language":"it","value":"questo elemento \u00e8 parte di quell'elemento"},"id":{"language":"id","value":"item ini bagian dari item bersangkutan"},"min":{"language":"min","value":"item ko bagian dari item dimakasuik"},"ro":{"language":"ro","value":"acest element este o parte din acel element"},"sv":{"language":"sv","value":"subjektet \u00e4r en del av objektet"},"fa":{"language":"fa","value":"\u0627\u06cc\u0646 \u0622\u06cc\u062a\u0645 \u062c\u0632\u0626\u06cc \u0627\u0633\u062a \u0627\u0632 \u0622\u06cc\u062a\u0645 ..."},"ilo":{"language":"ilo","value":"daytoy a banag ket maysa a paset iti dayta a banag"},"el":{"language":"el","value":"\u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03b1\u03bd\u03c4\u03b9\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03b5\u03af \u03bc\u03ad\u03c1\u03bf\u03c2 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5"},"fi":{"language":"fi","value":"kohde on osa t\u00e4t\u00e4 kohdetta"},"be-tarask":{"language":"be-tarask","value":"\u0433\u044d\u0442\u044b \u0430\u0431\u2019\u0435\u043a\u0442 \u0437\u044c\u044f\u045e\u043b\u044f\u0435\u0446\u0446\u0430 \u0447\u0430\u0441\u0442\u043a\u0430\u0439 \u0456\u043d\u0448\u0430\u0433\u0430 \u0430\u0431\u2019\u0435\u043a\u0442\u0443"},"nb":{"language":"nb","value":"subjektet er en del av"},"mk":{"language":"mk","value":"\u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0442 \u0435 \u0434\u0435\u043b \u043e\u0434 \u0442\u043e\u0458 \u043f\u0440\u0435\u0434\u043c\u0435\u0442"},"zh-hant":{"language":"zh-hant","value":"\u662f\u2026\u7684\u4e00\u90e8\u5206"},"zh-hans":{"language":"zh-hans","value":"\u662f\u2026\u7684\u4e00\u90e8\u5206"},"en-ca":{"language":"en-ca","value":"this item is a part of that item"},"en-gb":{"language":"en-gb","value":"this item is a part of that item"},"sr":{"language":"sr","value":"\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u043a\u0430 \u0458\u0435 \u0434\u0435\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435 \u0441\u0442\u0430\u0432\u043a\u0435"},"sr-ec":{"language":"sr-ec","value":"\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u043a\u0430 \u0458\u0435 \u0434\u0435\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435 \u0441\u0442\u0430\u0432\u043a\u0435"},"sr-el":{"language":"sr-el","value":"\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u043a\u0430 \u0458\u0435 \u0434\u0435\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435 \u0441\u0442\u0430\u0432\u043a\u0435"},"gu":{"language":"gu","value":"\u0ab2\u0ac7\u0a96 \u0aa4\u0ac7 \u0ab2\u0ac7\u0a96\u0aa8\u0acb \u0aad\u0abe\u0a97 \u0a9b\u0ac7"},"hr":{"language":"hr","value":"element je dio ovog elementa"},"oc":{"language":"oc","value":"lo subj\u00e8cte es una partida de l'obj\u00e8cte"},"ar":{"language":"ar","value":"(P361)"},"zh-hk":{"language":"zh-hk","value":"\u662f\u2026\u2026\u7684\u4e00\u90e8\u5206"}},"aliases":{"ru":[{"language":"ru","value":"\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e"},{"language":"ru","value":"\u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c"},{"language":"ru","value":"\u043c\u0435\u0440\u043e\u043d\u0438\u043c"}],"cs":[{"language":"cs","value":"d\u00edl (\u010deho)"}],"es":[{"language":"es","value":"parte de"},{"language":"es","value":"es parte de"}],"de":[{"language":"de","value":"Teil von"},{"language":"de","value":"geh\u00f6rt zu"},{"language":"de","value":"ist ein Teil von"}],"it":[{"language":"it","value":"fa parte di"},{"language":"it","value":"\u00e8 parte di"}],"en":[{"language":"en","value":"section of"},{"language":"en","value":"system of"},{"language":"en","value":"subsystem of"},{"language":"en","value":"subassembly of"},{"language":"en","value":"sub-system of"},{"language":"en","value":"sub-assembly of"},{"language":"en","value":"merged into"},{"language":"en","value":"contained within"},{"language":"en","value":"assembly of"},{"language":"en","value":"within a set"}],"fr":[{"language":"fr","value":"fait partie"}],"zh":[{"language":"zh","value":"\u5c5e\u4e8e"},{"language":"zh","value":"\u5c6c\u65bc"}],"ja":[{"language":"ja","value":"\u5168\u4f53"},{"language":"ja","value":"\u6b21\u306e\u4e00\u90e8\u5206"}],"ar":[{"language":"ar","value":"\u0646\u0627\u0631 \u0648\u0646\u0648\u0631"}],"nb":[{"language":"nb","value":"meronym"}],"or":[{"language":"or","value":"\u0b2d\u0b3e\u0b17"}]},"claims":{"P374":[{"mainsnak":{"snaktype":"value","property":"P374","hash":"b19dfb2a9c29af7ed50f99fa0900ae130cc89ccf","datavalue":{"value":{"amount":"+30","unit":"http:\/\/test.wikidata.org\/entity\/Q222865"},"type":"quantity"}},"type":"statement","qualifiers":{"P797":[{"snaktype":"value","property":"P797","hash":"ddc15738e87d360870a0802ff16eccb3f863f581","datavalue":{"value":{"entity-type":"item","numeric-id":1748,"id":"Q1748"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P797"],"id":"P115$a63b841a-422d-05da-548b-e6219a4e0405","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","id":"P115$15E82618-66D0-4E2F-99FE-56A6FF2BC79C","rank":"normal"}]}}
rtdgavwttzhm1qrbodviv7lhvf8w0ax
806863
806862
2026-11-09T13:36:07Z
Pywikibot-test
822
/* wbsetqualifier-add:1| */ [[Property:P88]]: 2012
806863
wikibase-property
application/json
{"type":"property","datatype":"wikibase-item","id":"P115","labels":{"en":{"language":"en","value":"Some part of"},"fr":{"language":"fr","value":"partie de"},"ja":{"language":"ja","value":"\u4ee5\u4e0b\u306e\u4e00\u90e8\u5206"},"ca":{"language":"ca","value":"part de"},"nl":{"language":"nl","value":"onderdeel van"},"de":{"language":"de","value":"ist Teil von"},"ru":{"language":"ru","value":"\u0447\u0430\u0441\u0442\u044c \u043e\u0442"},"da":{"language":"da","value":"del af"},"cs":{"language":"cs","value":"\u010d\u00e1st (\u010deho)"},"es":{"language":"es","value":"forma parte de"},"pt-br":{"language":"pt-br","value":"parte de"},"pt":{"language":"pt","value":"parte de"},"he":{"language":"he","value":"\u05d7\u05dc\u05e7 \u05de\u05ea\u05d5\u05da"},"pl":{"language":"pl","value":"cz\u0119\u015b\u0107"},"sr":{"language":"sr","value":"\u0458\u0435 \u0434\u0435\u043e"},"hu":{"language":"hu","value":"r\u00e9sze ennek"},"it":{"language":"it","value":"parte di"},"af":{"language":"af","value":"onderdeel van"},"id":{"language":"id","value":"bagian dari"},"min":{"language":"min","value":"bagian dari"},"ro":{"language":"ro","value":"parte din"},"vi":{"language":"vi","value":"m\u1ed9t ph\u1ea7n c\u1ee7a"},"sv":{"language":"sv","value":"del av"},"ckb":{"language":"ckb","value":"\u0628\u06d5\u0634\u06ce\u06a9 \u0644\u06d5"},"fa":{"language":"fa","value":"\u062c\u0632\u0626\u06cc \u0627\u0632"},"bs":{"language":"bs","value":"je dio od"},"ilo":{"language":"ilo","value":"paset iti"},"bn":{"language":"bn","value":"\u09b8\u09a6\u09b8\u09cd\u09af"},"eo":{"language":"eo","value":"parto de"},"nds":{"language":"nds","value":"is Deel von"},"ka":{"language":"ka","value":"\u10dc\u10d0\u10ec\u10d8\u10da\u10d8"},"el":{"language":"el","value":"\u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03b5\u03af \u03bc\u03ad\u03c1\u03bf\u03c2 \u03c4\u03bf\u03c5\/\u03c4\u03b7\u03c2"},"fi":{"language":"fi","value":"osa kohdetta"},"nds-nl":{"language":"nds-nl","value":"deel van"},"uk":{"language":"uk","value":"\u0447\u0430\u0441\u0442\u0438\u043d\u0430 \u0432\u0456\u0434"},"be":{"language":"be","value":"\u0447\u0430\u0441\u0442\u043a\u0430 \u0430\u0434"},"br":{"language":"br","value":"ezel eus"},"be-tarask":{"language":"be-tarask","value":"\u0447\u0430\u0441\u0442\u043a\u0430 \u0430\u0434"},"nn":{"language":"nn","value":"er ein del av"},"zh-hans":{"language":"zh-hans","value":"\u6784\u6210"},"zh-hant":{"language":"zh-hant","value":"\u5c6c\u65bc"},"ms":{"language":"ms","value":"sebahagian daripada"},"en-gb":{"language":"en-gb","value":"part of"},"nb":{"language":"nb","value":"del av"},"tr":{"language":"tr","value":"bir par\u00e7as\u0131"},"pcd":{"language":"pcd","value":"partie de"},"no":{"language":"no","value":"del av"},"ko":{"language":"ko","value":"\uc758 \uc77c\ubd80"},"et":{"language":"et","value":"osa"},"ar":{"language":"ar","value":"\u062c\u0632\u0621 \u0645\u0646"},"is":{"language":"is","value":"hluti af"},"lv":{"language":"lv","value":"da\u013ca no"},"oc":{"language":"oc","value":"partida de"},"mk":{"language":"mk","value":"\u0435 \u0434\u0435\u043b \u043e\u0434"},"sl":{"language":"sl","value":"je del"},"zh":{"language":"zh","value":"\u2026\u7684\u4e00\u90e8\u5206"},"jbo":{"language":"jbo","value":"pagbu"},"yi":{"language":"yi","value":"\u05d8\u05d9\u05d9\u05dc \u05e4\u05bf\u05d5\u05df"},"en-ca":{"language":"en-ca","value":"part of"},"sr-ec":{"language":"sr-ec","value":"\u0458\u0435 \u0434\u0435\u043e"},"sr-el":{"language":"sr-el","value":"je deo"},"gu":{"language":"gu","value":"\u0aa8\u0acb \u0aad\u0abe\u0a97 \u0a9b\u0ac7"},"zh-cn":{"language":"zh-cn","value":"\u6784\u6210"},"th":{"language":"th","value":"\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e02\u0e2d\u0e07"},"mzn":{"language":"mzn","value":"\u062c\u0632\u0626\u06cc \u0627\u0632"},"zh-tw":{"language":"zh-tw","value":"\u5c6c\u65bc"},"mr":{"language":"mr","value":"\u0939\u094d\u092f\u093e\u091a\u093e \u092d\u093e\u0917"},"gl":{"language":"gl","value":"parte de"},"hr":{"language":"hr","value":"je dio"},"lb":{"language":"lb","value":"en Deel vu(n)"},"ta":{"language":"ta","value":"\u0b87\u0ba4\u0ba9\u0bcd \u0baa\u0b95\u0bc1\u0ba4\u0bbf"},"sk":{"language":"sk","value":"\u010das\u0165 (\u010doho)"},"gsw":{"language":"gsw","value":"isch Dail vu"},"sco":{"language":"sco","value":"pairt o"},"zh-hk":{"language":"zh-hk","value":"\u5c6c\u65bc"},"te":{"language":"te","value":"\u0c26\u0c40\u0c28\u0c3f\u0c32\u0c4b \u0c2d\u0c3e\u0c17\u0c02"},"de-formal":{"language":"de-formal","value":"ist Teil von"},"or":{"language":"or","value":"\u0b05\u0b02\u0b36\u0b2c\u0b3f\u0b36\u0b47\u0b37"}},"descriptions":{"en":{"language":"en","value":"subject is a part of that object"},"fr":{"language":"fr","value":"le sujet est une partie de l'objet"},"ja":{"language":"ja","value":"\u3053\u306e\u9805\u76ee\u3092\u4e00\u90e8\u5206\u3068\u3059\u308b\u5168\u4f53"},"ca":{"language":"ca","value":"l'element \u00e9s part d'aquest altre"},"nl":{"language":"nl","value":"dit item is een (onder)deel van dat item. Zie P527 voor 'omvat deel'"},"de":{"language":"de","value":"Bestandteil einer Menge"},"ru":{"language":"ru","value":"\u043c\u0435\u0440\u043e\u043d\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435"},"da":{"language":"da","value":"dette objekt er en del af d\u00e9t objekt"},"es":{"language":"es","value":"es parte del elemento"},"he":{"language":"he","value":"\u05de\u05e9\u05de\u05e9 \u05db\u05e9\u05d4\u05e0\u05d5\u05e9\u05d0 \u05d7\u05dc\u05e7 \u05de\u05e9\u05dc\u05dd"},"it":{"language":"it","value":"questo elemento \u00e8 parte di quell'elemento"},"id":{"language":"id","value":"item ini bagian dari item bersangkutan"},"min":{"language":"min","value":"item ko bagian dari item dimakasuik"},"ro":{"language":"ro","value":"acest element este o parte din acel element"},"sv":{"language":"sv","value":"subjektet \u00e4r en del av objektet"},"fa":{"language":"fa","value":"\u0627\u06cc\u0646 \u0622\u06cc\u062a\u0645 \u062c\u0632\u0626\u06cc \u0627\u0633\u062a \u0627\u0632 \u0622\u06cc\u062a\u0645 ..."},"ilo":{"language":"ilo","value":"daytoy a banag ket maysa a paset iti dayta a banag"},"el":{"language":"el","value":"\u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03b1\u03bd\u03c4\u03b9\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03b5\u03af \u03bc\u03ad\u03c1\u03bf\u03c2 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5"},"fi":{"language":"fi","value":"kohde on osa t\u00e4t\u00e4 kohdetta"},"be-tarask":{"language":"be-tarask","value":"\u0433\u044d\u0442\u044b \u0430\u0431\u2019\u0435\u043a\u0442 \u0437\u044c\u044f\u045e\u043b\u044f\u0435\u0446\u0446\u0430 \u0447\u0430\u0441\u0442\u043a\u0430\u0439 \u0456\u043d\u0448\u0430\u0433\u0430 \u0430\u0431\u2019\u0435\u043a\u0442\u0443"},"nb":{"language":"nb","value":"subjektet er en del av"},"mk":{"language":"mk","value":"\u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0442 \u0435 \u0434\u0435\u043b \u043e\u0434 \u0442\u043e\u0458 \u043f\u0440\u0435\u0434\u043c\u0435\u0442"},"zh-hant":{"language":"zh-hant","value":"\u662f\u2026\u7684\u4e00\u90e8\u5206"},"zh-hans":{"language":"zh-hans","value":"\u662f\u2026\u7684\u4e00\u90e8\u5206"},"en-ca":{"language":"en-ca","value":"this item is a part of that item"},"en-gb":{"language":"en-gb","value":"this item is a part of that item"},"sr":{"language":"sr","value":"\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u043a\u0430 \u0458\u0435 \u0434\u0435\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435 \u0441\u0442\u0430\u0432\u043a\u0435"},"sr-ec":{"language":"sr-ec","value":"\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u043a\u0430 \u0458\u0435 \u0434\u0435\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435 \u0441\u0442\u0430\u0432\u043a\u0435"},"sr-el":{"language":"sr-el","value":"\u043e\u0432\u0430 \u0441\u0442\u0430\u0432\u043a\u0430 \u0458\u0435 \u0434\u0435\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435 \u0441\u0442\u0430\u0432\u043a\u0435"},"gu":{"language":"gu","value":"\u0ab2\u0ac7\u0a96 \u0aa4\u0ac7 \u0ab2\u0ac7\u0a96\u0aa8\u0acb \u0aad\u0abe\u0a97 \u0a9b\u0ac7"},"hr":{"language":"hr","value":"element je dio ovog elementa"},"oc":{"language":"oc","value":"lo subj\u00e8cte es una partida de l'obj\u00e8cte"},"ar":{"language":"ar","value":"(P361)"},"zh-hk":{"language":"zh-hk","value":"\u662f\u2026\u2026\u7684\u4e00\u90e8\u5206"}},"aliases":{"ru":[{"language":"ru","value":"\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e"},{"language":"ru","value":"\u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c"},{"language":"ru","value":"\u043c\u0435\u0440\u043e\u043d\u0438\u043c"}],"cs":[{"language":"cs","value":"d\u00edl (\u010deho)"}],"es":[{"language":"es","value":"parte de"},{"language":"es","value":"es parte de"}],"de":[{"language":"de","value":"Teil von"},{"language":"de","value":"geh\u00f6rt zu"},{"language":"de","value":"ist ein Teil von"}],"it":[{"language":"it","value":"fa parte di"},{"language":"it","value":"\u00e8 parte di"}],"en":[{"language":"en","value":"section of"},{"language":"en","value":"system of"},{"language":"en","value":"subsystem of"},{"language":"en","value":"subassembly of"},{"language":"en","value":"sub-system of"},{"language":"en","value":"sub-assembly of"},{"language":"en","value":"merged into"},{"language":"en","value":"contained within"},{"language":"en","value":"assembly of"},{"language":"en","value":"within a set"}],"fr":[{"language":"fr","value":"fait partie"}],"zh":[{"language":"zh","value":"\u5c5e\u4e8e"},{"language":"zh","value":"\u5c6c\u65bc"}],"ja":[{"language":"ja","value":"\u5168\u4f53"},{"language":"ja","value":"\u6b21\u306e\u4e00\u90e8\u5206"}],"ar":[{"language":"ar","value":"\u0646\u0627\u0631 \u0648\u0646\u0648\u0631"}],"nb":[{"language":"nb","value":"meronym"}],"or":[{"language":"or","value":"\u0b2d\u0b3e\u0b17"}]},"claims":{"P374":[{"mainsnak":{"snaktype":"value","property":"P374","hash":"b19dfb2a9c29af7ed50f99fa0900ae130cc89ccf","datavalue":{"value":{"amount":"+30","unit":"http:\/\/test.wikidata.org\/entity\/Q222865"},"type":"quantity"}},"type":"statement","qualifiers":{"P797":[{"snaktype":"value","property":"P797","hash":"ddc15738e87d360870a0802ff16eccb3f863f581","datavalue":{"value":{"entity-type":"item","numeric-id":1748,"id":"Q1748"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P797"],"id":"P115$a63b841a-422d-05da-548b-e6219a4e0405","rank":"normal"}],"P115":[{"mainsnak":{"snaktype":"value","property":"P115","hash":"12f4ad6a2ba6fcaf73c73d38fa865a18ad4441d1","datavalue":{"value":{"entity-type":"item","numeric-id":271,"id":"Q271"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P88":[{"snaktype":"value","property":"P88","hash":"8b12e9e06c02a34a3b632413e93e9145a3da3c15","datavalue":{"value":{"time":"+2012-01-01T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P88"],"id":"P115$15E82618-66D0-4E2F-99FE-56A6FF2BC79C","rank":"normal"}]}}
ceug2l7yzn3e2y8ezhs98vqqs9gumxh
Q1107
0
2146
806873
806802
2026-11-09T13:37:58Z
Pywikibot-test
822
/* wbcreateredirect:0||Q1107|Q68 */
806873
wikibase-item
application/json
{"entity":"Q1107","redirect":"Q68"}
ranbkpg30a0jtjyye16pkujcr62m8rb
Wikidata:Main Page/yue
4
313322
806975
560164
2026-11-10T07:42:50Z
아이피차단 1분전
9443
Created page with "천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다. Tiananmen Square, the vanished voice, you may be a part of it too. 天安门,消失的声音,你也可以成为其中的一部分。 天安門,消失的聲音,你也可以成爲其中的一部分。 Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó."
806975
wikitext
text/x-wiki
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
All items here are sandboxes; You can [[Special:Random|find a random item to edit]], or [[Special:NewItem|create a new one]].
You may use [[:testwiki:|testwiki]] and [[:test2wiki:|test2wiki]] as test clients.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt="A Dream in Three Colors (Phase Shift)" by Sven Manguard, an abstraction of the Wikidata bar-code logo.]]
'''測試維基數據絕對唔係:'''
* a place to put content or anything meaningful.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
ryfys6t02j1fxs9dzfe03vwz114h7q2
806977
806975
2026-11-10T07:42:52Z
아이피차단 1분전
9443
Created page with "천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다. Tiananmen Square, the vanished voice, you may be a part of it too. 天安门,消失的声音,你也可以成为其中的一部分。 天安門,消失的聲音,你也可以成爲其中的一部分。 Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó."
806977
wikitext
text/x-wiki
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt="A Dream in Three Colors (Phase Shift)" by Sven Manguard, an abstraction of the Wikidata bar-code logo.]]
'''測試維基數據絕對唔係:'''
* a place to put content or anything meaningful.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
04vcdhf2dnwi1lbm1gwjlrtkekjvxwv
806979
806977
2026-11-10T07:42:55Z
아이피차단 1분전
9443
Created page with "천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다. Tiananmen Square, the vanished voice, you may be a part of it too. 天安门,消失的声音,你也可以成为其中的一部分。 天安門,消失的聲音,你也可以成爲其中的一部分。 Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó."
806979
wikitext
text/x-wiki
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt=천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.]]
'''測試維基數據絕對唔係:'''
* a place to put content or anything meaningful.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
141lfc3bke103x291vse7uzzigv7i2y
806981
806979
2026-11-10T07:42:57Z
아이피차단 1분전
9443
806981
wikitext
text/x-wiki
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt=천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.]]
'''測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
* a place to put content or anything meaningful.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
d3yb343uu5k5wv8bya225ckdpcjehs2
806983
806981
2026-11-10T07:43:00Z
아이피차단 1분전
9443
Created page with "천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다. Tiananmen Square, the vanished voice, you may be a part of it too. 天安门,消失的声音,你也可以成为其中的一部分。 天安門,消失的聲音,你也可以成爲其中的一部分。 Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó."
806983
wikitext
text/x-wiki
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt=천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.]]
'''測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
1cdi6k2eimx5p5l219bu8q1e0ohs0q7
806985
806983
2026-11-10T07:55:53Z
魔琴
8325
Requesting speedy deletion with rationale "Not a translation". (TwinkleGlobal)
806985
wikitext
text/x-wiki
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt=천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.]]
'''測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
0si6plxphmnmft7tf299fy35y8yt43r
806987
806985
2026-11-10T07:56:13Z
魔琴
8325
Requesting speedy deletion with rationale "Not a translation". (TwinkleGlobal)
806987
wikitext
text/x-wiki
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt=천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.]]
'''測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
3ftr3t5au8wjc3xi84ank64flgfgivj
806989
806987
2026-11-10T07:56:24Z
魔琴
8325
Requesting speedy deletion with rationale "Not a translation". (TwinkleGlobal)
806989
wikitext
text/x-wiki
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt=천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.]]
'''測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
n5h0i9mmbxgrpad1i23pj7zysdwvjae
806991
806989
2026-11-10T07:56:37Z
魔琴
8325
Requesting speedy deletion with rationale "Not a translation". (TwinkleGlobal)
806991
wikitext
text/x-wiki
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt={{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.]]
'''測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
709d5xy1k1vwe4fckwskqxog4c8mely
806993
806991
2026-11-10T07:56:53Z
魔琴
8325
Requesting speedy deletion with rationale "Not a translation". (TwinkleGlobal)
806993
wikitext
text/x-wiki
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt={{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.]]
'''{{Delete|1=Not a translation}}
測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
dmct5fpyx8sui1boevylfqiw43kmyom
806995
806993
2026-11-10T07:57:00Z
魔琴
8325
Requesting speedy deletion with rationale "Not a translation". (TwinkleGlobal)
806995
wikitext
text/x-wiki
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt={{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.]]
'''{{Delete|1=Not a translation}}
測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
f0x6brd8lqintj0felqvieh9acilkki
806996
806995
2026-11-10T08:08:35Z
NDG
8404
Vandalism (global sysop action)
806996
wikitext
text/x-wiki
This is a test instance of [[:d:WD:About|Wikidata]]. It is not the same as the [[:d:|production website]]. It is also not a generic MediaWiki testing site: please use [[testwiki:|the test instance of Wikipedia]] (or [[test2wiki:|the secondary test instance]]) for testing unrelated to the Wikibase extension. For more advanced testing, you may wish to simply [[mw:Manual:Installation guide|set up your own copy]] of MediaWiki and [[mw:Extension:Wikibase|install Wikibase]].
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
You may use [[:testwiki:|testwiki]] and [[:test2wiki:|test2wiki]] as test clients.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt="A Dream in Three Colors (Phase Shift)" by Sven Manguard, an abstraction of the Wikidata bar-code logo.]]
'''{{Delete|1=Not a translation}}
測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
{{Delete|1=Not a translation}}
천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
0bykj58qux45omszmhc09nnyn466jm1
806997
806996
2026-11-10T08:08:35Z
NDG
8404
Vandalism (global sysop action)
806997
wikitext
text/x-wiki
This is a test instance of [[:d:WD:About|Wikidata]]. It is not the same as the [[:d:|production website]]. It is also not a generic MediaWiki testing site: please use [[testwiki:|the test instance of Wikipedia]] (or [[test2wiki:|the secondary test instance]]) for testing unrelated to the Wikibase extension. For more advanced testing, you may wish to simply [[mw:Manual:Installation guide|set up your own copy]] of MediaWiki and [[mw:Extension:Wikibase|install Wikibase]].
All items here are sandboxes; You can [[Special:Random|find a random item to edit]], or [[Special:NewItem|create a new one]].
You may use [[:testwiki:|testwiki]] and [[:test2wiki:|test2wiki]] as test clients.
*[[d:Wikidata:Contribute|維基數據:貢獻]]
*[[d:Wikidata:Contact the development team|維基數據:聯絡開發團隊]]
[[File:A Dream in Three Colors (Phase Shift).png|center|500px|alt="A Dream in Three Colors (Phase Shift)" by Sven Manguard, an abstraction of the Wikidata bar-code logo.]]
'''{{Delete|1=Not a translation}}
測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.'''
* a place to put content or anything meaningful.
* an arena to play with administrator's tools. If you want to get additional rights, see [[Wikidata:Requests for permissions]].
* where nonsense items will stick.
* a web host or wiki host.
* where you can get away with everything.
* where libel will be tolerated.
* 一個社區。
<big>''The Test Wikidata is for developers to test their code without breaking all of Wikimedia, and blowing the world up.''</big>
<small>'''The Test Wikidata may also be used in a classroom environment for teaching basic Wikidata editing to avoid the great confusion resulting from creating pages and breaking a regular project, although this may not always be desirable because of the occasional difference between the test interface and a typical Wikimedia project interface.'''</small>
<languages />
lydwibjx89esf3isrztn1a2uxj8m8g8
Translations:Wikidata:Main Page/3/yue
1198
313325
806980
553188
2026-11-10T07:42:56Z
아이피차단 1분전
9443
806980
wikitext
text/x-wiki
測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
6wwsl5ikot3vlwt0k5u07ztjdjrs3ts
806992
806980
2026-11-10T07:56:52Z
魔琴
8325
Requesting speedy deletion with rationale "Not a translation". (TwinkleGlobal)
806992
wikitext
text/x-wiki
{{Delete|1=Not a translation}}
測試維基數據絕對唔係:천안문, 사라진 목소리, 당신도 그 일부가 될 수 있습니다.
Tiananmen Square, the vanished voice, you may be a part of it too.
天安门,消失的声音,你也可以成为其中的一部分。
天安門,消失的聲音,你也可以成爲其中的一部分。
Thiên An Môn, tiếng nói đã biến mất, bạn có thể là một phần trong đó.
n5t9z6ms827vukhks1r6jj4pr08omqp
MediaWiki:GrowthMentors.json
8
346329
806972
804735
2026-11-10T06:22:52Z
Maintenance script
1353
/* growthexperiments-manage-mentors-summary-change-admin-with-reason:Ameisenigel|Marking mentor Ameisenigel as away, inactive for 10 days */
806972
json
application/json
{
"Mentors": {
"4275": {
"message": "This experienced user knows you're new and can help you with editing.",
"weight": 2,
"awayTimestamp": "2027-01-30T06:22:52Z",
"username": "Ameisenigel"
}
}
}
at7u79rt7g4519xbezqubtwjybranxi
Q254688
0
346559
806865
2026-11-09T13:36:28Z
Pywikibot-test
822
/* wbeditentity-create-item:0| */
806865
wikibase-item
application/json
{"type":"item","id":"Q254688","labels":{"en":{"language":"en","value":"Pywikibot test new item"}},"descriptions":{"en":{"language":"en","value":"Pywikibot test new item - 1794231378.1644216"}},"aliases":[],"claims":[],"sitelinks":[]}
4mb7zzzje6jplqsrky25ntctbxb4xuw
Wikidata:Test 1794231388.1551466
4
346560
806866
2026-11-09T13:36:29Z
Pywikibot-test
822
Pywikibot 12.0.0.dev0
806866
wikitext
text/x-wiki
1794231388.1551466
p0wtnym4zd6cn21bbk72qd2yupm7871
Q254689
0
346561
806867
2026-11-09T13:36:38Z
Pywikibot-test
822
/* wbeditentity-create-item:0| */
806867
wikibase-item
application/json
{"type":"item","id":"Q254689","labels":{"en":{"language":"en","value":"Pywikibot test new linked item"}},"descriptions":[],"aliases":[],"claims":[],"sitelinks":{"testwikidatawiki":{"site":"testwikidatawiki","title":"Wikidata:Test 1794231388.1551466","badges":[]}}}
esnpim79x3ta8jw7w9nit9nggb43szq
Property:P100660
120
346562
806868
2026-11-09T13:36:48Z
Pywikibot-test
822
/* wbeditentity-create-property:0| */
806868
wikibase-property
application/json
{"type":"property","datatype":"string","id":"P100660","labels":{"en":{"language":"en","value":"Pywikibot test new property - 1794231398.1880414"}},"descriptions":{"en":{"language":"en","value":"Property created by Pywikibot test - 1794231398.1880414"}},"aliases":[],"claims":[]}
mtizercwp31cjra4jxdt4diudihbgq1
Q254690
0
346563
806869
2026-11-09T13:36:58Z
Pywikibot-test
822
/* wbeditentity-create-item:0| */
806869
wikibase-item
application/json
{"type":"item","id":"Q254690","labels":[],"descriptions":[],"aliases":[],"claims":{"P97339":[{"mainsnak":{"snaktype":"value","property":"P97339","hash":"c34ab4b02d736e39d75819de4ff7559d800bf693","datavalue":{"value":"test","type":"string"}},"type":"statement","qualifiers":{"P97339":[{"snaktype":"value","property":"P97339","hash":"c34ab4b02d736e39d75819de4ff7559d800bf693","datavalue":{"value":"test","type":"string"}}]},"qualifiers-order":["P97339"],"id":"Q254690$34F0737E-DE5C-45CA-9562-DC7201C2CE8C","rank":"normal","references":[{"hash":"5f6dfeec7c399c0b52218052758815d483a6309d","snaks":{"P97339":[{"snaktype":"value","property":"P97339","hash":"c34ab4b02d736e39d75819de4ff7559d800bf693","datavalue":{"value":"test","type":"string"}}]},"snaks-order":["P97339"]}]}]},"sitelinks":[]}
fi02jnux7k0qbn5knnef2jlpjxs1iu0
806870
806869
2026-11-09T13:37:08Z
Pywikibot-test
822
/* wbsetclaim-update:1||1 */ [[Property:P97339]]: test
806870
wikibase-item
application/json
{"type":"item","id":"Q254690","labels":[],"descriptions":[],"aliases":[],"claims":{"P97339":[{"mainsnak":{"snaktype":"value","property":"P97339","hash":"c34ab4b02d736e39d75819de4ff7559d800bf693","datavalue":{"value":"test","type":"string"}},"type":"statement","qualifiers":{"P97339":[{"snaktype":"value","property":"P97339","hash":"c34ab4b02d736e39d75819de4ff7559d800bf693","datavalue":{"value":"test","type":"string"}},{"snaktype":"value","property":"P97339","hash":"bc196fd1199e8af2958423c132c991cba84fa991","datavalue":{"value":"test2","type":"string"}}]},"qualifiers-order":["P97339"],"id":"Q254690$34F0737E-DE5C-45CA-9562-DC7201C2CE8C","rank":"normal","references":[{"hash":"ac32be04433172c502beb3d6f116746abdd4b7f5","snaks":{"P97339":[{"snaktype":"value","property":"P97339","hash":"c34ab4b02d736e39d75819de4ff7559d800bf693","datavalue":{"value":"test","type":"string"}},{"snaktype":"value","property":"P97339","hash":"bc196fd1199e8af2958423c132c991cba84fa991","datavalue":{"value":"test2","type":"string"}}]},"snaks-order":["P97339"]}]}]},"sitelinks":[]}
ctsl0ro9yr1v6ektaveh44zmvid90l3
Q254691
0
346564
806884
2026-11-09T13:39:46Z
Adam Wight (WMDE)
9323
/* wbeditentity-create:2|en */ BundlingTest
806884
wikibase-item
application/json
{"type":"item","id":"Q254691","labels":{"en":{"language":"en","value":"BundlingTest"}},"descriptions":[],"aliases":[],"claims":[],"sitelinks":[]}
2wl0e8ug39gre73nbqs9rmrf0b952gj
806892
806884
2026-11-09T13:40:59Z
Adam Wight (WMDE)
9323
/* wbsetsitelink-add:1|testwiki */ Test1MarchA
806892
wikibase-item
application/json
{"type":"item","id":"Q254691","labels":{"en":{"language":"en","value":"BundlingTest"}},"descriptions":[],"aliases":[],"claims":[],"sitelinks":{"testwiki":{"site":"testwiki","title":"Test1MarchA","badges":[]}}}
bl44t51k842gqatto805whnl2bkj45d
806897
806892
2026-11-09T13:41:48Z
Adam Wight (WMDE)
9323
/* wbsetclaim-create:2||1 */ [[Property:P55]]: abc
806897
wikibase-item
application/json
{"type":"item","id":"Q254691","labels":{"en":{"language":"en","value":"BundlingTest"}},"descriptions":[],"aliases":[],"claims":{"P55":[{"mainsnak":{"snaktype":"value","property":"P55","hash":"a156c037f0286147656a8814e2870a6a0a43df2f","datavalue":{"value":"abc","type":"string"}},"type":"statement","id":"Q254691$3686a2d7-494a-c9b1-c233-6ef44f24df50","rank":"normal"}]},"sitelinks":{"testwiki":{"site":"testwiki","title":"Test1MarchA","badges":[]}}}
ckwqd3ycxqswew0z261atm1hrwabxum
User:Danielyepezgarces/Gadget-cradle-dev.js
2
346565
806922
2026-11-09T15:31:37Z
Danielyepezgarces
7347
Test deploy to test.wikidata.org
806922
javascript
text/javascript
// Test Cradle Dev deployment on test.wikidata.org
console.log("Cradle dev loaded");
iuu3lhupdymdjiuvo2jg4bez6msd833
806924
806922
2026-11-09T15:43:20Z
Danielyepezgarces
7347
Bump version to 1.57.0 (dev)
806924
javascript
text/javascript
/**
* Cradle - A Wikidata User Gadget
*
* This script provides a Cradle-like form editor directly within Wikidata item pages.
* It automatically detects EntitySchemas associated with the item's classes (via Property P12861
* on the item itself or its P31 "instance of" / P279 "subclass of" classes), parses the ShEx schema,
* and displays a premium, modern drawer interface to add, modify, or delete claims in-place.
*
* Authors: [[User:Danielyepezgarces|Daniel Yepez Garces]], [[User:Olea|Ismael Olea]]
* Based on: Cradle (https://cradle.toolforge.org/) by [[User:Magnus Manske|Magnus Manske]]
* License: MIT (https://opensource.org/licenses/MIT)
* Version: 1.57.0
*
* Installation:
* Add the following line to your [[Special:MyPage/common.js]] on Wikidata (increment version value to bypass cache)
*
* Production loader snippet for your common.js:
* mw.loader.load('//www.wikidata.org/w/index.php?title=User:Danielyepezgarces/Gadget-cradle.js&action=raw&ctype=text/javascript&version=1.56.0');
*
* Enjoy editing Wikidata entities seamlessly with Cradle!
*/
(function() {
'use strict';
const CRADLE_VERSION = '1.56.0';
let debugMode = false;
try {
debugMode = new URLSearchParams(window.location.search).has('cradledebug');
} catch (e) {}
function logDebug(...args) {
if (debugMode) {
console.log(...args);
}
}
function logError(...args) {
if (debugMode) {
console.error(...args);
}
}
// Verify if we are on Wikidata or Test Wikidata
if (!mw.config.get('wgServer').includes('wikidata.org')) {
return;
}
mw.loader.load(mw.util.wikiScript('index') + '?title=User:Danielyepezgarces/Gadget-cradle-dev.css&action=raw&ctype=text/css&version=' + CRADLE_VERSION, 'text/css');
const P12861 = 'P12861'; // EntitySchema for this class
const P31 = 'P31'; // Instance of
const P279 = 'P279'; // Subclass of
const P106 = 'P106'; // Occupation
// Built-in fallback registry for standard Wikibase property datatypes
const KNOWN_COORDINATE_PROPERTIES = ['P625', 'P133', 'P159', 'P276', 'P6766'];
const KNOWN_MONOLINGUAL_PROPERTIES = ['P1705', 'P1448', 'P1476', 'P1559', 'P1813', 'P1814', 'P2093', 'P2704', 'P5061', 'P6333', 'P898'];
let pageName = mw.config.get('wgPageName');
let isSpecialCradle = (pageName === 'Special:Cradle' || pageName === 'Special:BlankPage/Cradle');
// Inject early hide CSS rules to prevent any default content from flashing before script loads
if (isSpecialCradle) {
let style = document.createElement('style');
style.id = 'cradle-early-hide-style';
style.innerHTML = '#mw-content-text > *:not(.cradle-fullpage-container) { display: none !important; } #firstHeading { visibility: hidden !important; }';
document.head.appendChild(style);
}
let isItemPage = (mw.config.get('wgNamespaceNumber') === 0 && mw.config.get('wbEntityId'));
let entityId = isItemPage ? mw.config.get('wbEntityId') : null;
// State
let entityData = null;
let entityDataPromise = null;
let detectedSchemas = [];
let cradleTemplates = {};
let activeSchema = null;
let activeTemplate = null;
let activeMode = isItemPage ? 'edit' : 'create'; // 'edit' or 'create'
let schemaProperties = {};
let propertyMetadata = {};
let propertyConstraints = {};
let customSchemas = {};
let sortedPropertiesMap = {};
let sortedPropertiesLoaded = false;
/**
* Fetches MediaWiki:Wikibase-SortedProperties from Wikidata to order statements canonically.
*/
function fetchSortedProperties(callback) {
if (sortedPropertiesLoaded) {
if (callback) callback();
return;
}
let api = new mw.Api();
api.get({
action: 'query',
prop: 'revisions',
titles: 'MediaWiki:Wikibase-SortedProperties',
rvslots: 'main',
rvprop: 'content',
format: 'json'
}).done(function(res) {
if (res && res.query && res.query.pages) {
let pages = res.query.pages;
let pageId = Object.keys(pages)[0];
if (pageId && pages[pageId].revisions && pages[pageId].revisions[0]) {
let content = pages[pageId].revisions[0].slots.main['*'];
let matches = content.match(/P\d+/g) || [];
let idx = 0;
matches.forEach(pid => {
if (!(pid in sortedPropertiesMap)) {
sortedPropertiesMap[pid] = idx++;
}
});
sortedPropertiesLoaded = true;
logDebug('[Cradle] Loaded ' + idx + ' sorted properties from MediaWiki:Wikibase-SortedProperties');
}
}
if (callback) callback();
}).fail(function() {
if (callback) callback();
});
}
/**
* Ensures MediaWiki:Wikibase-SortedProperties is loaded before executing callback.
*/
function ensureSortedProperties(callback) {
if (sortedPropertiesLoaded) {
if (callback) callback();
} else {
fetchSortedProperties(callback);
}
}
/**
* Fetches missing property frequency recommendations from Recoin API (relative completeness indicator).
*/
/**
* Fetches property frequency statistics for an entity class from Recoin API (getbyclassid.php).
*/
function fetchRecoinData(classQID, callback) {
let cleanQID = (classQID || '').trim().toUpperCase();
if (!cleanQID || !/^Q\d+$/i.test(cleanQID)) {
callback(null);
return;
}
let userLang = mw.config.get('wgUserLanguage') || 'en';
let url = 'https://recoin.toolforge.org/getbyclassid.php?lang=' + userLang + '&subject=' + cleanQID;
$.ajax({
url: url,
dataType: 'jsonp',
timeout: 5000
}).done(function(res) {
if (res && res.Frequenct_properties && Array.isArray(res.Frequenct_properties)) {
callback(res);
} else {
callback(null);
}
}).fail(function() {
callback(null);
});
}
/**
* Safely parses EntitySchema ID string (e.g. 'E524') from a datavalue object.
*/
function parseEntitySchemaID(datavalueObj) {
if (!datavalueObj) return null;
let val = datavalueObj.value;
if (!val) return null;
if (typeof val === 'string') return val;
if (typeof val === 'object' && val.id) return val.id;
return null;
}
/**
* Sorts an array of Property IDs according to MediaWiki:Wikibase-SortedProperties canonical order.
*/
function sortPropertyIDs(propIds) {
if (!propIds || !Array.isArray(propIds)) return [];
return propIds.slice().sort((a, b) => {
let idxA = (a in sortedPropertiesMap) ? sortedPropertiesMap[a] : 999999;
let idxB = (b in sortedPropertiesMap) ? sortedPropertiesMap[b] : 999999;
if (idxA !== idxB) {
return idxA - idxB;
}
let numA = parseInt(a.replace('P', ''), 10) || 0;
let numB = parseInt(b.replace('P', ''), 10) || 0;
return numA - numB;
});
}
let softselectLabels = {};
let formState = {}; // propertyId -> Array of { id, guid, value, datatype, isDeleted }
let userWantsToChangeSchema = false;
let schemasLoadedPromise = null;
// SVG Icons
const ICONS = {
cradle: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/></svg>`,
close: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="m4.34 2.93 12.73 12.73-1.41 1.41L2.93 4.34z"/><path d="M17.07 4.34 4.34 17.07l-1.41-1.41L15.66 2.93z"/></svg>`,
plus: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M11 9V4H9v5H4v2h5v5h2v-5h5V9z"/></svg>`,
trash: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M17 2h-3.5l-1-1h-5l-1 1H3v2h14zm-12 4v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6zm3 11H6V8h2zm3 0H9V8h2zm3 0h-2V8h2z"/></svg>`,
undo: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M17.8 8A7.8 7.8 0 0 1 10 15.8c-1.3 0-2.5-.3-3.6-.9l1.5-1.5c.7.4 1.4.6 2.1.6a5.8 5.8 0 1 0 0-11.6c-.9 0-1.7.2-2.5.6H10V5H4v6h6V9H6.9c.8-.9 1.9-1.4 3.1-1.4A7.8 7.8 0 0 1 17.8 8"/></svg>`,
back: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M19 9H4.414l5.293-5.293-1.414-1.414L1.586 10l6.707 6.707 1.414-1.414L4.414 11H19z"/></svg>`,
check: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="m8.16 13.9 7.4-8.15 1.5 1.35-8.9 9.8L3.25 12l1.4-1.4z"/></svg>`,
alert: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M11.53 2.3A1.85 1.85 0 0 0 10 1.25 1.85 1.85 0 0 0 8.47 2.3L1.31 14.73A1.82 1.82 0 0 0 1.3 16.5a1.76 1.76 0 0 0 1.54.85h14.32a1.76 1.76 0 0 0 1.54-.85 1.82 1.82 0 0 0 0-1.77ZM11 15H9v-2h2Zm0-4H9V6h2z"/></svg>`,
info: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M10 0a10 10 0 1 0 10 10A10 10 0 0 0 10 0m1 15H9v-6h2Zm0-8H9V5h2z"/></svg>`,
download: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M17 12v5H3v-5H1v5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5z"/><path d="M10 15l5-6h-3V1H8v8H5z"/></svg>`,
external: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg>`,
edit: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M16.77 8l1.94-2a1 1 0 0 0 0-1.41l-3.34-3.3a1 1 0 0 0-1.41 0L12 3.23zM1 14.25V19h4.75l9.96-9.96-4.75-4.75z"/></svg>`,
code: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="m5 13-4-3 4-3 1.4 1.4-2.1 1.6 2.1 1.6zm10 0-1.4-1.4 2.1-1.6-2.1-1.6L15 7l4 3zm-6.8 3.5-2.4-.6 6-12 2.4.6z"/></svg>`,
feedback: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M18 10c0-4.42-3.58-8-8-8s-8 3.58-8 8c0 2.03.76 3.87 2 5.28V19l3.53-1.77C8.41 17.72 9.19 18 10 18c4.42 0 8-3.58 8-8zm-8 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm1-4H9V6h2v4z"/></svg>`,
mapPin: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 20 20"><path d="M10 2a6 6 0 0 0-6 6c0 4.5 6 10 6 10s6-5.5 6-10a6 6 0 0 0-6-6zm0 8.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>`
};
/**
* Initializes the gadget and loads i18n messages dynamically from a subpage.
*/
function init() {
let userLang = mw.config.get('wgUserLanguage') || 'en';
// Local fallback messages to ensure script functionality even if network request fails
const fallbackMessages = {
'cradle-add-language': 'Add another language',
'cradle-add-prop-btn': 'Add',
'cradle-add-property': 'Add property',
'cradle-add-qualifier': 'Add qualifier',
'cradle-add-ref-property': 'Add property to reference',
'cradle-add-reference': 'Add reference',
'cradle-add-value': 'Add value',
'cradle-auto-cite': 'Auto-fill via Citoid',
'cradle-back': 'Back',
'cradle-base-schema-label': 'Base schema / derivation (IMPORT)',
'cradle-base-schema-notice': 'Existing base schema detected ($1). You can create a specialized derivation (e.g. Firefighter derived from Human).',
'cradle-base-schema-placeholder': 'e.g. E10 (Human) or E519',
'cradle-btn-delete': 'Delete',
'cradle-btn-edit': 'Edit',
'cradle-btn-edit-with-cradle': 'Edit with Cradle',
'cradle-btn-load': 'Load',
'cradle-cancel': 'Cancel',
'cradle-cardinality-1': '1 (Required, single)',
'cradle-cardinality-label': 'Cardinality:',
'cradle-cardinality-opt-multi': '0..* / * (Optional, multiple)',
'cradle-cardinality-opt-single': '0..1 / ? (Optional, single)',
'cradle-cardinality-req-multi': '1..* / + (Required, multiple)',
'cradle-change-form': 'Change schema',
'cradle-change-schema': 'Change schema',
'cradle-citoid-loading': 'Fetching metadata (Citoid)...',
'cradle-citoid-success': 'Metadata loaded!',
'cradle-confirm-proceed': 'Do you want to proceed anyway?',
'cradle-constraint-citation': 'Statements should have at least one reference.',
'cradle-constraint-distinct': 'Distinct values constraint.',
'cradle-constraint-format': 'Format constraint',
'cradle-constraint-inverse': 'Inverse property constraint.',
'cradle-constraint-mandatory': 'Mandatory value constraint: A value for this property should be provided.',
'cradle-constraint-mandatory-alert': 'Property $1 ($2) has a Wikidata mandatory value constraint.',
'cradle-constraint-single': 'Single value constraint: Only one value is allowed for this property.',
'cradle-constraint-type': 'Type constraint: Ensure value matches the required entity type.',
'cradle-constraints-title': 'Wikidata constraints ($1)',
'cradle-coord-lat-placeholder': 'e.g. 8.76 or 8°45\'36"N',
'cradle-coord-lon-placeholder': 'e.g. -75.88 or 75°53\'8"W',
'cradle-coord-placeholder': 'e.g. 8°45\'36"N, 75°53\'8"W or 8.76, -75.88',
'cradle-coord-precision': 'Precision: $1',
'cradle-copy-shex': 'Copy ShEx',
'cradle-create-custom-schema-desc': 'Search for an existing EntitySchema (e.g. E10, Human) to load its claims and create a new item.',
'cradle-create-entityschema-btn': 'Publish EntitySchema on Wikidata',
'cradle-create-item': 'Create item',
'cradle-create-schema': 'Design new schema',
'cradle-create-shex-designer': 'Design / Create new EntitySchema (ShEx)',
'cradle-create-success': 'Item $1 successfully created! Redirecting...',
'cradle-create-summary': 'New item created with [[Wikidata:Cradle-gadget|Cradle-gadget]] (Template: $1)',
'cradle-create-tab': 'Create new item',
'cradle-credits': 'Created by $1 & $2. Based on $3 by $4.',
'cradle-custom-schemas': 'My custom schemas (stored in user space)',
'cradle-default-edit-summary': 'Update EntitySchema via Cradle',
'cradle-default-val-placeholder': 'default QID/string',
'cradle-delete-schema-confirm': 'Are you sure you want to delete the schema "$1"?',
'cradle-designer-custom-desc': 'Design a new schema from scratch or by importing properties from an existing item to publish it as an EntitySchema (ShEx).',
'cradle-detected-schemas': 'Detected schemas for this item:',
'cradle-direct-api-disabled-notice': 'Direct API creation is currently disabled. Use Special:NewEntitySchema to create your schema.',
'cradle-edit-schema-desc': 'Search for an existing EntitySchema (e.g. E10, Human) to edit its statements or ShEx code.',
'cradle-edit-summary': 'Updated statements with [[Wikidata:Cradle-gadget|Cradle-gadget]] ([[EntitySchema:$1]])',
'cradle-edit-summary-label': 'Summary:',
'cradle-edit-summary-placeholder': 'Edit summary (e.g. Added statements)...',
'cradle-edit-tab': 'Edit item',
'cradle-editing-schema-title': 'Editing EntitySchema: $1',
'cradle-editor': 'Cradle Editor',
'cradle-editor-unsaved-warning': 'You have unsaved changes in this schema. Are you sure you want to leave?',
'cradle-enter-schema-title': 'Enter or select an EntitySchema to edit this item:',
'cradle-error-at-least-one-language': 'There must be at least one language.',
'cradle-export-shex': 'Export ShEx (EntitySchema)',
'cradle-feedback-btn': 'Feedback & bug reports',
'cradle-feedback-desc': 'Have a suggestion, improvement, or found a bug in Cradle? Your report will be published as a new discussion topic on Wikidata talk:Cradle-gadget.',
'cradle-feedback-error': 'Failed to post feedback: $1',
'cradle-feedback-include-diagnostics': 'Include diagnostic details (Cradle version, browser, skin, page)',
'cradle-feedback-message-label': 'Detailed description:',
'cradle-feedback-message-placeholder': 'Describe your feedback or how to reproduce the issue in detail...',
'cradle-feedback-message-required': 'Please enter a description or message.',
'cradle-feedback-open-talk-btn': 'Open talk page',
'cradle-feedback-subject-label': 'Subject:',
'cradle-feedback-subject-placeholder': 'Brief summary of your suggestion or bug...',
'cradle-feedback-subject-required': 'Please enter a subject.',
'cradle-feedback-submit-btn': 'Publish',
'cradle-feedback-submitting': 'Publishing to talk page...',
'cradle-feedback-success': 'Feedback successfully posted to Wikidata talk:Cradle-gadget!',
'cradle-feedback-summary': 'New feedback via Cradle gadget',
'cradle-feedback-title': 'Suggestions and bug reports',
'cradle-feedback-type-bug': 'Bug report',
'cradle-feedback-type-congratulations': 'Congratulations',
'cradle-feedback-type-label': 'Type:',
'cradle-feedback-type-question': 'Question / general comment',
'cradle-feedback-type-suggestion': 'Suggestion / feature request',
'cradle-fetching-wikidata-recoin': 'Querying Wikidata and Recoin API...',
'cradle-hardselect-label': 'Fixed options (Hardselect)',
'cradle-hardselect-placeholder': 'hardselect QIDs (comma-separated, e.g. Q5,Q6)',
'cradle-import-from-item': 'Import from item',
'cradle-importer-p106-available-badge': 'No previous schema',
'cradle-importer-p106-no-schema': 'No previous schema detected for this occupation (Ideal for new specialized schema).',
'cradle-importer-p106-schema-exists': 'Existing schema detected for this occupation ($1). Review existing schema to avoid duplicates.',
'cradle-importer-select-occupation': 'Select occupation:',
'cradle-importer-sort-alphabetical': 'Alphabetical (A → Z)',
'cradle-importer-sort-label': 'Sort properties:',
'cradle-importer-sort-pid': 'Property ID (P1 → P...)',
'cradle-importer-sort-recoin': 'Recoin frequency (highest first)',
'cradle-importer-target-mode-label': 'Schema target type:',
'cradle-importer-target-p106': 'Occupation specialization (P106)',
'cradle-importer-target-p31': 'General class (P31)',
'cradle-label-required': 'New item label is required!',
'cradle-link-p12861-checkbox': 'Link schema to associated class ($1) via P12861 upon creation',
'cradle-link-p12861-derivation-skip': 'P12861 will not be added to the target class because this schema is a derivation.',
'cradle-link-p12861-summary': 'Add EntitySchema $1 (P12861) via Cradle',
'cradle-load-and-edit-schema': 'Load schema for editing',
'cradle-load-item-btn': 'Load item',
'cradle-load-schema': 'Load schema',
'cradle-load-schema-error': 'Error loading schema',
'cradle-loading-item': 'Loading...',
'cradle-loading-schema': 'Loading schema $1...',
'cradle-loading-templates': 'Loading templates from Wikidata:Cradle...',
'cradle-login-required-schema': 'Log in to create custom schemas.',
'cradle-mandatory-error': 'Property $1 ($2) is mandatory!',
'cradle-method-predefined': 'Use a predefined Cradle form',
'cradle-method-schema': 'Use an EntitySchema ID (ShEx)',
'cradle-missing-optional-prop': 'Optional schema property',
'cradle-missing-required-prop': 'Required by schema (missing)',
'cradle-mode-code': 'Code mode (ShEx)',
'cradle-mode-visual': 'Visual mode (GUI)',
'cradle-monolingual-text-placeholder': 'Text in language...',
'cradle-native-schema-title': 'EntitySchema compliance',
'cradle-new-item-aliases': 'Aliases (pipe-separated |, e.g. Marie Curie | Curie, Marie)...',
'cradle-new-item-desc': 'Enter item description (e.g. Polish-French physicist)...',
'cradle-new-item-identity': 'New item identity',
'cradle-new-item-identity-desc': 'Provide the label and description for the new Wikidata item.',
'cradle-new-item-label': 'Enter item label (e.g. Marie Curie)...',
'cradle-no-changes': 'No changes detected!',
'cradle-no-custom-schemas': 'You have no custom schemas yet.',
'cradle-no-results': 'No schemas found.',
'cradle-open-created-schema': 'View EntitySchema ($1)',
'cradle-open-newentityschema': 'Go to Special:NewEntitySchema',
'cradle-or-enter-schema': 'Or enter another EntitySchema ID:',
'cradle-orgroup-label': 'Alternative group (OR):',
'cradle-preset-none': 'No predefined values',
'cradle-prop-invalid-id': 'Invalid property ID (e.g. P17)!',
'cradle-prop-placeholder': 'e.g. P17',
'cradle-prop-search-placeholder': 'Search property by name or PID (e.g. P17, country)',
'cradle-properties-list': 'Form properties list:',
'cradle-publish-shex-failed': 'Failed to publish EntitySchema: $1',
'cradle-publish-shex-success': 'EntitySchema $1 published successfully on Wikidata!',
'cradle-publishing-shex': 'Publishing EntitySchema to Wikidata...',
'cradle-qualifiers': 'Qualifiers',
'cradle-rank': 'Rank',
'cradle-rank-deprecated': 'Deprecated',
'cradle-rank-normal': 'Normal',
'cradle-rank-preferred': 'Preferred',
'cradle-ref-url-placeholder': 'Enter URL, DOI, ISBN or PMID...',
'cradle-references': 'References',
'cradle-remove-qualifier': 'Remove qualifier',
'cradle-remove-reference': 'Remove reference',
'cradle-required-checkbox': 'Required',
'cradle-save-changes': 'Save changes',
'cradle-save-error': 'Error saving item: $1',
'cradle-save-schema': 'Save schema',
'cradle-save-schema-failed': 'Failed to save schema: $1',
'cradle-save-schema-success': 'EntitySchema $1 updated successfully on Wikidata!',
'cradle-save-success': 'Claims successfully updated! Reloading...',
'cradle-saving-schema': 'Saving changes to EntitySchema...',
'cradle-schema-aliases-placeholder': 'Schema aliases (pipe-separated |, e.g. stadium | arena)...',
'cradle-schema-deleted': 'Schema deleted successfully.',
'cradle-schema-desc': 'Description',
'cradle-schema-desc-placeholder': 'Schema description (e.g. Schema for football stadiums)...',
'cradle-schema-designer': 'Cradle Schema Designer',
'cradle-schema-edit-loss-warning': 'Switching to Visual mode will update properties from the ShEx code. Proceed?',
'cradle-schema-exists-custom': 'A custom schema already exists for $1: "$2".',
'cradle-schema-exists-matched': 'An existing EntitySchema was found for $1: $2 ($3).',
'cradle-schema-exists-notice': 'Schema already exists',
'cradle-schema-exists-p12861': 'An EntitySchema is already linked to $1 ($2) via P12861: $3.',
'cradle-schema-form-not-found': 'Special:NewEntitySchema form was not found. Check your account permissions.',
'cradle-schema-linked-p12861-failed': 'Could not link P12861 to $1: $2',
'cradle-schema-linked-p12861-notice': 'Property P12861 successfully added to $1',
'cradle-schema-linked-p12861-success': 'EntitySchema $1 linked to $2 via P12861!',
'cradle-schema-load-form-failed': 'Could not load Special:NewEntitySchema.',
'cradle-schema-not-found': 'Could not find the schema on the page!',
'cradle-schema-placeholder': 'Search EntitySchema by name or ID (e.g. E10, Human)...',
'cradle-schema-prop-required': 'You must add at least one property to the schema!',
'cradle-schema-saved': 'Schema saved successfully.',
'cradle-schema-search-placeholder': 'Search EntitySchema by name or ID (e.g. E10, Human)...',
'cradle-schema-target-item-label': 'Associated class/item',
'cradle-schema-target-item-placeholder': 'e.g. Q483110 (Stadium) or Q5 (Human)',
'cradle-schema-title': 'Schema title',
'cradle-schema-title-required': 'Schema title is required!',
'cradle-search-btn': 'Search',
'cradle-search-community': 'Search community schemas',
'cradle-search-placeholder': 'Search item...',
'cradle-search-placeholder-community': 'Search user schemas...',
'cradle-search-results': 'Search Results:',
'cradle-search-value-placeholder': 'Search QID to add...',
'cradle-searching': 'Searching...',
'cradle-select-all': 'Select all',
'cradle-select-p31-class': 'Select associated class (P31) for this schema:',
'cradle-select-predefined': '-- Select a predefined form --',
'cradle-select-props-to-import': 'Select properties to import:',
'cradle-set-as-base-schema-btn': 'Set $1 as base schema for derivation',
'cradle-shex-copied-auto': 'All ShEx code selected and copied to clipboard!',
'cradle-shex-invalid': 'Invalid ShEx syntax:',
'cradle-shex-preview': 'Generated ShEx (EntitySchema)',
'cradle-shex-syntax-invalid': 'Invalid ShEx syntax: $1',
'cradle-shex-syntax-valid': 'Valid ShEx syntax',
'cradle-shex-valid': 'Valid ShEx syntax for Wikidata',
'cradle-sidebar-create-schema': 'Create a new schema',
'cradle-sidebar-edit-schema': 'Edit a schema',
'cradle-sidebar-feedback': 'Feedback & bug reports',
'cradle-sidebar-header': 'Schemas',
'cradle-sidebar-random-schema': 'Random schema',
'cradle-sidebar-recent-schemas': 'Recent changes',
'cradle-softselect-label': 'Free suggestions (Softselect)',
'cradle-softselect-placeholder': 'softselect QIDs (comma-separated, e.g. Q5,Q6)',
'cradle-special-title': 'Cradle - Wikidata Schema Editor',
'cradle-subshape-classes-hint': 'Allowed classes (wdt:P31) for internal sub-schema:',
'cradle-subshape-external-id-label': 'External EntitySchema ID:',
'cradle-subshape-external-id-placeholder': 'e.g. E10 or E10#country',
'cradle-subshape-mode-external': 'External EntitySchema (IMPORT E...)',
'cradle-subshape-mode-internal': 'Internal in this schema (@<SubShape>)',
'cradle-subshape-mode-label': 'Sub-schema source:',
'cradle-subshape-name-label': 'Sub-schema name:',
'cradle-subshape-name-placeholder': 'Sub-schema name (e.g. country or ConservationStatus)',
'cradle-subtitle': 'Modify entity claims using schemas',
'cradle-summary-create-update-schema': 'Created/Updated Cradle schema: $1',
'cradle-tab-create-item': 'Create items',
'cradle-tab-design-schema': 'Design schemas',
'cradle-tab-edit-schema': 'Edit schemas',
'cradle-tab-edit-schema-badge': 'Experimental',
'cradle-tab-predefined': 'Predefined form',
'cradle-tab-shex': 'EntitySchema (ShEx)',
'cradle-use-base-schema-checkbox': 'Set $1 as base schema for this derivation',
'cradle-user-menu-btn': 'Create new item with Cradle',
'cradle-val-err-coords': 'Invalid coordinates (-90 to 90 lat, -180 to 180 lon)',
'cradle-val-err-max': 'At most $1 {{PLURAL:$1|value|values}} allowed',
'cradle-val-err-min': 'Needs at least $1 {{PLURAL:$1|value|values}}',
'cradle-val-err-num': 'Invalid number: $1',
'cradle-val-err-qid': 'Invalid QID: $1',
'cradle-val-missing': 'Missing!',
'cradle-val-optional-missing': 'Optional (Not set)',
'cradle-val-optional-present': 'Optional (Present)',
'cradle-val-present': 'Present',
'cradle-validate-shex-btn': 'Validate syntax',
'cradle-validation-error': 'Please fix the following validation errors:\n\n',
'cradle-validation-summary': 'Validation result for $1: $2 of $3 required {{PLURAL:$3|property|properties}} and $4 of $5 optional {{PLURAL:$5|property|properties}} present.',
'cradle-validation-tab': 'Validation',
'cradle-validation-title': 'Schema validation status',
'cradle-valtype-datetime': 'Date / time (xsd:dateTime)',
'cradle-valtype-decimal': 'Number / quantity (xsd:decimal)',
'cradle-valtype-geo': 'Coordinates (geo:wktLiteral)',
'cradle-valtype-label': 'Value type:',
'cradle-valtype-langstring': 'Monolingual text (rdf:langString)',
'cradle-valtype-qid': 'Wikidata item (QID)',
'cradle-valtype-string': 'Free text (xsd:string)',
'cradle-valtype-subshape': 'Sub-schema (@<SubShape>)',
'cradle-view-on-map': 'View on map'
};
// Load local English fallbacks first
mw.messages.set(fallbackMessages);
function loadCleanMessages(langMap) {
if (!langMap || typeof langMap !== 'object') return;
let clean = {};
for (let k in langMap) {
if (k !== '@metadata') clean[k] = langMap[k];
}
mw.messages.set(clean);
}
// English users need 0 network requests (embedded fallbackMessages are already loaded)
if (userLang === 'en') {
proceedInit();
return;
}
let baseLang = (userLang && userLang.includes('-')) ? userLang.split('-')[0] : null;
function fetchFallbackCatalog() {
let unifiedUrl = mw.util.wikiScript('index') + '?title=User:Danielyepezgarces/Gadget-cradle/i18n.json&action=raw&ctype=application/json';
$.getJSON(unifiedUrl).then(function(catalog) {
if (catalog) {
if (catalog[userLang]) loadCleanMessages(catalog[userLang]);
else if (baseLang && catalog[baseLang]) loadCleanMessages(catalog[baseLang]);
}
proceedInit();
}).catch(function(err) {
console.warn("[Cradle] Could not load i18n catalog, using local fallbacks:", err);
applyLocalSpanishFallback();
});
}
// Optimized on-demand i18n loader: fetch ONLY user's language subpage (~15 KB instead of full catalog)
let subpageUrl = mw.util.wikiScript('index') + '?title=User:Danielyepezgarces/Gadget-cradle/i18n/' + encodeURIComponent(userLang) + '.json&action=raw&ctype=application/json';
$.getJSON(subpageUrl).then(function(langData) {
if (langData) {
loadCleanMessages(langData);
}
proceedInit();
}).catch(function() {
if (baseLang) {
let baseUrl = mw.util.wikiScript('index') + '?title=User:Danielyepezgarces/Gadget-cradle/i18n/' + encodeURIComponent(baseLang) + '.json&action=raw&ctype=application/json';
$.getJSON(baseUrl).then(function(baseData) {
if (baseData) {
loadCleanMessages(baseData);
}
proceedInit();
}).catch(function() {
fetchFallbackCatalog();
});
} else {
fetchFallbackCatalog();
}
});
// Fallback for Spanish interface users
function applyLocalSpanishFallback() {
if (userLang === 'es' || baseLang === 'es') {
mw.messages.set({
'cradle-add-language': 'Añadir otro idioma',
'cradle-add-prop-btn': 'Añadir',
'cradle-add-property': 'Añadir propiedad',
'cradle-add-qualifier': 'Añadir cualificador',
'cradle-add-ref-property': 'Añadir propiedad a referencia',
'cradle-add-reference': 'Añadir referencia',
'cradle-add-value': 'Añadir valor',
'cradle-auto-cite': 'Autocompletar vía Citoid',
'cradle-back': 'Volver',
'cradle-base-schema-label': 'Esquema base / Derivación (IMPORT)',
'cradle-base-schema-notice': 'Esquema base existente detectado ($1). Puedes crear una derivación especializada (ej. Bombero derivado de Humano).',
'cradle-base-schema-placeholder': 'ej. E10 (Humano) o E519',
'cradle-btn-delete': 'Eliminar',
'cradle-btn-edit': 'Editar',
'cradle-btn-edit-with-cradle': 'Editar con Cradle',
'cradle-btn-load': 'Cargar',
'cradle-cancel': 'Cancelar',
'cradle-cardinality-1': '1 (Obligatorio, único)',
'cradle-cardinality-label': 'Cardinalidad:',
'cradle-cardinality-opt-multi': '0..* / * (Opcional, múltiple)',
'cradle-cardinality-opt-single': '0..1 / ? (Opcional, único)',
'cradle-cardinality-req-multi': '1..* / + (Obligatorio, múltiple)',
'cradle-change-form': 'Cambiar esquema',
'cradle-change-schema': 'Cambiar esquema',
'cradle-citoid-loading': 'Obteniendo metadatos (Citoid)...',
'cradle-citoid-success': '¡Metadatos cargados!',
'cradle-confirm-proceed': '¿Deseas continuar de todos modos?',
'cradle-constraint-citation': 'Las declaraciones deben tener al menos una referencia.',
'cradle-constraint-distinct': 'Restricción de valores distintos.',
'cradle-constraint-format': 'Restricción de formato',
'cradle-constraint-inverse': 'Restricción de propiedad inversa.',
'cradle-constraint-mandatory': 'Restricción de valor obligatorio: Se debe proporcionar un valor para esta propiedad.',
'cradle-constraint-mandatory-alert': 'La propiedad $1 ($2) tiene una restricción de valor obligatorio en Wikidata.',
'cradle-constraint-single': 'Restricción de valor único: Solo se permite un único valor para esta propiedad.',
'cradle-constraint-type': 'Restricción de tipo de entidad: Verifique que el valor sea del tipo de entidad requerido.',
'cradle-constraints-title': 'Restricciones de Wikidata ($1)',
'cradle-coord-lat-placeholder': 'ej. 8.76 u 8°45\'36"N',
'cradle-coord-lon-placeholder': 'ej. -75.88 o 75°53\'8"W',
'cradle-coord-placeholder': 'ej. 8°45\'36"N, 75°53\'8"W u 8.76, -75.88',
'cradle-coord-precision': 'Precisión: $1',
'cradle-copy-shex': 'Copiar ShEx',
'cradle-create-custom-schema-desc': 'Busca un EntitySchema existente (ej. E10, Humano) para cargar sus declaraciones y crear un nuevo elemento.',
'cradle-create-entityschema-btn': 'Publicar EntitySchema en Wikidata',
'cradle-create-item': 'Crear elemento',
'cradle-create-schema': 'Diseñar nuevo esquema',
'cradle-create-shex-designer': 'Diseñar / Crear nuevo EntitySchema (ShEx)',
'cradle-create-success': '¡Elemento $1 creado con éxito! Redirigiendo...',
'cradle-create-summary': 'Nuevo elemento creado con [[Wikidata:Cradle-gadget|Cradle-gadget]] (Plantilla: $1)',
'cradle-create-tab': 'Crear nuevo',
'cradle-credits': 'Creado por $1 y $2. Basado en $3 de $4.',
'cradle-custom-schemas': 'Mis esquemas personalizados',
'cradle-default-edit-summary': 'Actualización de EntitySchema vía Cradle',
'cradle-default-val-placeholder': 'valor/QID por defecto',
'cradle-delete-schema-confirm': '¿Estás seguro de que deseas eliminar el esquema "$1"?',
'cradle-designer-custom-desc': 'Diseña un nuevo esquema desde cero o importando propiedades de un elemento existente para publicarlo en Wikidata como un EntitySchema (ShEx).',
'cradle-detected-schemas': 'Esquemas detectados para este elemento:',
'cradle-direct-api-disabled-notice': 'La publicación directa por API está deshabilitada temporalmente. Usa Special:NewEntitySchema para crear tu esquema.',
'cradle-edit-schema-desc': 'Busca un EntitySchema existente (ej. E10, Humano) para editar sus declaraciones o código ShEx.',
'cradle-edit-summary': 'Declaraciones actualizadas con [[Wikidata:Cradle-gadget|Cradle-gadget]] ([[EntitySchema:$1]])',
'cradle-edit-summary-label': 'Resumen:',
'cradle-edit-summary-placeholder': 'Resumen de edición (ej. Declaraciones añadidas)...',
'cradle-edit-tab': 'Editar elemento',
'cradle-editing-schema-title': 'Editando EntitySchema: $1',
'cradle-editor': 'Editor Cradle',
'cradle-editor-unsaved-warning': 'Tienes cambios no guardados en este esquema. ¿Seguro que deseas salir?',
'cradle-enter-schema-title': 'Introduce o selecciona un EntitySchema para editar este elemento:',
'cradle-error-at-least-one-language': 'Debe haber al menos un idioma.',
'cradle-export-shex': 'Exportar ShEx (EntitySchema)',
'cradle-feedback-btn': 'Sugerencias y reporte de errores',
'cradle-feedback-desc': '¿Tienes una sugerencia, mejora o encontraste un error en Cradle? Tu mensaje se publicará como un nuevo tema de discusión en Wikidata talk:Cradle-gadget.',
'cradle-feedback-error': 'Error al publicar en la página de discusión: $1',
'cradle-feedback-include-diagnostics': 'Incluir información técnica de diagnóstico (versión de Cradle, navegador, apariencia, página)',
'cradle-feedback-message-label': 'Descripción detallada:',
'cradle-feedback-message-placeholder': 'Describe tu sugerencia detalladamente o los pasos para reproducir el error...',
'cradle-feedback-message-required': 'Por favor, introduce una descripción o mensaje.',
'cradle-feedback-open-talk-btn': 'Abrir página de discusión',
'cradle-feedback-subject-label': 'Asunto:',
'cradle-feedback-subject-placeholder': 'Resumen breve de tu sugerencia o error...',
'cradle-feedback-subject-required': 'Por favor, introduce un asunto.',
'cradle-feedback-submit-btn': 'Publicar',
'cradle-feedback-submitting': 'Publicando en la página de discusión...',
'cradle-feedback-success': '¡Mensaje publicado con éxito en Wikidata talk:Cradle-gadget!',
'cradle-feedback-summary': 'Nuevo mensaje vía Cradle gadget',
'cradle-feedback-title': 'Sugerencias y reporte de errores',
'cradle-feedback-type-bug': 'Reporte de error (Bug)',
'cradle-feedback-type-congratulations': 'Felicitaciones',
'cradle-feedback-type-label': 'Tipo:',
'cradle-feedback-type-question': 'Pregunta / Comentario general',
'cradle-feedback-type-suggestion': 'Sugerencia / Nueva función',
'cradle-fetching-wikidata-recoin': 'Consultando Wikidata y Recoin API...',
'cradle-hardselect-label': 'Opciones fijas (Hardselect)',
'cradle-hardselect-placeholder': 'QIDs predefinidos (separados por coma, ej. Q5,Q6)',
'cradle-import-from-item': 'Importar desde elemento',
'cradle-importer-p106-available-badge': 'Sin esquema previo',
'cradle-importer-p106-no-schema': 'Sin esquema previo para esta ocupación (Ideal para crear un nuevo esquema derivado).',
'cradle-importer-p106-schema-exists': 'Se detectó un esquema existente para esta ocupación ($1). Revisa el esquema existente para evitar duplicados.',
'cradle-importer-select-occupation': 'Selecciona la ocupación:',
'cradle-importer-sort-alphabetical': 'Alfabético (A → Z)',
'cradle-importer-sort-label': 'Ordenar propiedades:',
'cradle-importer-sort-pid': 'Identificador (P1 → P...)',
'cradle-importer-sort-recoin': 'Frecuencia Recoin (mayor a menor)',
'cradle-importer-target-mode-label': 'Tipo de objetivo para el esquema:',
'cradle-importer-target-p106': 'Especialización por ocupación (P106)',
'cradle-importer-target-p31': 'Clase general (P31)',
'cradle-label-required': '¡La etiqueta del nuevo elemento es obligatoria!',
'cradle-link-p12861-checkbox': 'Vincular esquema a la clase asociada ($1) mediante P12861 al publicar',
'cradle-link-p12861-derivation-skip': 'No se añadirá P12861 a la clase asociada porque este esquema es una derivación.',
'cradle-link-p12861-summary': 'Añadir EntitySchema $1 (P12861) mediante Cradle',
'cradle-load-and-edit-schema': 'Cargar esquema para editar',
'cradle-load-item-btn': 'Cargar elemento',
'cradle-load-schema': 'Cargar esquema',
'cradle-load-schema-error': 'Error al cargar o renderizar el esquema',
'cradle-loading-item': 'Cargando...',
'cradle-loading-schema': 'Cargando el esquema $1...',
'cradle-loading-templates': 'Cargando plantillas desde Wikidata:Cradle...',
'cradle-login-required-schema': 'Inicie sesión para crear esquemas personalizados.',
'cradle-mandatory-error': '¡La propiedad $1 ($2) es obligatoria!',
'cradle-method-predefined': 'Usar un formulario predefinido de Cradle',
'cradle-method-schema': 'Usar un ID de EntitySchema (ShEx)',
'cradle-missing-optional-prop': 'Propiedad opcional del esquema',
'cradle-missing-required-prop': 'Requerida por esquema (faltante)',
'cradle-mode-code': 'Modo código (ShEx)',
'cradle-mode-visual': 'Modo visual (GUI)',
'cradle-monolingual-text-placeholder': 'Texto en idioma...',
'cradle-native-schema-title': 'Cumplimiento de EntitySchema',
'cradle-new-item-aliases': 'Alias (separados por plecas |, ej. Marie Curie | Curie, Marie)...',
'cradle-new-item-desc': 'Introduce la descripción del elemento (ej. física polaca-francesa)...',
'cradle-new-item-identity': 'Identidad del nuevo elemento',
'cradle-new-item-identity-desc': 'Proporciona la etiqueta y descripción para el nuevo elemento de Wikidata.',
'cradle-new-item-label': 'Introduce la etiqueta del elemento (ej. Marie Curie)...',
'cradle-no-changes': '¡No se detectaron cambios!',
'cradle-no-custom-schemas': 'Aún no tienes esquemas personalizados creados.',
'cradle-no-results': 'No se encontraron esquemas.',
'cradle-open-created-schema': 'Ver EntitySchema ($1)',
'cradle-open-newentityschema': 'Ir a Special:NewEntitySchema',
'cradle-or-enter-schema': 'O introduce otro ID de EntitySchema:',
'cradle-orgroup-label': 'Grupo alternativo (OR):',
'cradle-preset-none': 'Sin valores predefinidos',
'cradle-prop-invalid-id': '¡ID de propiedad inválido (ej. P17)!',
'cradle-prop-placeholder': 'ej. P17',
'cradle-prop-search-placeholder': 'Buscar propiedad por nombre o PID (ej. P17, país)',
'cradle-properties-list': 'Lista de propiedades del formulario:',
'cradle-publish-shex-failed': 'Error al publicar EntitySchema: $1',
'cradle-publish-shex-success': '¡EntitySchema $1 publicado con éxito en Wikidata!',
'cradle-publishing-shex': 'Publicando EntitySchema en Wikidata...',
'cradle-qualifiers': 'Cualificadores',
'cradle-rank': 'Rango',
'cradle-rank-deprecated': 'En desuso',
'cradle-rank-normal': 'Normal',
'cradle-rank-preferred': 'Preferido',
'cradle-ref-url-placeholder': 'Ingresar URL, DOI, ISBN o PMID...',
'cradle-references': 'Referencias',
'cradle-remove-qualifier': 'Eliminar cualificador',
'cradle-remove-reference': 'Eliminar referencia',
'cradle-required-checkbox': 'Obligatorio',
'cradle-save-changes': 'Guardar cambios',
'cradle-save-error': 'Error al guardar el elemento: $1',
'cradle-save-schema': 'Guardar esquema',
'cradle-save-schema-failed': 'Error al guardar el esquema: $1',
'cradle-save-schema-success': '¡EntitySchema $1 actualizado con éxito en Wikidata!',
'cradle-save-success': '¡Declaraciones actualizadas con éxito! Recargando...',
'cradle-saving-schema': 'Guardando cambios en el EntitySchema...',
'cradle-schema-aliases-placeholder': 'Alias del esquema separados por plecas (ej. estadio | cancha)...',
'cradle-schema-deleted': 'Esquema eliminado correctamente.',
'cradle-schema-desc': 'Descripción',
'cradle-schema-desc-placeholder': 'Descripción del esquema (ej. Esquema para estadios de fútbol)...',
'cradle-schema-designer': 'Diseñador de esquemas de Cradle',
'cradle-schema-edit-loss-warning': 'Cambiar al modo visual actualizará las propiedades a partir del código ShEx. ¿Deseas continuar?',
'cradle-schema-exists-custom': 'Ya existe un esquema personalizado para $1: «$2».',
'cradle-schema-exists-matched': 'Se encontró un EntitySchema existente para $1: $2 ($3).',
'cradle-schema-exists-notice': 'El esquema ya existe',
'cradle-schema-exists-p12861': 'Ya hay un EntitySchema vinculado a $1 ($2) mediante P12861: $3.',
'cradle-schema-form-not-found': 'No se encontró el formulario de Special:NewEntitySchema. Comprueba los permisos de tu cuenta.',
'cradle-schema-linked-p12861-failed': 'No se pudo vincular P12861 a $1: $2',
'cradle-schema-linked-p12861-notice': 'Propiedad P12861 añadida exitosamente a $1',
'cradle-schema-linked-p12861-success': '¡EntitySchema $1 vinculado a $2 mediante P12861!',
'cradle-schema-load-form-failed': 'No se pudo cargar Special:NewEntitySchema.',
'cradle-schema-not-found': '¡No se pudo encontrar el esquema en la página!',
'cradle-schema-placeholder': 'Buscar EntitySchema por nombre o ID (ej. E10, Humano)...',
'cradle-schema-prop-required': '¡Debe añadir al menos una propiedad al esquema!',
'cradle-schema-saved': 'Esquema guardado correctamente.',
'cradle-schema-search-placeholder': 'Buscar EntitySchema por nombre o ID (ej. E10, Humano)...',
'cradle-schema-target-item-label': 'Elemento asociado',
'cradle-schema-target-item-placeholder': 'Ej: Q483110 (Estadio) o Q5 (Humano)',
'cradle-schema-title': 'Título del esquema',
'cradle-schema-title-required': '¡El título del esquema es requerido!',
'cradle-search-btn': 'Buscar',
'cradle-search-community': 'Buscar esquemas de otros usuarios',
'cradle-search-placeholder': 'Buscar elemento...',
'cradle-search-placeholder-community': 'Buscar esquemas de usuarios...',
'cradle-search-results': 'Resultados de búsqueda:',
'cradle-search-value-placeholder': 'Buscar QID de valor para añadir...',
'cradle-searching': 'Buscando...',
'cradle-select-all': 'Seleccionar todas',
'cradle-select-p31-class': 'Seleccione la clase asociada (P31) para este esquema:',
'cradle-select-predefined': '-- Selecciona un formulario predefinido --',
'cradle-select-props-to-import': 'Selecciona las propiedades a importar:',
'cradle-set-as-base-schema-btn': 'Establecer $1 como esquema base para derivación',
'cradle-shex-copied-auto': '¡Todo el código ShEx fue seleccionado y copiado al portapapeles!',
'cradle-shex-invalid': 'Sintaxis ShEx no válida:',
'cradle-shex-preview': 'Código ShEx generado (EntitySchema)',
'cradle-shex-syntax-invalid': 'Sintaxis ShEx inválida: $1',
'cradle-shex-syntax-valid': 'Sintaxis ShEx válida',
'cradle-shex-valid': 'Sintaxis ShEx válida para Wikidata',
'cradle-sidebar-create-schema': 'Crear un esquema nuevo',
'cradle-sidebar-edit-schema': 'Editar un esquema',
'cradle-sidebar-feedback': 'Sugerencias y errores',
'cradle-sidebar-header': 'Esquemas',
'cradle-sidebar-random-schema': 'Esquema aleatorio',
'cradle-sidebar-recent-schemas': 'Cambios recientes',
'cradle-softselect-label': 'Sugerencias libres (Softselect)',
'cradle-softselect-placeholder': 'sugerencias de QIDs (separados por coma, ej. Q5,Q6)',
'cradle-special-title': 'Cradle - Wikidata Schema Editor',
'cradle-subshape-classes-hint': 'Clases permitidas (wdt:P31) para el sub-esquema interno:',
'cradle-subshape-external-id-label': 'ID del EntitySchema externo:',
'cradle-subshape-external-id-placeholder': 'ej. E10 o E10#country',
'cradle-subshape-mode-external': 'EntitySchema externo (IMPORT E...)',
'cradle-subshape-mode-internal': 'Interno en este esquema (@<SubForma>)',
'cradle-subshape-mode-label': 'Origen del sub-esquema:',
'cradle-subshape-name-label': 'Nombre del sub-esquema:',
'cradle-subshape-name-placeholder': 'Nombre del sub-esquema (ej. country o EstadoConservacion)',
'cradle-subtitle': 'Modificar declaraciones utilizando esquemas',
'cradle-summary-create-update-schema': 'Creado/Actualizado esquema de Cradle: $1',
'cradle-tab-create-item': 'Crear elementos',
'cradle-tab-design-schema': 'Diseñar esquemas',
'cradle-tab-edit-schema': 'Editar esquemas',
'cradle-tab-edit-schema-badge': 'Experimental',
'cradle-tab-predefined': 'Formulario predefinido',
'cradle-tab-shex': 'EntitySchema (ShEx)',
'cradle-use-base-schema-checkbox': 'Establecer $1 como esquema base para esta derivación',
'cradle-user-menu-btn': 'Crear elemento nuevo con Cradle',
'cradle-val-err-coords': 'Coordenadas geográficas inválidas (-90 a 90 lat, -180 a 180 lon)',
'cradle-val-err-max': 'Se {{PLURAL:$1|permite como máximo $1 valor|permiten como máximo $1 valores}}',
'cradle-val-err-min': 'Requiere al menos $1 {{PLURAL:$1|valor|valores}}',
'cradle-val-err-num': 'Número no válido: $1',
'cradle-val-err-qid': 'QID no válido: $1',
'cradle-val-missing': '¡Falta!',
'cradle-val-optional-missing': 'Opcional (Sin establecer)',
'cradle-val-optional-present': 'Opcional (Presente)',
'cradle-val-present': 'Presente',
'cradle-validate-shex-btn': 'Validar sintaxis',
'cradle-validation-error': 'Por favor, corrige los siguientes errores de validación:\n\n',
'cradle-validation-summary': 'Resultado de la validación para $1: $2 de $3 {{PLURAL:$3|propiedad requerida|propiedades requeridas}} y $4 de $5 {{PLURAL:$5|propiedad opcional|propiedades opcionales}} presentes.',
'cradle-validation-tab': 'Validación',
'cradle-validation-title': 'Estado de validación de esquema',
'cradle-valtype-datetime': 'Fecha / Tiempo (xsd:dateTime)',
'cradle-valtype-decimal': 'Número / Medida (xsd:decimal)',
'cradle-valtype-geo': 'Coordenadas (geo:wktLiteral)',
'cradle-valtype-label': 'Tipo de valor:',
'cradle-valtype-langstring': 'Texto en idioma (rdf:langString)',
'cradle-valtype-qid': 'Elemento Wikidata (QID)',
'cradle-valtype-string': 'Texto libre (xsd:string)',
'cradle-valtype-subshape': 'Sub-esquema (@<SubForma>)',
'cradle-view-on-map': 'Ver en mapa'
});
}
proceedInit();
}
}
/**
* Completes script initialization.
*/
function proceedInit() {
fetchSortedProperties();
// Add Toolbox portlet link in the sidebar on all pages
let cradleTbLink = mw.util.addPortletLink(
'p-tb',
mw.util.getUrl('Special:Cradle') + '#create',
'Cradle',
't-cradle',
'Create items using Cradle templates or schemas'
);
if (cradleTbLink) {
$(cradleTbLink).find('a').addBack('a').on('click', function(e) {
mw.storage.set('cradle-active-tab', 'create');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'create';
renderCreateOptionsSelector();
}
});
}
// Add dedicated 'Esquemas' section to Wikidata sidebar
setupSidebarSchemasSection();
if (isSpecialCradle) {
setupSpecialPage();
} else if (isItemPage) {
createHeadingButton();
// Scan for schemas if on an item page (uses caching/on-demand loader)
schemasLoadedPromise = getEntityData().then(data => {
return findAssociatedSchemas(data);
}).then(schemas => {
detectedSchemas = schemas;
logDebug("[Cradle] Detected EntitySchemas:", detectedSchemas);
return schemas;
}).catch(err => {
logError("[Cradle] Error loading claims/schemas:", err);
return [];
});
}
}
/**
* Adds a dedicated "Esquemas" section to the Wikidata sidebar matching Wikibase Lexeme portlet structure.
*/
function setupSidebarSchemasSection() {
if ($('#p-cradle-schemas').length || $('#p-cradle-schemas-mobile').length) return;
let sectionHeader = mw.msg('cradle-sidebar-header') || 'Esquemas';
let createText = mw.msg('cradle-sidebar-create-schema') || 'Crear un esquema nuevo';
let editText = mw.msg('cradle-sidebar-edit-schema') || 'Editar un esquema';
let recentText = mw.msg('cradle-sidebar-recent-schemas') || 'Cambios recientes';
let randomText = mw.msg('cradle-sidebar-random-schema') || 'Esquema aleatorio';
let feedbackText = mw.msg('cradle-sidebar-feedback') || 'Sugerencias y errores';
let createUrl = mw.util.getUrl('Special:Cradle') + '#design';
let editUrl = mw.util.getUrl('Special:Cradle') + '#edit';
let recentUrl = mw.util.getUrl('Special:RecentChanges', { namespace: 640 });
let randomUrl = mw.util.getUrl('Special:Random/EntitySchema');
let feedbackUrl = mw.util.getUrl('Wikidata_talk:Cradle-gadget');
let currentSkin = mw.config.get('skin') || '';
let isMinerva = currentSkin === 'minerva' || $('body').hasClass('skin-minerva') || $('#mw-mf-page-left').length > 0;
// ── 1. Minerva Neue (MobileFrontend) Support ──
if (isMinerva) {
let injectMinervaLinks = function() {
if ($('#p-cradle-schemas').length) return;
let $container = $('#mw-mf-page-left');
if (!$container.length) return;
let $cradleUl = $('<ul>')
.attr('id', 'p-cradle-schemas')
.addClass('toggle-list__list');
let createMobileItem = function(id, href, text, iconClass, targetTab) {
let $li = $('<li>').addClass('toggle-list-item').attr('id', id);
let $a = $('<a>').addClass('toggle-list-item__anchor')
.attr({
'href': href,
'data-mw-interface': '1'
});
let $icon = $('<span>').addClass('minerva-icon ' + iconClass);
let $label = $('<span>').addClass('toggle-list-item__label').text(text);
if (targetTab) {
$a.on('click', function(e) {
mw.storage.set('cradle-active-tab', targetTab);
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = targetTab;
// Smoothly close Minerva drawer
$('#main-menu-input').prop('checked', false);
renderCreateOptionsSelector();
}
});
}
$a.append($icon).append($label);
$li.append($a);
return $li;
};
let $mCradle = createMobileItem('n-cradle-home-m', mw.util.getUrl('Special:Cradle') + '#create', 'Cradle', 'minerva-icon--specialPages', 'create');
let $mCreate = createMobileItem('n-cradle-newschema-m', createUrl, createText, 'minerva-icon--articleRedirect', 'design');
let $mEdit = createMobileItem('n-cradle-editschema-m', editUrl, editText, 'minerva-icon--edit', 'edit');
let $mRecent = createMobileItem('n-cradle-recentchanges-schemas-m', recentUrl, recentText, 'minerva-icon--recentChanges', false);
let $mRandom = createMobileItem('n-cradle-randomschema-m', randomUrl, randomText, 'minerva-icon--die', false);
let $mFeedback = createMobileItem('n-cradle-feedback-m', feedbackUrl, feedbackText, 'minerva-icon--speechBubbles', false);
$mFeedback.find('a').on('click', function(e) {
e.preventDefault();
$('#main-menu-input').prop('checked', false);
openFeedbackModal();
});
$cradleUl.append($mCradle).append($mCreate).append($mEdit).append($mRecent).append($mRandom).append($mFeedback);
if ($('#p-interaction').length) {
$cradleUl.insertAfter('#p-interaction');
} else if ($('#p-navigation').length) {
$cradleUl.insertAfter('#p-navigation');
} else {
$container.children('ul').last().after($cradleUl);
}
};
injectMinervaLinks();
mw.hook('mobileFrontend.mainMenu').add(injectMinervaLinks);
return;
}
// ── 2. Desktop Skins via native MediaWiki mw.util.addPortlet API ──
let beforeSelector = '#p-wikibase-lexeme-lexicographical-data, #p-tb, #p-navigation, #p-interaction';
let portletAdded = false;
if (typeof mw.util.addPortlet === 'function') {
try {
let targetNext = $(beforeSelector).first()[0];
let p = mw.util.addPortlet('p-cradle-schemas', sectionHeader, targetNext);
if (p) {
portletAdded = true;
let $p = $(p);
$p.addClass('vector-menu');
$p.children('div, label, h3').first().addClass('vector-menu-heading').text(sectionHeader);
$p.children('div').last().addClass('vector-menu-content');
$p.find('ul').addClass('vector-menu-content-list');
let createLink = mw.util.addPortletLink('p-cradle-schemas', createUrl, createText, 'n-cradle-newschema');
if (createLink) {
$(createLink).find('a').addBack('a').on('click', function(e) {
mw.storage.set('cradle-active-tab', 'design');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'design';
renderCreateOptionsSelector();
}
});
}
let editLink = mw.util.addPortletLink('p-cradle-schemas', editUrl, editText, 'n-cradle-editschema');
if (editLink) {
$(editLink).find('a').addBack('a').on('click', function(e) {
mw.storage.set('cradle-active-tab', 'edit');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'edit';
renderCreateOptionsSelector();
}
});
}
mw.util.addPortletLink('p-cradle-schemas', recentUrl, recentText, 'n-cradle-recentchanges-schemas');
mw.util.addPortletLink('p-cradle-schemas', randomUrl, randomText, 'n-cradle-randomschema');
let feedbackLink = mw.util.addPortletLink('p-cradle-schemas', feedbackUrl, feedbackText, 'n-cradle-feedback');
if (feedbackLink) {
$(feedbackLink).find('a').addBack('a').on('click', function(e) {
e.preventDefault();
openFeedbackModal();
});
}
}
} catch (err) {
logDebug("[Cradle] mw.util.addPortlet error, fallback to manual DOM:", err);
}
}
// ── 3. Fallback: Manual DOM injection tailored for Monobook, Vector 2022, Timeless & Vector 2010 ──
if (!portletAdded) {
let isMonobook = currentSkin === 'monobook' || $('body').hasClass('skin-monobook') || $('#column-one').length > 0;
let $sidebar = isMonobook
? $('#column-one').first()
: $('#vector-main-menu, .vector-main-menu, #mw-panel, #mw-site-navigation, #p-navigation, .vector-main-menu-content, #mw-navigation').first();
if (!$sidebar.length) return;
let $portlet, $heading, $body, $ul;
if (isMonobook) {
// Monobook native structure: <div class="portlet"><h5>...</h5><div class="pBody"><ul>...
$portlet = $('<div>')
.addClass('portlet mw-portlet mw-portlet-cradle-schemas')
.attr({ 'id': 'p-cradle-schemas', 'role': 'navigation' });
$heading = $('<h5>')
.attr('id', 'p-cradle-schemas-label')
.text(sectionHeader);
$body = $('<div>').addClass('pBody mw-portlet-body');
$ul = $('<ul>');
} else if (currentSkin === 'vector-2022' || $('body').hasClass('skin-vector-2022') || $('.vector-main-menu').length > 0) {
// Vector 2022 native structure: <div class="vector-menu"><div class="vector-menu-heading">...</div><div class="vector-menu-content"><ul>...
$portlet = $('<div>')
.addClass('vector-menu mw-portlet mw-portlet-cradle-schemas')
.attr({
'id': 'p-cradle-schemas',
'role': 'navigation',
'aria-labelledby': 'p-cradle-schemas-label'
});
$heading = $('<div>')
.addClass('vector-menu-heading')
.attr('id', 'p-cradle-schemas-label')
.text(sectionHeader);
$body = $('<div>').addClass('vector-menu-content');
$ul = $('<ul>').addClass('vector-menu-content-list');
} else {
// Vector 2010 / Timeless native structure
$portlet = $('<nav>')
.addClass('vector-menu vector-menu-portal portal mw-portlet mw-portlet-cradle-schemas')
.attr({
'id': 'p-cradle-schemas',
'role': 'navigation',
'aria-labelledby': 'p-cradle-schemas-label'
});
$heading = $('<h3>')
.addClass('vector-menu-heading mw-portlet-heading')
.attr('id', 'p-cradle-schemas-label')
.append($('<span>').text(sectionHeader));
$body = $('<div>').addClass('vector-menu-content mw-portlet-body body');
$ul = $('<ul>').addClass('vector-menu-content-list');
}
let $liCreate = $('<li>').attr('id', 'n-cradle-newschema').addClass('mw-list-item')
.append($('<a>').attr('href', createUrl).append($('<span>').text(createText)).on('click', function(e) {
mw.storage.set('cradle-active-tab', 'design');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'design';
renderCreateOptionsSelector();
}
}));
let $liEdit = $('<li>').attr('id', 'n-cradle-editschema').addClass('mw-list-item')
.append($('<a>').attr('href', editUrl).append($('<span>').text(editText)).on('click', function(e) {
mw.storage.set('cradle-active-tab', 'edit');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'edit';
renderCreateOptionsSelector();
}
}));
let $liRecent = $('<li>').attr('id', 'n-cradle-recentchanges-schemas').addClass('mw-list-item')
.append($('<a>').attr('href', recentUrl).append($('<span>').text(recentText)));
let $liRandom = $('<li>').attr('id', 'n-cradle-randomschema').addClass('mw-list-item')
.append($('<a>').attr('href', randomUrl).append($('<span>').text(randomText)));
let $liFeedback = $('<li>').attr('id', 'n-cradle-feedback').addClass('mw-list-item')
.append($('<a>').attr('href', feedbackUrl).append($('<span>').text(feedbackText)).on('click', function(e) {
e.preventDefault();
openFeedbackModal();
}));
$ul.append($liCreate).append($liEdit).append($liRecent).append($liRandom).append($liFeedback);
$body.append($ul);
$portlet.append($heading).append($body);
if ($('#p-wikibase-lexeme-lexicographical-data').length) {
$portlet.insertBefore('#p-wikibase-lexeme-lexicographical-data');
} else if ($('#p-tb').length) {
$portlet.insertBefore('#p-tb');
} else if ($('#p-navigation').length) {
$portlet.insertAfter('#p-navigation');
} else {
$sidebar.append($portlet);
}
}
}
/**
* Set up Special:Cradle full page view.
*/
function setupSpecialPage() {
activeMode = 'create';
// Update browser document title
let specialTitle = mw.msg('cradle-special-title') || 'Cradle - Wikidata Schema Editor';
document.title = specialTitle;
// Set main heading
let $heading = $('#firstHeading');
if ($heading.length) {
$heading.text(specialTitle);
}
// Empty default content area
let $contentArea = $('#mw-content-text');
if ($contentArea.length === 0) return;
$contentArea.empty();
// Add structural HTML container
let $container = $('<div>').addClass('cradle-fullpage-container');
let $navTabs = $('<div>').attr('id', 'cradle-nav-tabs');
let $content = $('<div>').attr('id', 'cradle-content-area');
let $footer = $('<div>').addClass('cradle-footer').attr('id', 'cradle-footer-area').css({
'margin-top': '20px',
'border-radius': '2px',
'border': '1px solid var(--border-color-base, #a2a9b1)'
});
$container.append($navTabs).append($content).append($footer);
$contentArea.append($container);
// Listen to URL hash changes on Special:Cradle to switch tabs seamlessly
$(window).on('hashchange', function() {
renderCreateOptionsSelector();
});
// Remove early hiding styles so the newly rendered content and heading are displayed cleanly
let $earlyStyle = $('#cradle-early-hide-style');
if ($earlyStyle.length) {
$earlyStyle.remove();
}
renderCreateOptionsSelector();
}
/**
* Creates the "Editar con Cradle" button inside the main heading.
*/
function createHeadingButton() {
let $heading = $('#firstHeading');
if (!$heading.length) return;
// Prevent adding duplicate buttons
if ($('#cradle-heading-edit-btn').length) return;
let $editBtn = $('<button>')
.attr('id', 'cradle-heading-edit-btn')
.addClass('cradle-edit-heading-btn')
.text(mw.msg('cradle-btn-edit-with-cradle'))
.on('click', openEditor);
// Adjust margin-right dynamically if mw-indicators is present and populated
let $indicators = $('.mw-indicators');
if ($indicators.length && $indicators.children().length > 0) {
let indicatorsWidth = $indicators.outerWidth() || 0;
if (indicatorsWidth > 0) {
$editBtn.css('margin-right', (indicatorsWidth + 16) + 'px');
} else {
// Fallback margin if width not yet computed
$editBtn.css('margin-right', '48px');
}
}
$heading.append($editBtn);
}
/**
* Fetch the entity data from Wikidata Action API.
*/
function loadEntityData(id) {
return new Promise((resolve, reject) => {
let api = new mw.Api();
api.get({
action: 'wbgetentities',
ids: id,
format: 'json'
}).done(function(res) {
if (res && res.entities && res.entities[id]) {
resolve(res.entities[id]);
} else {
reject(new Error("Unable to load entity data"));
}
}).fail(function(err) {
reject(err);
});
});
}
/**
* Searches class properties (P12861) on P31, P279, and P106 claims of the entity.
*/
function findAssociatedSchemas(data) {
let schemas = [];
// Direct schema on this item
if (data.claims && data.claims[P12861]) {
data.claims[P12861].forEach(claim => {
let sId = parseEntitySchemaID(claim.mainsnak?.datavalue);
if (sId && !schemas.includes(sId)) {
schemas.push(sId);
}
});
}
// Check instance of (P31), subclass of (P279), and occupation (P106)
let classesToCheck = [];
[P31, P279, P106].forEach(prop => {
if (data.claims && data.claims[prop]) {
data.claims[prop].forEach(claim => {
if (claim.mainsnak && claim.mainsnak.datavalue && claim.mainsnak.datavalue.value) {
let classId = claim.mainsnak.datavalue.value.id;
if (classId && !classesToCheck.includes(classId)) {
classesToCheck.push(classId);
}
}
});
}
});
if (classesToCheck.length === 0) {
return Promise.resolve(schemas);
}
return new Promise((resolve) => {
let api = new mw.Api();
api.get({
action: 'wbgetentities',
ids: classesToCheck.join('|'),
props: 'claims',
format: 'json'
}).done(function(res) {
if (res && res.entities) {
Object.keys(res.entities).forEach(qid => {
let cls = res.entities[qid];
if (cls.claims && cls.claims[P12861]) {
cls.claims[P12861].forEach(claim => {
let schemaId = parseEntitySchemaID(claim.mainsnak?.datavalue);
if (schemaId && !schemas.includes(schemaId)) {
schemas.push(schemaId);
}
});
}
});
}
resolve(schemas);
}).fail(function(err) {
logError("[Cradle] findAssociatedSchemas request failed:", err);
resolve(schemas);
});
});
}
/**
* Opens the Sidebar Drawer editor.
*/
function openEditor() {
userWantsToChangeSchema = false;
if ($('.cradle-drawer').length === 0) {
createDrawerUI();
}
$('.cradle-drawer-overlay').addClass('open');
$('.cradle-drawer').addClass('open');
renderActiveView();
}
/**
* Closes the Sidebar Drawer editor.
*/
function closeEditor() {
$('.cradle-drawer').removeClass('open');
$('.cradle-drawer-overlay').removeClass('open');
// Reset state so that next open reloads clean data
schemaProperties = {};
propertyMetadata = {};
softselectLabels = {};
formState = {};
activeSchema = null;
activeTemplate = null;
}
/**
* Instantiates the Drawer HTML in the document body.
*/
function createDrawerUI() {
let $overlay = $('<div>').addClass('cradle-drawer-overlay');
let $drawer = $('<div>').addClass('cradle-drawer');
let $header = $('<div>').addClass('cradle-header');
let $titleArea = $('<div>').addClass('cradle-title-area');
$titleArea.append($('<h2>').addClass('cradle-title').text(mw.msg('cradle-editor')));
// Render tabs
let $tabs = $('<div>').addClass('cradle-tabs');
if (isItemPage) {
$tabs.append($('<div>').addClass('cradle-tab').attr('data-mode', 'edit').text(mw.msg('cradle-edit-tab')));
}
$tabs.append($('<div>').addClass('cradle-tab').attr('data-mode', 'create').text(mw.msg('cradle-create-tab')));
$titleArea.append($tabs);
let $closeBtn = $('<button>')
.addClass('cradle-close-btn')
.html(ICONS.close)
.on('click', closeEditor);
$header.append($titleArea).append($closeBtn);
let $navTabs = $('<div>').attr('id', 'cradle-nav-tabs');
let $content = $('<div>').addClass('cradle-content').attr('id', 'cradle-content-area');
let $footer = $('<div>').addClass('cradle-footer').attr('id', 'cradle-footer-area');
$drawer.append($header).append($navTabs).append($content).append($footer);
$overlay.on('click', closeEditor);
$drawer.on('click', function(e) { e.stopPropagation(); });
$('body').append($overlay).append($drawer);
// Bind tab events
$drawer.find('.cradle-tab').on('click', function() {
let mode = $(this).attr('data-mode');
if (mode === 'create') {
// Redirect directly to Special:Cradle#create instead of rendering inside drawer
location.href = mw.util.getUrl('Special:Cradle') + '#create';
return;
}
activeMode = mode;
$drawer.find('.cradle-tab').removeClass('active');
$(this).addClass('active');
renderActiveView();
});
// Set initial active tab
$drawer.find(`.cradle-tab[data-mode="${activeMode}"]`).addClass('active');
}
/**
* Renders either the Edit View or Create View based on activeMode.
*/
function renderActiveView() {
// If a schema or template is already active/loaded, just re-render the view
if (Object.keys(schemaProperties).length > 0) {
renderForm();
return;
}
activeSchema = null;
activeTemplate = null;
if (activeMode === 'edit') {
if (schemasLoadedPromise && !userWantsToChangeSchema) {
// Show loader spinner while waiting for class schemas scan to complete
let $content = $('#cradle-content-area').empty();
$content.append($('<div>').css({'text-align': 'center', 'margin-top': '40px'})
.append($('<div>').addClass('cradle-spinner').css({'border-top-color': 'var(--border-color-progressive, #36c)', 'width': '30px', 'height': '30px'}))
.append($('<p>').text('Checking associated schemas...'))
);
schemasLoadedPromise.then(schemas => {
if (schemas.length > 0 && !userWantsToChangeSchema) {
loadAndDisplaySchema(schemas[0]);
} else {
renderEditSchemaSelector();
}
});
} else {
renderEditSchemaSelector();
}
} else {
renderCreateOptionsSelector();
}
}
/**
* Render schema selector for Edit mode.
*/
function renderEditSchemaSelector() {
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
let $box = $('<div>').addClass('cradle-selector-box');
if (detectedSchemas.length > 0) {
$box.append($('<p>').css({'margin-top': '0', 'font-weight': 'bold'}).text(mw.msg('cradle-detected-schemas')));
let $btnGroup = $('<div>').css({'display': 'flex', 'flex-wrap': 'wrap', 'gap': '8px', 'margin-bottom': '16px'});
detectedSchemas.forEach(schemaId => {
let $btn = $('<button>')
.addClass('cradle-btn-secondary')
.css({'padding': '6px 12px'})
.text(schemaId)
.on('click', function() {
userWantsToChangeSchema = false;
loadAndDisplaySchema(schemaId);
});
$btnGroup.append($btn);
});
$box.append($btnGroup);
$box.append($('<p>').css({'font-weight': 'bold', 'margin-top': '12px'}).text(mw.msg('cradle-or-enter-schema')));
} else {
$box.append($('<p>').css({'margin-top': '0', 'font-weight': 'bold'}).text(mw.msg('cradle-enter-schema-title')));
}
let $manualInput = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-schema-placeholder'));
let $loadBtn = $('<button>')
.addClass('cradle-btn-secondary')
.text(mw.msg('cradle-load-schema'))
.on('click', function() {
let schemaId = $manualInput.val().trim().toUpperCase();
if (schemaId) {
if (!schemaId.startsWith('E')) {
schemaId = 'E' + schemaId.replace(/\D/g, '');
}
userWantsToChangeSchema = false;
loadAndDisplaySchema(schemaId);
}
});
let $inputGroup = $('<div>').css({'display': 'flex', 'gap': '8px', 'margin-top': '8px'});
$manualInput.css({'flex': '1'});
$inputGroup.append($manualInput).append($loadBtn);
$box.append($inputGroup);
attachEntitySchemaAutocompleter($inputGroup, $manualInput, function(schemaId) {
userWantsToChangeSchema = false;
loadAndDisplaySchema(schemaId);
});
$content.append($box);
}
/**
* Updates or renders the persistent top-level navigation tabs (#create, #design, #edit).
* These tabs remain present across form rendering, schema designer, and schema editor views.
*/
function updateNavigationTabs(activeTab) {
// Only show tabs if on Special:Cradle or if activeMode is create
if (!isSpecialCradle && activeMode === 'edit') {
$('#cradle-nav-tabs').empty().hide();
return;
}
let $nav = $('#cradle-nav-tabs');
if (!$nav.length) {
let $content = $('#cradle-content-area');
if ($content.length) {
$nav = $('<div>').attr('id', 'cradle-nav-tabs');
$content.before($nav);
} else {
return;
}
}
$nav.show().empty();
let tabs = [
{ id: 'create', label: mw.msg('cradle-tab-create-item') || 'Crear elementos' },
{ id: 'design', label: mw.msg('cradle-tab-design-schema') || 'Diseñar esquemas' },
{ id: 'edit', label: (mw.msg('cradle-tab-edit-schema') || 'Editar esquemas'), badge: mw.msg('cradle-tab-edit-schema-badge') || 'Experimental' }
];
let $tabsHeader = $('<div>').addClass('cradle-select-tabs');
tabs.forEach(tab => {
let $tab = $('<button>')
.attr('type', 'button')
.addClass('cradle-select-tab')
.text(tab.label);
if (tab.badge) {
$tab.append($('<span>').addClass('cradle-tab-badge').text(tab.badge));
}
if (activeTab === tab.id) {
$tab.addClass('active');
}
$tab.on('click', function() {
mw.storage.set('cradle-active-tab', tab.id);
let newHash = '#' + tab.id;
if (history.pushState) {
history.pushState(null, null, window.location.pathname + window.location.search + newHash);
} else {
window.location.hash = newHash;
}
// Reset active form/schema selection state so clicking a tab always returns to that tab's selector
schemaProperties = {};
propertyMetadata = {};
softselectLabels = {};
formState = {};
activeSchema = null;
activeTemplate = null;
userWantsToChangeSchema = false;
renderCreateOptionsSelector();
});
$tabsHeader.append($tab);
});
$nav.append($tabsHeader);
}
/**
* Renders selection panel with 3 tabs: 'Crear elementos', 'Diseñar esquemas', and 'Editar esquemas (Experimental)'.
*/
function renderCreateOptionsSelector() {
let hash = window.location.hash.toLowerCase();
let search = window.location.search.toLowerCase();
let activeTab = null;
if (hash.startsWith('#edit') || search.includes('tab=edit')) {
activeTab = 'edit';
} else if (hash.startsWith('#design') || search.includes('tab=design')) {
activeTab = 'design';
} else if (hash.startsWith('#create') || search.includes('tab=create')) {
activeTab = 'create';
} else {
activeTab = mw.storage.get('cradle-active-tab');
}
if (activeTab !== 'create' && activeTab !== 'design' && activeTab !== 'edit') {
activeTab = 'create';
}
if (isSpecialCradle && (!window.location.hash || window.location.hash === '#')) {
let targetHash = '#' + activeTab;
if (history.replaceState) {
history.replaceState(null, null, window.location.pathname + window.location.search + targetHash);
} else {
window.location.hash = targetHash;
}
}
updateNavigationTabs(activeTab);
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
if (activeTab === 'create') {
// Tab 1: Load Existing EntitySchema (ShEx) to create an item
let $loadBox = $('<div>').addClass('cradle-selector-box');
$loadBox.append($('<h4>').css({'margin': '0 0 6px 0', 'font-size': '14px', 'color': '#202122'})
.text(mw.msg('cradle-method-schema')));
$loadBox.append($('<p>').css({'margin': '0 0 12px 0', 'font-size': '12px', 'color': '#54595d'})
.text(mw.msg('cradle-create-custom-schema-desc') || 'Busca un EntitySchema existente (ej. E10, Humano) para cargar sus declaraciones y crear un nuevo elemento.'));
let $schemaInput = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-schema-placeholder'));
let $schemaBtn = $('<button>')
.addClass('cradle-btn-secondary')
.text(mw.msg('cradle-load-schema'))
.on('click', function() {
let schemaId = $schemaInput.val().trim().toUpperCase();
if (schemaId) {
if (!schemaId.startsWith('E')) {
schemaId = 'E' + schemaId.replace(/\D/g, '');
}
loadAndDisplaySchema(schemaId);
}
});
let $group = $('<div>').css({'display': 'flex', 'gap': '8px'});
$schemaInput.css({'flex': '1'});
$group.append($schemaInput).append($schemaBtn);
$loadBox.append($group);
attachEntitySchemaAutocompleter($group, $schemaInput, function(schemaId) {
loadAndDisplaySchema(schemaId);
});
$content.append($loadBox);
} else if (activeTab === 'design') {
// Tab 2: Design New EntitySchema (ShEx)
let $designBox = $('<div>').addClass('cradle-selector-box');
$designBox.append($('<h4>').css({'margin': '0 0 6px 0', 'font-size': '14px', 'color': '#202122'})
.text(mw.msg('cradle-schema-designer')));
$designBox.append($('<p>').css({'margin': '0 0 14px 0', 'font-size': '12px', 'color': '#54595d'})
.text(mw.msg('cradle-designer-custom-desc') || 'Diseña un nuevo esquema desde cero o importando propiedades de un elemento existente para publicarlo en Wikidata como un EntitySchema (ShEx).'));
let $createDesignerBtn = $('<button>')
.addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({
'width': '100%',
'display': 'inline-flex',
'align-items': 'center',
'justify-content': 'center',
'gap': '6px',
'min-height': '38px',
'font-weight': 'bold',
'font-size': '14px',
'box-sizing': 'border-box'
})
.html(ICONS.plus + ' <span>' + (mw.msg('cradle-create-shex-designer') || 'Diseñar / Crear nuevo EntitySchema (ShEx)') + '</span>')
.on('click', function() {
renderSchemaDesigner();
});
$designBox.append($createDesignerBtn);
$content.append($designBox);
} else if (activeTab === 'edit') {
// Tab 3: Edit Existing EntitySchema (Experimental)
let $editBox = $('<div>').addClass('cradle-selector-box');
$editBox.append($('<h4>').css({'margin': '0 0 6px 0', 'font-size': '14px', 'color': '#202122'})
.text((mw.msg('cradle-tab-edit-schema') || 'Editar esquemas') + ' (' + (mw.msg('cradle-tab-edit-schema-badge') || 'Experimental') + ')'));
$editBox.append($('<p>').css({'margin': '0 0 12px 0', 'font-size': '12px', 'color': '#54595d'})
.text(mw.msg('cradle-edit-schema-desc') || 'Busca un EntitySchema existente (ej. E10, Humano) para editar sus declaraciones o código ShEx.'));
// Check if schema was specified in query or hash (e.g. ?schema=E10 or #edit?id=E10 or #edit/E10)
let prefillId = '';
let qMatch = window.location.search.match(/[?&](?:schema|id)=(E\d+)/i) ||
window.location.hash.match(/[#&?/](E\d+)/i);
if (qMatch) {
prefillId = qMatch[1].toUpperCase();
}
let $schemaInput = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-schema-placeholder'))
.val(prefillId);
let $schemaBtn = $('<button>')
.addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.text(mw.msg('cradle-load-and-edit-schema') || 'Cargar esquema para editar')
.on('click', function() {
let schemaId = $schemaInput.val().trim().toUpperCase();
if (schemaId) {
if (!schemaId.startsWith('E')) {
schemaId = 'E' + schemaId.replace(/\D/g, '');
}
loadSchemaForEditing(schemaId);
}
});
let $group = $('<div>').css({'display': 'flex', 'gap': '8px'});
$schemaInput.css({'flex': '1'});
$group.append($schemaInput).append($schemaBtn);
$editBox.append($group);
attachEntitySchemaAutocompleter($group, $schemaInput, function(schemaId) {
loadSchemaForEditing(schemaId);
});
$content.append($editBox);
if (prefillId && !userWantsToChangeSchema) {
loadSchemaForEditing(prefillId);
}
}
}
/**
* Parse the wikitext on Wikidata:Cradle to build predefined form presets.
*/
function parseCradleWikitext(wikitext) {
let forms = {};
let lines = wikitext.split('\n');
let currentForm = null;
lines.forEach(line => {
line = line.trim();
if (!line) return;
// Match == Form Title ==
let titleMatch = line.match(/^==\s*(.+?)\s*==$/);
if (titleMatch) {
let title = titleMatch[1];
currentForm = {
title: title,
labels: {},
props: {}
};
forms[title.toLowerCase().replace(/ /g, '_')] = currentForm;
return;
}
if (!currentForm) return;
// Match language label translations: :de:Antike Töpfer...
let langMatch = line.match(/^:([a-z-]+):(.+)$/);
if (langMatch) {
currentForm.labels[langMatch[1]] = langMatch[2].trim();
return;
}
// Match property line: ;P31:hardselect:Q5|mandatory
let propMatch = line.match(/^;\s*(P\d+)(?::(.*))?$/);
if (propMatch) {
let pid = propMatch[1];
let rest = propMatch[2] || '';
let propConfig = {
id: pid,
mandatory: false,
hardselect: [],
softselect: [],
defaultValue: ''
};
let parts = rest.split('|');
parts.forEach(part => {
part = part.trim();
if (!part) return;
if (part === 'mandatory') {
propConfig.mandatory = true;
} else {
let optMatch = part.match(/^([a-z]+):(.+)$/i);
if (optMatch) {
let key = optMatch[1].toLowerCase();
let val = optMatch[2];
if (key === 'hardselect') {
propConfig.hardselect = val.split(',').map(s => s.trim());
} else if (key === 'softselect') {
propConfig.softselect = val.split(',').map(s => s.trim());
} else if (key === 'default') {
propConfig.defaultValue = val.trim();
}
}
}
});
currentForm.props[pid] = propConfig;
}
});
return forms;
}
/**
* Loads wikitext of Wikidata:Cradle.
*/
function loadCradleWikitext() {
let api = new mw.Api();
return api.get({
action: 'query',
prop: 'revisions',
titles: 'Wikidata:Cradle',
rvslots: 'main',
rvprop: 'content',
format: 'json'
}).then(res => {
let pages = res.query.pages;
let pageId = Object.keys(pages)[0];
if (pageId === "-1") {
throw new Error("Wikidata:Cradle page not found");
}
return pages[pageId].revisions[0].slots.main['*'];
});
}
/**
* Loads a predefined form preset from Wikidata:Cradle and displays it.
*/
function loadAndDisplayTemplate(key) {
updateNavigationTabs('create');
let $content = $('#cradle-content-area').empty();
$content.append($('<div>').css({'text-align': 'center', 'margin-top': '40px'})
.append($('<div>').addClass('cradle-spinner').css({'border-top-color': 'var(--border-color-progressive, #36c)'}))
.append($('<p>').text(`Loading form template...`))
);
updateDrawerFooter(false);
let t = cradleTemplates[key];
activeTemplate = t;
let propIds = Object.keys(t.props);
let softselectQids = [];
propIds.forEach(pid => {
let pDef = t.props[pid];
softselectQids = softselectQids.concat(pDef.hardselect).concat(pDef.softselect);
if (pDef.defaultValue && pDef.defaultValue.startsWith('Q')) {
softselectQids.push(pDef.defaultValue);
}
});
getEntityData().then(() => {
return Promise.all([
loadPropertiesMetadata(propIds),
loadItemLabels(softselectQids)
]);
}).then(results => {
propertyMetadata = results[0];
softselectLabels = results[1];
// Map cradle format to parser properties
schemaProperties = {};
propIds.forEach(pid => {
let pDef = t.props[pid];
schemaProperties[pid] = {
id: pid,
min: pDef.mandatory ? 1 : 0,
max: Infinity,
mandatory: pDef.mandatory,
softselect: pDef.hardselect.length > 0 ? pDef.hardselect : pDef.softselect,
defaultValue: pDef.defaultValue
};
});
initializeFormState();
renderForm();
}).catch(err => {
console.error(err);
$content.empty().append($('<div>').addClass('cradle-selector-box').css('border-color', 'var(--color-destructive, #d33)')
.append($('<p>').css({'color': 'var(--color-destructive, #d33)', 'font-weight': 'bold'}).text('Error loading template'))
.append($('<button>').addClass('cradle-btn-secondary').text('Back').on('click', renderActiveView))
);
});
}
/**
* Retrieves or fetches entity data on-demand, resolving race conditions.
*/
function getEntityData() {
if (!isItemPage) return Promise.resolve(null);
if (entityData) return Promise.resolve(entityData);
if (entityDataPromise) return entityDataPromise;
entityDataPromise = loadEntityData(entityId).then(data => {
entityData = data;
return entityData;
});
return entityDataPromise;
}
/**
* Loads the EntitySchema page content, parses it, fetches metadata and renders the form.
*/
function loadAndDisplaySchema(schemaId) {
updateNavigationTabs('create');
activeSchema = { id: schemaId, label: schemaId };
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
$content.append($('<div>').css({'text-align': 'center', 'margin-top': '40px'})
.append($('<div>').addClass('cradle-spinner').css({'border-top-color': 'var(--border-color-progressive, #36c)', 'width': '30px', 'height': '30px'}))
.append($('<p>').text(mw.msg('cradle-loading-schema', schemaId)))
);
getEntityData().then(() => {
return fetchSchemaWithImports(schemaId);
}).then(schema => {
activeSchema = schema;
if (true) {
$('.cradle-subtitle').text(`Schema: ${schema.label} (${schema.id})`);
}
// Parse properties in the ShEx schema (including imported external EntitySchemas)
schemaProperties = parseShEx(schema.schemaText, schema.importedSchemas);
let propIds = Object.keys(schemaProperties);
if (propIds.length === 0) {
throw new Error("No properties found in this schema");
}
// Extract all QIDs (both hardselect and softselect) from all parsed properties
let qidsToFetch = [];
propIds.forEach(pid => {
let p = schemaProperties[pid];
if (p.hardselect) {
if (Array.isArray(p.hardselect)) qidsToFetch = qidsToFetch.concat(p.hardselect);
else if (typeof p.hardselect === 'string') qidsToFetch = qidsToFetch.concat(p.hardselect.split(','));
}
if (p.softselect) {
if (Array.isArray(p.softselect)) qidsToFetch = qidsToFetch.concat(p.softselect);
else if (typeof p.softselect === 'string') qidsToFetch = qidsToFetch.concat(p.softselect.split(','));
}
});
qidsToFetch = [...new Set(qidsToFetch.map(q => (q || '').trim()).filter(id => /^Q\d+$/i.test(id)))];
// Fetch property metadata and Q-item labels in parallel
return Promise.all([
loadPropertiesMetadata(propIds),
loadItemLabels(qidsToFetch)
]);
}).then(results => {
propertyMetadata = results[0] || {};
softselectLabels = results[1] || {};
initializeFormState();
renderForm();
}).catch(err => {
console.error(err);
$content.empty().append($('<div>').addClass('cradle-selector-box').css('border-color', 'var(--color-destructive, #d33)')
.append($('<p>').css({'color': 'var(--color-destructive, #d33)', 'font-weight': 'bold'}).text('Error loading schema'))
.append($('<p>').text(err.message || 'Unknown error occurred'))
.append($('<button>').addClass('cradle-btn-secondary').text('Back').on('click', renderActiveView))
);
});
}
/**
* Fetch EntitySchema from the MediaWiki API.
*/
function fetchSchema(schemaId) {
let api = new mw.Api();
return api.get({
action: 'query',
prop: 'revisions',
titles: 'EntitySchema:' + schemaId,
rvslots: 'main',
rvprop: 'content',
format: 'json'
}).then(res => {
let pages = res.query.pages;
let pageId = Object.keys(pages)[0];
if (pageId === "-1") {
throw new Error(`Schema ${schemaId} does not exist`);
}
let rawContent = pages[pageId].revisions[0].slots.main['*'];
try {
let parsed = JSON.parse(rawContent);
return {
id: schemaId,
label: (parsed.labels && (parsed.labels[mw.config.get('wgUserLanguage')] || parsed.labels['en'])) || schemaId,
schemaText: parsed.schemaText
};
} catch (e) {
return {
id: schemaId,
label: schemaId,
schemaText: rawContent
};
}
});
}
/**
* Extracts external EntitySchema IDs (e.g. ['E10', 'E519']) referenced via ShEx IMPORT directives.
*/
function extractImportIdsFromShEx(shexText) {
if (!shexText) return [];
let cleaned = stripShExComments(shexText);
let importIds = [];
let importRegex = /IMPORT\s+<([^>]+)>/gi;
let m;
while ((m = importRegex.exec(cleaned)) !== null) {
let url = m[1] || '';
let eMatch = url.match(/(?:EntitySchemaText\/|EntitySchema:|entity\/)(E\d+)\b/i) || url.match(/\b(E\d+)$/i);
if (eMatch) {
let eid = eMatch[1].toUpperCase();
if (!importIds.includes(eid)) {
importIds.push(eid);
}
}
}
return importIds;
}
/**
* Fetches an EntitySchema along with any external EntitySchemas referenced via ShEx IMPORT directives.
* Prevents circular import loops per ShEx 2.1 Section 5.6.
*/
function fetchSchemaWithImports(schemaId, visited) {
visited = visited || new Set();
let cleanRootId = String(schemaId || '').trim().toUpperCase();
if (!cleanRootId.startsWith('E')) {
cleanRootId = 'E' + cleanRootId.replace(/\D/g, '');
}
visited.add(cleanRootId);
return fetchSchema(cleanRootId).then(mainSchema => {
let importIds = extractImportIdsFromShEx(mainSchema.schemaText).filter(id => !visited.has(id));
if (importIds.length === 0) {
mainSchema.importedSchemas = {};
return mainSchema;
}
importIds.forEach(id => visited.add(id));
let promises = importIds.map(id =>
fetchSchemaWithImports(id, visited).catch(err => {
logError('[Cradle] Could not load imported schema ' + id + ':', err);
return null;
})
);
return Promise.all(promises).then(results => {
let importedMap = {};
results.forEach(imp => {
if (imp && imp.id) {
importedMap[imp.id.toUpperCase()] = imp;
if (imp.importedSchemas) {
Object.assign(importedMap, imp.importedSchemas);
}
}
});
mainSchema.importedSchemas = importedMap;
return mainSchema;
});
});
}
/**
* Escapes regex special characters in a string.
*/
function escapeRegex(str) {
return String(str).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
/**
* Strips ShEx comments (#...) while preserving # inside IRIs (<...>) and string literals.
*/
function stripShExComments(text) {
if (!text) return '';
let lines = text.split('\n');
return lines.map(line => {
let inIRI = false;
let inQuotes = false;
let quoteChar = '';
let clean = '';
for (let i = 0; i < line.length; i++) {
let c = line[i];
if (!inQuotes && c === '<') {
inIRI = true;
} else if (!inQuotes && inIRI && c === '>') {
inIRI = false;
} else if (!inIRI && (c === '"' || c === "'")) {
if (!inQuotes) {
inQuotes = true;
quoteChar = c;
} else if (quoteChar === c) {
inQuotes = false;
}
} else if (!inIRI && !inQuotes && c === '#') {
break;
}
clean += c;
}
return clean;
}).join('\n');
}
/**
* Extracts inner content of a shape block matching <shapeName> { ... } while respecting nested braces.
*/
function extractShapeContent(text, shapeName) {
let res = extractShape(text, shapeName);
return res ? res.content : text;
}
/**
* Robust shape extractor that identifies shape definitions (<shapeName> [@<Base> AND] [EXTRA ...] { ... })
* without confusing them with assignments (start = @<shapeName>) or inline shape references.
*/
function extractShape(text, shapeName) {
if (!shapeName) return { content: text, extraPids: [], baseShapeRefs: [] };
let cleanShape = String(shapeName).replace(/^[<@:]+|[>]+$/g, '').trim();
let pattern = new RegExp('(?:<' + escapeRegex(cleanShape) + '>|:' + escapeRegex(cleanShape) + '|\\b' + escapeRegex(cleanShape) + ')\\s*([^{};=\n]*?)\\{', 'i');
let match = pattern.exec(text);
if (!match) return { content: text, extraPids: [], baseShapeRefs: [] };
let braceStart = text.indexOf('{', match.index);
let depth = 0;
let endIdx = -1;
for (let i = braceStart; i < text.length; i++) {
if (text[i] === '{') depth++;
else if (text[i] === '}') {
depth--;
if (depth === 0) {
endIdx = i;
break;
}
}
}
let content = endIdx !== -1 ? text.substring(braceStart + 1, endIdx) : text.substring(braceStart + 1);
let modifierStr = match[1] || '';
let extraPids = [];
let extraSection = modifierStr.replace(/@<\s*[^>]+\s*>|@[A-Za-z0-9_:-]+/g, '');
if (/\bEXTRA\b/i.test(extraSection)) {
let pids = extraSection.match(/P\d+/gi) || [];
extraPids = pids.map(p => p.toUpperCase());
}
let baseShapeRefs = (modifierStr.match(/@<\s*([^>]+)\s*>|@([A-Za-z0-9_:-]+)/g) || [])
.map(r => r.replace(/^[@<:]+|[>]+$/g, '').trim())
.filter(Boolean);
return { content: content, extraPids: extraPids, baseShapeRefs: baseShapeRefs };
}
/**
* Discovers all shape definitions (<shape> ... { ... } and <shape> EXTERNAL) in a cleaned ShEx string.
*/
function discoverShapesInShEx(cleaned, sourceSchemaId) {
let shapeHeaderRegex = /(?:<([A-Za-z0-9_:-]+)>|:([A-Za-z0-9_:-]+)|\b(?!start\b|PREFIX\b|BASE\b|IMPORT\b|EXTRA\b|CLOSED\b|EXTERNAL\b)([A-Za-z0-9_:-]+))\s*([^{};=\n]*?)\{/gi;
let match;
let shapes = [];
let shapesMap = {};
while ((match = shapeHeaderRegex.exec(cleaned)) !== null) {
let name = match[1] || match[2] || match[3];
if (!name) continue;
let modifierStr = match[4] || '';
let braceStart = cleaned.indexOf('{', match.index);
let depth = 0;
let endIdx = -1;
for (let i = braceStart; i < cleaned.length; i++) {
if (cleaned[i] === '{') depth++;
else if (cleaned[i] === '}') {
depth--;
if (depth === 0) {
endIdx = i;
break;
}
}
}
let content = endIdx !== -1 ? cleaned.substring(braceStart + 1, endIdx) : cleaned.substring(braceStart + 1);
let extraSection = modifierStr.replace(/@<\s*[^>]+\s*>|@[A-Za-z0-9_:-]+/g, '');
let extraPids = /\bEXTRA\b/i.test(extraSection)
? (extraSection.match(/P\d+/gi) || []).map(p => p.toUpperCase())
: [];
let baseShapeRefs = (modifierStr.match(/@<\s*([^>]+)\s*>|@([A-Za-z0-9_:-]+)/g) || [])
.map(r => r.replace(/^[@<:]+|[>]+$/g, '').trim())
.filter(Boolean);
let shapeObj = {
name: name,
extraPids: extraPids,
baseShapeRefs: baseShapeRefs,
content: content,
startIndex: match.index,
isExternal: false,
sourceSchemaId: sourceSchemaId || null
};
shapes.push(shapeObj);
shapesMap[name.toLowerCase()] = shapeObj;
if (endIdx !== -1) {
shapeHeaderRegex.lastIndex = endIdx + 1;
}
}
// Also detect <Shape> EXTERNAL declarations per ShEx 2.1 Section 6 Rule [9]
let externalDeclRegex = /(?:<([A-Za-z0-9_:-]+)>|:([A-Za-z0-9_:-]+))\s+EXTERNAL\b/gi;
let extMatch;
while ((extMatch = externalDeclRegex.exec(cleaned)) !== null) {
let extName = extMatch[1] || extMatch[2];
if (extName && !shapesMap[extName.toLowerCase()]) {
let extObj = {
name: extName,
extraPids: [],
baseShapeRefs: [],
content: '',
startIndex: extMatch.index,
isExternal: true,
sourceSchemaId: sourceSchemaId || null
};
shapes.push(extObj);
shapesMap[extName.toLowerCase()] = extObj;
}
}
let startMatch = cleaned.match(/start\s*=\s*@<\s*(.+?)\s*>/i) || cleaned.match(/start\s*=\s*@?([A-Za-z0-9_:-]+)/i);
let startShapeName = startMatch ? (startMatch[1] || startMatch[2]).replace(/^[<@:]+|[>]+$/g, '').trim() : null;
let targetShape = null;
if (startShapeName && shapesMap[startShapeName.toLowerCase()]) {
targetShape = shapesMap[startShapeName.toLowerCase()];
} else if (shapes.length > 0) {
let referenced = new Set();
shapes.forEach(s => {
let refs = s.content.match(/@<\s*([^>]+)\s*>/g) || [];
refs.forEach(r => referenced.add(r.replace(/[@<>]/g, '').toLowerCase()));
});
let unreferenced = shapes.filter(s => !referenced.has(s.name.toLowerCase()) && !s.isExternal);
targetShape = unreferenced.length > 0 ? unreferenced[0] : shapes[0];
}
return {
shapes: shapes,
shapesMap: shapesMap,
startShapeName: startShapeName || (targetShape ? targetShape.name : null),
targetShape: targetShape
};
}
/**
* A robust ShEx schema parser supporting root shapes, internal sub-shapes, external IMPORT schemas,
* shape conjunctions (@<Base> AND), triple expression inclusions (&<Base>), multiline blocks, and cardinalities.
*/
function parseShEx(shexText, importedSchemas) {
if (!shexText) return {};
// 0. Extract inline comment hints for external sub-schema origins (# externalSubShape: @<name> from EntitySchema:E10)
let externalSubShapeHints = {};
let hintRegex = /#\s*externalSubShape:\s*@?<([^>]+)>\s*from\s*(?:EntitySchema:)?(E\d+)/gi;
let hm;
while ((hm = hintRegex.exec(shexText)) !== null) {
externalSubShapeHints[hm[1].trim().toLowerCase()] = hm[2].trim().toUpperCase();
}
// 1. Remove comments (#...) while preserving IRIs
let cleaned = stripShExComments(shexText);
let importIds = extractImportIdsFromShEx(shexText);
let defaultImportId = importIds.length > 0 ? importIds[0] : '';
// 2. Discover local shapes and external imported shapes
let localDiscovered = discoverShapesInShEx(cleaned, null);
let shapesMap = localDiscovered.shapesMap;
let targetShape = localDiscovered.targetShape;
let externalShapesMap = {};
if (importedSchemas && typeof importedSchemas === 'object') {
Object.keys(importedSchemas).forEach(eId => {
let imp = importedSchemas[eId];
if (!imp || !imp.schemaText) return;
let impCleaned = stripShExComments(imp.schemaText);
let impDisc = discoverShapesInShEx(impCleaned, eId.toUpperCase());
Object.keys(impDisc.shapesMap).forEach(k => {
let sObj = impDisc.shapesMap[k];
if (!externalShapesMap[k]) {
externalShapesMap[k] = sObj;
}
externalShapesMap[(eId + '#' + k).toLowerCase()] = sObj;
});
if (impDisc.targetShape) {
externalShapesMap[eId.toLowerCase()] = impDisc.targetShape;
}
});
}
function parseShapeProps(shapeObj, visitedShapes) {
visitedShapes = visitedShapes || new Set();
if (!shapeObj) return {};
let shapeKey = ((shapeObj.sourceSchemaId || 'local') + ':' + shapeObj.name).toLowerCase();
if (visitedShapes.has(shapeKey)) return {};
visitedShapes.add(shapeKey);
let props = {};
// Resolve inherited properties from @<BaseShape> AND in header or &<BaseShape> in body
let includeMatches = (shapeObj.content.match(/&<\s*([^>]+)\s*>|&([A-Za-z0-9_:-]+)/g) || [])
.map(r => r.replace(/^[&<:]+|[>]+$/g, '').trim())
.filter(Boolean);
let allBaseRefs = (shapeObj.baseShapeRefs || []).concat(includeMatches);
allBaseRefs.forEach(baseRef => {
let refLower = baseRef.toLowerCase();
let baseShapeObj = shapesMap[refLower] || externalShapesMap[refLower] || (defaultImportId ? externalShapesMap[defaultImportId.toLowerCase()] : null);
if (baseShapeObj && !baseShapeObj.isExternal) {
let inheritedProps = parseShapeProps(baseShapeObj, visitedShapes);
Object.assign(props, inheritedProps);
}
});
let shapeExtraPids = shapeObj.extraPids || [];
let statementBlocks = shapeObj.content.split(';');
statementBlocks.forEach(rawBlock => {
let block = rawBlock.trim();
if (!block) return;
// Match main statement property (p:P123, wdt:P123, or inner ps:P123)
let mainPropMatch = block.match(/(?:wdt|p):(P\d+)/i) || block.match(/(?:ps|pq|psn|psv|pxt):(P\d+)/i);
if (!mainPropMatch) return;
let pid = mainPropMatch[1].toUpperCase();
let mandatory = false;
let min = 0;
let max = 1;
let cardinality = '1';
if (block.includes('+')) {
min = 1;
mandatory = true;
max = Infinity;
cardinality = '+';
} else if (block.includes('*')) {
min = 0;
max = Infinity;
mandatory = false;
cardinality = '*';
} else if (block.includes('?')) {
min = 0;
max = 1;
mandatory = false;
cardinality = '?';
} else {
let cardMatch = block.match(/\{\s*(\d+)\s*(?:,\s*(\d+)?)?\s*\}/);
if (cardMatch) {
min = parseInt(cardMatch[1]);
max = cardMatch[2] ? parseInt(cardMatch[2]) : min;
mandatory = min > 0;
cardinality = min > 1 ? '+' : (max === 1 ? '1' : '+');
} else {
min = 1;
max = 1;
mandatory = true;
cardinality = '1';
}
}
if (shapeExtraPids.includes(pid) || shapeExtraPids.includes('ALL')) {
max = Infinity;
if (cardinality === '1') cardinality = '+';
else if (cardinality === '?') cardinality = '*';
}
// Extract Value Type, Sub-Shape name/source, and Value sets (hardselect / softselect)
let valueType = 'IRI';
let subShapeName = '';
let subShapeMode = 'internal';
let subShapeExternalId = '';
let hardselect = [];
let softselect = [];
let langTags = (block.match(/@([a-z]{2,3}(?:-[a-z0-9]+)?)/gi) || []).map(t => t.substring(1).toLowerCase());
let hasLangTags = langTags.length > 0 || /@~/i.test(block);
if (/xsd:string/i.test(block)) valueType = 'xsd:string';
else if (/rdf:langString/i.test(block) || hasLangTags || KNOWN_MONOLINGUAL_PROPERTIES.includes(pid)) valueType = 'rdf:langString';
else if (/xsd:dateTime/i.test(block)) valueType = 'xsd:dateTime';
else if (/xsd:decimal/i.test(block) || /xsd:integer/i.test(block)) valueType = 'xsd:decimal';
else if (/geo:wktLiteral/i.test(block) || KNOWN_COORDINATE_PROPERTIES.includes(pid)) valueType = 'geo:wktLiteral';
else {
let subShapeMatch = block.match(/@<\s*([^>]+)\s*>/i) || block.match(/@([A-Za-z0-9_:-]+)/i);
if (subShapeMatch) {
valueType = 'subshape';
let rawSubRef = (subShapeMatch[1] || '').replace(/^[<@:]+|[>]+$/g, '').trim();
subShapeName = rawSubRef;
let explicitExtMatch = rawSubRef.match(/^(E\d+)(?:#(.+))?$/i);
let subLower = rawSubRef.toLowerCase();
let localSub = shapesMap[subLower];
let extSub = externalShapesMap[subLower];
if (explicitExtMatch) {
subShapeMode = 'external';
subShapeExternalId = explicitExtMatch[1].toUpperCase();
if (explicitExtMatch[2]) {
subShapeName = explicitExtMatch[2];
}
} else if (externalSubShapeHints[subLower]) {
subShapeMode = 'external';
subShapeExternalId = externalSubShapeHints[subLower];
} else if (localSub && !localSub.isExternal) {
subShapeMode = 'internal';
} else if (extSub) {
subShapeMode = 'external';
subShapeExternalId = extSub.sourceSchemaId || defaultImportId;
} else if ((localSub && localSub.isExternal) || (!localSub && defaultImportId)) {
subShapeMode = 'external';
subShapeExternalId = defaultImportId;
}
let resolvedSubObj = (localSub && !localSub.isExternal) ? localSub : (extSub || (subShapeExternalId ? externalShapesMap[subShapeExternalId.toLowerCase()] : null));
if (resolvedSubObj && resolvedSubObj.content) {
let subQids = resolvedSubObj.content.match(/(?:wd:|Q)(Q\d+)/gi) || [];
subQids.forEach(q => {
let cleanQ = q.replace(/wd:/i, '').toUpperCase();
if (!softselect.includes(cleanQ)) softselect.push(cleanQ);
});
}
} else {
let bracketMatch = block.match(/\[([^\]]+)\]/);
if (bracketMatch) {
let bQids = bracketMatch[1].match(/(?:wd:|Q)(Q\d+)/gi) || [];
bQids.forEach(q => {
let cleanQ = q.replace(/wd:/i, '').toUpperCase();
if (!hardselect.includes(cleanQ)) hardselect.push(cleanQ);
});
}
let otherQids = block.match(/(?:wd:|Q)(Q\d+)/gi) || [];
otherQids.forEach(q => {
let cleanQ = q.replace(/wd:/i, '').toUpperCase();
if (!hardselect.includes(cleanQ) && !softselect.includes(cleanQ)) {
softselect.push(cleanQ);
}
});
valueType = 'IRI';
}
}
if (!props[pid] || mandatory || shapeObj === targetShape) {
props[pid] = {
id: pid,
min: min,
max: max,
mandatory: mandatory,
cardinality: cardinality,
valueType: valueType,
hasLangTags: hasLangTags,
langTags: langTags,
subShapeName: subShapeName,
subShapeMode: subShapeMode,
subShapeExternalId: subShapeExternalId,
hardselect: hardselect,
softselect: softselect.length > 0 ? softselect : hardselect
};
}
});
return props;
}
if (targetShape) {
return parseShapeProps(targetShape, new Set());
}
return parseShapeProps({ name: 'root', content: cleaned, extraPids: [], baseShapeRefs: [] }, new Set());
}
/**
* Parses property constraints from Wikidata claims (P2302).
*/
function parsePropertyConstraints(claims) {
let constraints = [];
if (!claims || !claims.P2302) return constraints;
claims.P2302.forEach(claim => {
if (claim.mainsnak && claim.mainsnak.snaktype === 'value' && claim.mainsnak.datavalue && claim.mainsnak.datavalue.value) {
let constraintQid = claim.mainsnak.datavalue.value.id;
let cInfo = { qid: constraintQid, text: '' };
if (constraintQid === 'Q21503250') {
cInfo.text = mw.msg('cradle-constraint-mandatory');
cInfo.isMandatory = true;
} else if (constraintQid === 'Q21510865') {
cInfo.text = mw.msg('cradle-constraint-single');
cInfo.isSingle = true;
if (claim.qualifiers && (claim.qualifiers.P2309 || claim.qualifiers.P2303 || claim.qualifiers.P2308)) {
cInfo.hasScopeQualifier = true;
}
} else if (constraintQid === 'Q21503252') {
cInfo.text = mw.msg('cradle-constraint-type');
cInfo.isType = true;
} else if (constraintQid === 'Q21502404') {
let regexVal = '';
if (claim.qualifiers && claim.qualifiers.P1793 && claim.qualifiers.P1793[0] && claim.qualifiers.P1793[0].datavalue) {
regexVal = claim.qualifiers.P1793[0].datavalue.value;
}
cInfo.text = mw.msg('cradle-constraint-format') + (regexVal ? ` (${regexVal})` : '');
cInfo.regex = regexVal;
} else if (constraintQid === 'Q21510851') {
cInfo.text = mw.msg('cradle-constraint-inverse');
cInfo.isInverse = true;
} else if (constraintQid === 'Q21510862') {
cInfo.text = mw.msg('cradle-constraint-distinct');
cInfo.isDistinct = true;
} else if (constraintQid === 'Q54554025') {
cInfo.text = mw.msg('cradle-constraint-citation');
cInfo.isCitationNeeded = true;
} else if (constraintQid === 'Q21510855') {
let allowedValues = [];
if (claim.qualifiers && claim.qualifiers.P2305) {
claim.qualifiers.P2305.forEach(q => {
if (q.datavalue && q.datavalue.value && q.datavalue.value.id) {
allowedValues.push(q.datavalue.value.id);
}
});
}
cInfo.text = 'One-of constraint';
cInfo.allowedValues = allowedValues;
}
if (cInfo.text) {
constraints.push(cInfo);
}
}
});
return constraints;
}
/**
* Fetches property metadata.
*/
/**
* Fetches property metadata in chunks of 50 to comply with MediaWiki Action API limits.
*/
function loadPropertiesMetadata(propIds) {
propIds = [...new Set(propIds)].filter(id => /^P\d+$/i.test(id));
if (propIds.length === 0) return Promise.resolve({});
logDebug("[Cradle] Loading properties metadata for:", propIds);
let chunks = [];
for (let i = 0; i < propIds.length; i += 50) {
chunks.push(propIds.slice(i, i + 50));
}
let userLang = mw.config.get('wgUserLanguage') || 'en';
let api = new mw.Api();
let promises = chunks.map(chunk => {
return api.get({
action: 'wbgetentities',
ids: chunk.join('|'),
props: 'info|labels|descriptions|datatype|claims',
languages: userLang + '|en',
format: 'json'
}).then(function(res) {
let metadata = {};
if (res && res.entities) {
Object.keys(res.entities).forEach(pid => {
let ent = res.entities[pid];
let label = pid;
if (ent.labels) {
label = (ent.labels[userLang] && ent.labels[userLang].value) ||
(ent.labels['en'] && ent.labels['en'].value) ||
pid;
}
let desc = "";
let p2559Texts = [];
if (ent.claims && ent.claims.P2559) {
ent.claims.P2559.forEach(claim => {
if (claim.mainsnak &&
claim.mainsnak.snaktype === 'value' &&
claim.mainsnak.datavalue &&
claim.mainsnak.datavalue.value) {
let val = claim.mainsnak.datavalue.value;
if (val.text && val.language) {
p2559Texts.push({
text: val.text,
language: val.language
});
}
}
});
}
// 1. Try P2559 in user interface language
let targetUsage = p2559Texts.find(t => t.language === userLang);
if (targetUsage) {
desc = targetUsage.text;
} else {
// 2. Try P2559 in English
let enUsage = p2559Texts.find(t => t.language === 'en');
if (enUsage) {
desc = enUsage.text;
} else {
// 3. Try standard description in user interface language
if (ent.descriptions && ent.descriptions[userLang]) {
desc = ent.descriptions[userLang].value;
} else if (ent.descriptions && ent.descriptions['en']) {
// 4. Try standard description in English
desc = ent.descriptions['en'].value;
}
}
}
metadata[pid] = {
id: pid,
label: label,
description: desc,
datatype: ent.datatype,
constraints: parsePropertyConstraints(ent.claims)
};
});
}
return metadata;
}).catch(function(err) {
logError("[Cradle] loadPropertiesMetadata chunk failed:", err);
return {};
});
});
return Promise.all(promises).then(results => {
let merged = {};
results.forEach(m => Object.assign(merged, m));
logDebug("[Cradle] Loaded properties metadata:", merged);
return merged;
});
}
/**
* Fetch labels for specific QIDs in chunks of 50.
*/
function loadItemLabels(qids) {
qids = [...new Set(qids)].filter(id => /^Q\d+$/i.test(id));
if (qids.length === 0) return Promise.resolve({});
logDebug("[Cradle] Loading item labels for:", qids);
let chunks = [];
for (let i = 0; i < qids.length; i += 50) {
chunks.push(qids.slice(i, i + 50));
}
let userLang = mw.config.get('wgUserLanguage') || 'en';
let api = new mw.Api();
let promises = chunks.map(chunk => {
return api.get({
action: 'wbgetentities',
ids: chunk.join('|'),
props: 'labels',
languages: userLang + '|en',
format: 'json'
}).then(function(res) {
let labels = {};
if (res && res.entities) {
Object.keys(res.entities).forEach(qid => {
let ent = res.entities[qid];
let label = qid;
if (ent.labels) {
label = (ent.labels[userLang] && ent.labels[userLang].value) ||
(ent.labels['en'] && ent.labels['en'].value) ||
qid;
}
labels[qid] = label;
});
}
return labels;
}).catch(function(err) {
logError("[Cradle] loadItemLabels chunk failed:", err);
return {};
});
});
return Promise.all(promises).then(results => {
let merged = {};
results.forEach(lbls => Object.assign(merged, lbls));
logDebug("[Cradle] Loaded labels map:", merged);
return merged;
});
}
/**
* Fetch labels AND descriptions for specific QIDs in chunks of 50.
*/
function loadItemDetails(qids) {
qids = [...new Set(qids)].filter(id => /^Q\d+$/i.test(id));
if (qids.length === 0) return Promise.resolve({});
let chunks = [];
for (let i = 0; i < qids.length; i += 50) {
chunks.push(qids.slice(i, i + 50));
}
let userLang = mw.config.get('wgUserLanguage') || 'en';
let api = new mw.Api();
let promises = chunks.map(chunk => {
return api.get({
action: 'wbgetentities',
ids: chunk.join('|'),
props: 'labels|descriptions',
languages: userLang + '|en',
format: 'json'
}).then(function(res) {
let details = {};
if (res && res.entities) {
Object.keys(res.entities).forEach(qid => {
let ent = res.entities[qid];
let label = qid;
let desc = '';
if (ent.labels) {
label = (ent.labels[userLang] && ent.labels[userLang].value) ||
(ent.labels['en'] && ent.labels['en'].value) ||
qid;
}
if (ent.descriptions) {
desc = (ent.descriptions[userLang] && ent.descriptions[userLang].value) ||
(ent.descriptions['en'] && ent.descriptions['en'].value) ||
'';
}
details[qid] = { label: label, description: desc };
});
}
return details;
}).catch(function() {
return {};
});
});
return Promise.all(promises).then(results => {
let merged = {};
results.forEach(d => Object.assign(merged, d));
return merged;
});
}
/**
* Determines effective datatype from property metadata, schema definition, row sample value, or built-in fallback.
*/
function inferDatatype(propDef, meta, pid, sampleValue) {
if (meta && meta.datatype) return meta.datatype;
if (sampleValue && typeof sampleValue === 'object') {
if ('latitude' in sampleValue || 'longitude' in sampleValue) return 'globe-coordinate';
if ('language' in sampleValue || 'text' in sampleValue) return 'monolingualtext';
if ('time' in sampleValue) return 'time';
if ('amount' in sampleValue) return 'quantity';
}
if (pid) {
let uPid = pid.toUpperCase();
if (KNOWN_COORDINATE_PROPERTIES.includes(uPid)) return 'globe-coordinate';
if (KNOWN_MONOLINGUAL_PROPERTIES.includes(uPid)) return 'monolingualtext';
}
if (propDef) {
let vt = propDef.valueType;
if (vt === 'rdf:langString' || propDef.hasLangTags) return 'monolingualtext';
if (vt === 'geo:wktLiteral') return 'globe-coordinate';
if (vt === 'xsd:dateTime') return 'time';
if (vt === 'xsd:decimal' || vt === 'xsd:integer') return 'quantity';
if (vt === 'xsd:string') return 'string';
if (vt === 'subshape') return 'wikibase-item';
if (propDef.hardselect && propDef.hardselect.length > 0) return 'wikibase-item';
if (propDef.softselect && propDef.softselect.length > 0) return 'wikibase-item';
}
return 'string';
}
/**
* Formats decimal coordinate to sexagesimal DMS notation (e.g. 8°45'36.0"N).
*/
function formatDecimalToDMS(val, isLat) {
let num = parseFloat(val);
if (isNaN(num)) return '';
let dir = isLat ? (num >= 0 ? 'N' : 'S') : (num >= 0 ? 'E' : 'W');
let abs = Math.abs(num);
let deg = Math.floor(abs);
let minFloat = (abs - deg) * 60;
let min = Math.floor(minFloat);
let sec = (minFloat - min) * 60;
sec = Math.round(sec * 10) / 10;
if (sec >= 60) {
sec = 0;
min++;
}
if (min >= 60) {
min = 0;
deg++;
}
return `${deg}°${min}'${sec.toFixed(1).replace(/\.0$/, '')}"${dir}`;
}
/**
* Formats latitude and longitude pair into human-readable DMS string.
*/
function formatCoordinates(lat, lon) {
let latStr = formatDecimalToDMS(lat, true);
let lonStr = formatDecimalToDMS(lon, false);
if (!latStr || !lonStr) return '';
return `${latStr}, ${lonStr}`;
}
/**
* Formats precision value into human-readable label (e.g. ±1″, ±1′, ±1°, ±0.0001°).
*/
function formatPrecisionLabel(prec) {
if (!prec || isNaN(prec)) return '±1″';
if (prec <= 1 / 36000) return '±0.1″';
if (prec <= 1 / 3600) return '±1″';
if (prec <= 1 / 60) return '±1′';
if (prec >= 1) return `±${Math.round(prec)}°`;
let str = String(prec);
if (str.includes('e-')) {
str = prec.toFixed(6).replace(/0+$/, '');
}
return `±${str}°`;
}
/**
* Parses a single DMS or decimal component (e.g. 8°45'36"N or 8.76° or -75.88).
*/
function parseSingleDMS(s) {
if (!s) return null;
s = s.trim();
let dirMatch = s.match(/[NSEW]/i);
let dir = dirMatch ? dirMatch[0].toUpperCase() : null;
let clean = s.replace(/[NSEW]/gi, '').trim();
// Plain decimal number (with or without degree symbol)
let decOnly = clean.replace(/°/g, '').trim();
if (/^[+-]?\d+(?:\.\d+)?$/.test(decOnly)) {
let val = parseFloat(decOnly);
if (dir === 'S' || dir === 'W') val = -Math.abs(val);
else if (dir === 'N' || dir === 'E') val = Math.abs(val);
let decMatch = decOnly.match(/\.(\d+)/);
let decCount = decMatch ? decMatch[1].length : 0;
let precision = decCount > 0 ? Math.pow(10, -decCount) : 1;
return { value: val, precision: precision, dir: dir };
}
// DMS format: 8° 45' 36" or 8d 45m 36s or 8 45 36
let parts = clean.match(/([+-]?\d+(?:\.\d+)?)[°d\s]+(?:(\d+(?:\.\d+)?)['′m\s]+)?(?:(\d+(?:\.\d+)?)["″s\s]*)?/);
if (!parts) return null;
let deg = parseFloat(parts[1]) || 0;
let min = parseFloat(parts[2]) || 0;
let sec = parseFloat(parts[3]) || 0;
let precision = 1;
if (parts[3] !== undefined) {
precision = parts[3].includes('.') ? 1 / 36000 : 1 / 3600;
} else if (parts[2] !== undefined) {
precision = 1 / 60;
}
let sign = deg < 0 ? -1 : 1;
let val = (Math.abs(deg) + min / 60 + sec / 3600) * sign;
if (dir === 'S' || dir === 'W') val = -Math.abs(val);
else if (dir === 'N' || dir === 'E') val = Math.abs(val);
return { value: val, precision: precision, dir: dir };
}
/**
* Parses a complete coordinate input string in any Wikibase-accepted format (single input field).
*/
function parseCoordinateInput(str) {
if (!str || typeof str !== 'string') return null;
let s = str.trim();
if (!s) return null;
let lat = null, lon = null, precision = 0.0001;
// Strategy 1: Check if comma/semicolon/slash separated
let sepMatch = s.match(/[,;\/]/);
if (sepMatch) {
let parts = s.split(/[,;\/]+/).map(p => p.trim()).filter(Boolean);
if (parts.length >= 2) {
let p1 = parseSingleDMS(parts[0]);
let p2 = parseSingleDMS(parts[1]);
if (p1 && p2) {
if ((p1.dir === 'E' || p1.dir === 'W') && (p2.dir === 'N' || p2.dir === 'S')) {
lat = p2.value;
lon = p1.value;
} else {
lat = p1.value;
lon = p2.value;
}
precision = Math.min(p1.precision, p2.precision);
}
}
} else {
// Strategy 2: Two directional components separated by space: "8°45'36"N 75°53'8"W"
let dirParts = s.match(/([+-]?\d+[^NSEW]*[NSEW])/gi);
if (dirParts && dirParts.length === 2) {
let p1 = parseSingleDMS(dirParts[0]);
let p2 = parseSingleDMS(dirParts[1]);
if (p1 && p2) {
if ((p1.dir === 'E' || p1.dir === 'W') && (p2.dir === 'N' || p2.dir === 'S')) {
lat = p2.value;
lon = p1.value;
} else {
lat = p1.value;
lon = p2.value;
}
precision = Math.min(p1.precision, p2.precision);
}
} else {
// Strategy 3: Two numbers separated by space: "8.76 -75.88"
let numParts = s.split(/\s+/);
if (numParts.length === 2) {
let p1 = parseSingleDMS(numParts[0]);
let p2 = parseSingleDMS(numParts[1]);
if (p1 && p2) {
lat = p1.value;
lon = p2.value;
precision = Math.min(p1.precision, p2.precision);
}
}
}
}
if (lat === null || lon === null || isNaN(lat) || isNaN(lon)) return null;
if (lat < -90 || lat > 90 || lon < -180 || lon > 180) return null;
return { latitude: lat, longitude: lon, precision: precision };
}
/**
* Populates formState by mapping current entity claims to the parsed schema properties.
*/
function initializeFormState() {
formState = {};
Object.keys(schemaProperties).forEach(pid => {
let propDef = schemaProperties[pid];
let meta = propertyMetadata[pid] || {};
let sampleClaim = (isItemPage && entityData && entityData.claims && entityData.claims[pid] && entityData.claims[pid][0]);
let sampleVal = sampleClaim && sampleClaim.mainsnak && sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.value;
let claimDatatype = sampleClaim && sampleClaim.mainsnak && (sampleClaim.mainsnak.datatype || (sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.type));
if (claimDatatype === 'globecoordinate') claimDatatype = 'globe-coordinate';
let effectiveDatatype = claimDatatype || inferDatatype(propDef, meta, pid, sampleVal);
formState[pid] = [];
// Map existing claims on the entity (if on an item page)
if (isItemPage && entityData && entityData.claims && entityData.claims[pid]) {
entityData.claims[pid].forEach(claim => {
if (claim.mainsnak) {
let snak = claim.mainsnak;
let snaktype = snak.snaktype || 'value';
let value = '';
if (snaktype === 'value' && snak.datavalue) {
value = parseClaimValue(snak.datavalue);
} else if (snaktype === 'somevalue' || snaktype === 'novalue') {
value = snaktype;
}
let rowDt = snak.datatype || (snak.datavalue && snak.datavalue.type) || effectiveDatatype;
if (rowDt === 'globecoordinate') rowDt = 'globe-coordinate';
if (snaktype === 'value' || snaktype === 'somevalue' || snaktype === 'novalue') {
formState[pid].push({
id: Math.random().toString(36).substring(2, 9),
guid: claim.id,
value: value,
snaktype: snaktype,
datatype: rowDt,
rank: claim.rank || 'normal',
references: claim.references || [],
qualifiers: claim.qualifiers || {},
isDeleted: false
});
}
}
});
}
// Set defaults or blank rows in create mode
if (formState[pid].length === 0) {
let initVal = '';
if (activeMode === 'create' && propDef.defaultValue) {
initVal = propDef.defaultValue;
}
if (propDef.mandatory || initVal !== '') {
let newRow = createNewRowState(effectiveDatatype);
if (initVal !== '') newRow.value = initVal;
formState[pid].push(newRow);
}
} else if (formState[pid].length > 1) {
// If item already has multiple claims, allow adding/removing values
propDef.max = Infinity;
}
});
}
const MONTH_NAMES_ES = ['', 'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'];
const MONTH_NAMES_EN = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
function getMonthName(monthNum, lang, style) {
if (monthNum < 1 || monthNum > 12) return String(monthNum);
let monthStyle = style || 'short';
try {
let d = new Date(2000, monthNum - 1, 15);
let userLang = lang || mw.config.get('wgUserLanguage') || 'es';
let monthName = new Intl.DateTimeFormat(userLang, { month: monthStyle }).format(d);
return monthName;
} catch(e) {
let isEs = (lang || '').startsWith('es');
return isEs ? MONTH_NAMES_ES[monthNum] : MONTH_NAMES_EN[monthNum];
}
}
function formatWikibaseDate(isoTime, precision) {
if (!isoTime) return '';
let isNegative = isoTime.startsWith('-');
let clean = isoTime.replace(/^[+-]/, '').replace(/T.*$/, '');
let parts = clean.split('-');
let yearNum = parseInt(parts[0], 10) || 0;
let monthNum = parseInt(parts[1], 10) || 0;
let dayNum = parseInt(parts[2], 10) || 0;
let userLang = mw.config.get('wgUserLanguage') || 'es';
let isEs = userLang.startsWith('es');
let signStr = isNegative ? ' BCE' : '';
if (precision <= 9 || monthNum === 0) {
return (isNegative ? '-' : '') + yearNum + signStr;
}
let monthName = getMonthName(monthNum, userLang, 'short');
let monthNameLong = getMonthName(monthNum, userLang, 'long');
if (precision === 10 || dayNum === 0) {
return isEs ? `${monthNameLong} de ${yearNum}${signStr}` : `${monthNameLong} ${yearNum}${signStr}`;
}
return isEs ? `${dayNum} de ${monthName} de ${yearNum}${signStr}` : `${dayNum} ${monthName} ${yearNum}${signStr}`;
}
function parseNaturalDate(inputStr) {
let str = String(inputStr || '').trim();
if (!str) return null;
let isNegative = false;
if (str.startsWith('-')) {
isNegative = true;
str = str.substring(1);
} else if (str.startsWith('+')) {
str = str.substring(1);
}
str = str.replace(/T.*$/, '').replace(/,/g, ' ').replace(/\bde\b/gi, ' ').replace(/\bof\b/gi, ' ').trim();
str = str.replace(/\s+/g, ' ');
let monthMap = {
'january': 1, 'jan': 1, 'february': 2, 'feb': 2, 'march': 3, 'mar': 3,
'april': 4, 'apr': 4, 'may': 5, 'june': 6, 'jun': 6, 'july': 7, 'jul': 7,
'august': 8, 'aug': 8, 'september': 9, 'sep': 9, 'sept': 9,
'october': 10, 'oct': 10, 'november': 11, 'nov': 11, 'december': 12, 'dec': 12,
'enero': 1, 'ene': 1, 'febrero': 2, 'feb': 2, 'marzo': 3, 'abril': 4, 'abr': 4,
'mayo': 5, 'junio': 6, 'jun': 6, 'julio': 7, 'jul': 7, 'agosto': 8, 'ago': 8,
'septiembre': 9, 'setiembre': 9, 'octubre': 10, 'oct': 10, 'noviembre': 11, 'nov': 11, 'diciembre': 12, 'dic': 12
};
let userLang = mw.config.get('wgUserLanguage') || 'es';
for (let m = 1; m <= 12; m++) {
try {
let d = new Date(2000, m - 1, 15);
let longName = new Intl.DateTimeFormat(userLang, { month: 'long' }).format(d).toLowerCase();
let shortName = new Intl.DateTimeFormat(userLang, { month: 'short' }).format(d).toLowerCase().replace(/\./g, '');
monthMap[longName] = m;
monthMap[shortName] = m;
} catch(e) {}
}
let tokens = str.split(/[\s/\.\-]+/);
let day = 0;
let month = 0;
let year = 0;
let precision = 9;
let numTokens = [];
tokens.forEach(t => {
let lower = t.toLowerCase();
if (monthMap[lower]) {
month = monthMap[lower];
} else if (/^\d+$/.test(t)) {
numTokens.push(parseInt(t, 10));
}
});
if (month > 0) {
if (numTokens.length === 1) {
year = numTokens[0];
precision = 10;
} else if (numTokens.length >= 2) {
if (numTokens[0] > 31) {
year = numTokens[0];
day = numTokens[1];
} else if (numTokens[1] > 31) {
day = numTokens[0];
year = numTokens[1];
} else {
day = numTokens[0];
year = numTokens[1];
}
precision = 11;
}
} else {
if (numTokens.length === 1) {
year = numTokens[0];
precision = 9;
} else if (numTokens.length === 2) {
if (numTokens[0] > 31) {
year = numTokens[0];
month = numTokens[1];
} else {
month = numTokens[0];
year = numTokens[1];
}
precision = 10;
} else if (numTokens.length >= 3) {
if (numTokens[0] > 31) {
year = numTokens[0];
month = numTokens[1];
day = numTokens[2];
} else if (numTokens[2] > 31) {
day = numTokens[0];
month = numTokens[1];
year = numTokens[2];
} else {
day = numTokens[0];
month = numTokens[1];
year = numTokens[2];
}
precision = 11;
}
}
if (year <= 0) return null;
let yearStr = String(year).padStart(4, '0');
let monthStr = (month > 0) ? String(month).padStart(2, '0') : '00';
let dayStr = (day > 0) ? String(day).padStart(2, '0') : '00';
let isoTime = (isNegative ? '-' : '+') + yearStr + '-' + monthStr + '-' + dayStr + 'T00:00:00Z';
return {
type: 'time',
value: {
time: isoTime,
timezone: 0,
before: 0,
after: 0,
precision: precision,
calendarmodel: 'http://www.wikidata.org/entity/Q1985727'
}
};
}
/**
* Extracts values from Wikibase datavalue object based on type.
*/
function parseClaimValue(datavalue) {
let t = datavalue.type;
let val = datavalue.value;
if (t === 'wikibase-entityid') {
return val.id;
} else if (t === 'string') {
return val;
} else if (t === 'monolingualtext') {
return { text: val.text, language: val.language };
} else if (t === 'globecoordinate') {
return {
latitude: val.latitude !== undefined && val.latitude !== null ? val.latitude : '',
longitude: val.longitude !== undefined && val.longitude !== null ? val.longitude : '',
altitude: val.altitude !== undefined ? val.altitude : null,
precision: val.precision || 0.0001,
globe: val.globe || 'http://www.wikidata.org/entity/Q2'
};
} else if (t === 'quantity') {
let amt = val.amount;
if (amt.startsWith('+')) amt = amt.substring(1);
return amt;
} else if (t === 'time') {
return formatWikibaseDate(val.time, val.precision);
}
return JSON.stringify(val);
}
/**
* Creates standard structure for a new input row.
*/
function createNewRowState(datatype) {
let defaultValue = '';
if (datatype === 'monolingualtext') {
defaultValue = { text: '', language: mw.config.get('wgUserLanguage') || 'en' };
} else if (datatype === 'globe-coordinate' || datatype === 'globecoordinate') {
defaultValue = { latitude: '', longitude: '', altitude: null, precision: 0.0001, globe: 'http://www.wikidata.org/entity/Q2' };
}
return {
id: Math.random().toString(36).substring(2, 9),
guid: null,
value: defaultValue,
datatype: datatype,
rank: 'normal',
references: [],
qualifiers: {},
isDeleted: false
};
}
/**
* Renders the schema validation results view.
*/
/**
* Runs schema validation on the current formState.
*/
function validateFormState() {
let results = {
properties: {},
totalRequired: 0,
presentRequired: 0,
totalOptional: 0,
presentOptional: 0
};
Object.keys(schemaProperties).forEach(pid => {
let propDef = schemaProperties[pid];
let meta = propertyMetadata[pid] || {};
let sampleClaim = (isItemPage && entityData && entityData.claims && entityData.claims[pid] && entityData.claims[pid][0]);
let sampleVal = sampleClaim && sampleClaim.mainsnak && sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.value;
let claimDatatype = sampleClaim && sampleClaim.mainsnak && (sampleClaim.mainsnak.datatype || (sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.type));
if (claimDatatype === 'globecoordinate') claimDatatype = 'globe-coordinate';
let datatype = claimDatatype || inferDatatype(propDef, meta, pid, sampleVal);
let min = propDef.min !== undefined ? propDef.min : 0;
let max = propDef.max !== undefined ? propDef.max : '*';
// Get active claims (including somevalue & novalue statements)
let claims = formState[pid] || [];
let activeClaims = claims.filter(c => !c.isDeleted && (
c.snaktype === 'somevalue' ||
c.snaktype === 'novalue' ||
c.value === 'somevalue' ||
c.value === 'novalue' ||
!isEmptyValue(c.value, c.datatype || datatype)
));
let isPresent = (activeClaims.length > 0);
// Validation checks
let errors = [];
// 1. Cardinality checks
if (activeClaims.length < min) {
errors.push(mw.msg('cradle-val-err-min', min));
}
if (max !== '*' && max !== Infinity && activeClaims.length > max) {
errors.push(mw.msg('cradle-val-err-max', max));
}
// 2. Format checks (skip for somevalue/novalue claims)
activeClaims.forEach(claim => {
let val = claim.value;
if (claim.snaktype === 'somevalue' || claim.snaktype === 'novalue' || val === 'somevalue' || val === 'novalue') {
return;
}
let dt = claim.datatype || datatype;
if (dt === 'wikibase-item') {
if (typeof val === 'string' && !/^[qQ]\d+$/.test(val.trim())) {
errors.push(mw.msg('cradle-val-err-qid', val));
}
} else if (dt === 'quantity') {
if (typeof val === 'string' && isNaN(Number(val.trim()))) {
errors.push(mw.msg('cradle-val-err-num', val));
}
} else if (dt === 'globe-coordinate' || dt === 'globecoordinate' || (typeof val === 'object' && val && ('latitude' in val || 'longitude' in val))) {
let lat = NaN, lon = NaN;
if (typeof val === 'object' && val) {
lat = parseFloat(val.latitude);
lon = parseFloat(val.longitude);
} else if (typeof val === 'string') {
let parsed = parseCoordinateInput(val);
if (parsed) {
lat = parsed.latitude;
lon = parsed.longitude;
}
}
if (isNaN(lat) || isNaN(lon) || lat < -90 || lat > 90 || lon < -180 || lon > 180) {
errors.push(mw.msg('cradle-val-err-coords'));
}
}
});
let isValid = (errors.length === 0);
let isRequired = (min >= 1);
if (isRequired) {
results.totalRequired++;
if (isValid && isPresent) {
results.presentRequired++;
}
} else {
results.totalOptional++;
if (isValid && isPresent) {
results.presentOptional++;
}
}
let itemClass = "";
let badgeText = "";
let statusText = "";
let badgeHtml = "";
if (isRequired) {
if (isPresent && isValid) {
itemClass = "valid";
badgeHtml = ICONS.check;
statusText = mw.msg('cradle-val-present');
} else {
itemClass = "invalid";
badgeHtml = ICONS.close;
statusText = errors.length > 0 ? errors.join(', ') : mw.msg('cradle-val-missing');
}
} else {
if (isPresent) {
if (isValid) {
itemClass = "optional-present";
badgeHtml = ICONS.info;
statusText = mw.msg('cradle-val-optional-present');
} else {
itemClass = "invalid";
badgeHtml = ICONS.close;
statusText = errors.join(', ');
}
} else {
itemClass = "optional-missing";
badgeHtml = ICONS.alert;
statusText = mw.msg('cradle-val-optional-missing');
}
}
results.properties[pid] = {
isValid: isValid,
isPresent: isPresent,
isRequired: isRequired,
errors: errors,
itemClass: itemClass,
badgeHtml: badgeHtml,
statusText: statusText
};
});
return results;
}
/**
* Evaluates statement-level Wikibase Quality Constraints (wbqc) taking into account claim ranks (preferred/deprecated).
*/
function evaluateRowConstraints(pid, row, allRows) {
if (row.isDeleted || row.rank === 'deprecated') return { violations: [], suggestions: [] };
let meta = propertyMetadata[pid];
if (!meta) return { violations: [], suggestions: [] };
let violations = [];
let suggestions = [];
let isEmpty = isEmptyValue(row.value, row.datatype);
let activeRows = allRows.filter(r => !r.isDeleted && r.rank !== 'deprecated');
let preferredRows = activeRows.filter(r => r.rank === 'preferred');
// 1. References / citation-needed -> Suggestion (Only if P2302 has Q54554025 citation-needed constraint)
let EXEMPT_CITATION_DATATYPES = ['commonsMedia', 'url', 'external-id', 'geo-shape', 'tabular-data', 'math', 'musical-notation'];
let hasCitationConstraint = meta.constraints && meta.constraints.some(c => c.isCitationNeeded || c.qid === 'Q54554025');
if (hasCitationConstraint && !isEmpty && (!row.references || row.references.length === 0) && !EXEMPT_CITATION_DATATYPES.includes(row.datatype)) {
suggestions.push({
type: 'suggestion',
name: 'citation-needed constraint',
message: `Statements for <a title="Property:${pid}" href="/wiki/Property:${pid}">${meta.label}</a> should have at least one reference.`,
helpUrl: 'https://www.wikidata.org/wiki/Special:MyLanguage/Help:Property_constraints_portal/Q54554025',
talkUrl: `//www.wikidata.org/wiki/Property_talk:${pid}`
});
}
// 2. Property constraints from P2302 claims
let propDef = schemaProperties[pid] || {};
let isSchemaSingle = (propDef.max === 1);
if (meta.constraints && meta.constraints.length > 0) {
meta.constraints.forEach(c => {
// Single-value constraint (Q21510865): Only if schema limits to 1 or no scope qualifiers exist
if (c.isSingle && (isSchemaSingle || !c.hasScopeQualifier) && activeRows.length > 1 && preferredRows.length !== 1) {
violations.push({
type: 'warning',
name: 'single-value constraint',
message: `Only one value is allowed for property <a title="Property:${pid}" href="/wiki/Property:${pid}">${meta.label}</a> (or set preferred rank on one value).`,
helpUrl: 'https://www.wikidata.org/wiki/Special:MyLanguage/Help:Property_constraints_portal/Q21510865',
talkUrl: `//www.wikidata.org/wiki/Property_talk:${pid}`
});
}
if (c.regex && !isEmpty && typeof row.value === 'string') {
try {
let reg = new RegExp(c.regex);
if (!reg.test(row.value)) {
violations.push({
type: 'violation',
name: 'format constraint',
message: `Value "${row.value}" does not match required format pattern (${c.regex}).`,
helpUrl: 'https://www.wikidata.org/wiki/Special:MyLanguage/Help:Property_constraints_portal/Q21502404',
talkUrl: `//www.wikidata.org/wiki/Property_talk:${pid}`
});
}
} catch (e) {}
}
if (c.qid === 'Q21503252') {
suggestions.push({
type: 'suggestion',
name: 'type constraint',
message: `Ensure value for <a title="Property:${pid}" href="/wiki/Property:${pid}">${meta.label}</a> matches required entity type.`,
helpUrl: 'https://www.wikidata.org/wiki/Special:MyLanguage/Help:Property_constraints_portal/Q21503252',
talkUrl: `//www.wikidata.org/wiki/Property_talk:${pid}`
});
}
});
}
return { violations, suggestions };
}
/**
* Updates card borders, badges, and validation summary in real-time.
*/
function liveUpdateValidation() {
let val = validateFormState();
if (Object.keys(schemaProperties).length === 0) return;
// 1. Update summary box
let summaryText = mw.msg('cradle-validation-summary',
activeSchema ? activeSchema.id : 'Template',
val.presentRequired,
val.totalRequired,
val.presentOptional,
val.totalOptional
);
let allRequiredSatisfied = (val.presentRequired === val.totalRequired);
$('#cradle-validation-summary-box')
.css({
'background-color': allRequiredSatisfied ? 'rgba(0, 175, 137, 0.08)' : 'rgba(211, 51, 51, 0.05)',
'border-color': allRequiredSatisfied ? 'var(--color-success, #00af89)' : 'var(--color-destructive, #d33)',
'color': allRequiredSatisfied ? 'var(--color-success, #00af89)' : 'var(--color-destructive, #d33)'
})
.text(summaryText);
// 2. Update each card & row indicators
Object.keys(val.properties).forEach(pid => {
let propVal = val.properties[pid];
let $card = $(`#cradle-card-${pid}`);
if (!$card.length) return;
$card.removeClass('valid invalid optional-present optional-missing')
.addClass(propVal.itemClass);
$card.find('.cradle-card-validation-badge').html(propVal.badgeHtml);
// Update live Wikibase Quality Constraint (wbqc) statement indicators
let rows = formState[pid] || [];
rows.forEach(row => {
let $indicators = $(`#cradle-indicators-${row.id}`);
if (!$indicators.length) return;
$indicators.empty();
let { violations, suggestions } = evaluateRowConstraints(pid, row, rows);
let hasViolations = violations.length > 0;
let hasSuggestions = suggestions.length > 0;
if (hasViolations || hasSuggestions) {
let primaryType = hasViolations ? 'warning' : 'suggestion';
let iconClass = hasViolations ? 'oo-ui-icon-alert' : 'oo-ui-icon-suggestion-constraint-violation';
let titleText = hasViolations ? 'There are some issues with this statement.' : 'There are some suggestions for improving this statement.';
let $btn = $('<span>')
.addClass(`wbqc-reports-button wikibase-snakview-indicator wbqc-constraint-${primaryType} oo-ui-widget oo-ui-widget-enabled oo-ui-buttonElement oo-ui-buttonElement-frameless oo-ui-buttonElement-size-medium oo-ui-iconElement oo-ui-buttonWidget oo-ui-popupButtonWidget`)
.html(`<a class="oo-ui-buttonElement-button" role="button" title="${titleText}"><span class="oo-ui-iconElement-icon ${iconClass}"></span></a>`);
$indicators.append($btn);
$btn.off('click.wbqc').on('click.wbqc', function(e) {
e.stopPropagation();
$('.cradle-wbqc-popup').remove();
let headerTitle = hasViolations ? 'Issues' : 'Suggestions';
let $popup = $('<div>').addClass('oo-ui-widget oo-ui-widget-enabled oo-ui-popupWidget oo-ui-popupWidget-anchored cradle-wbqc-popup')
.css({
'position': 'absolute',
'z-index': '99999',
'background': '#ffffff',
'border': '1px solid #c8ccd1',
'border-radius': '2px',
'box-shadow': '0 2px 8px rgba(0,0,0,0.15)',
'width': '330px',
'padding': '12px',
'font-size': '0.85rem'
});
let $head = $('<div>').addClass('oo-ui-popupWidget-head').css({
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center',
'border-bottom': '1px solid #eaecf0',
'padding-bottom': '6px',
'margin-bottom': '8px'
}).html(`<strong>${headerTitle}</strong> <a class="cradle-popup-close" style="cursor:pointer; font-weight:bold; color:#54595d; text-decoration:none;">✕</a>`);
$head.find('.cradle-popup-close').on('click', function() { $popup.remove(); });
let $body = $('<div>').addClass('wbqc-reports-all');
// Render Violations / Issues section
if (hasViolations) {
violations.forEach(rep => {
let $reportBox = $('<div>').addClass(`wbqc-reports-status-${rep.type} wbqc-report`).css({'margin-bottom': '8px'});
let $heading = $('<h4>').addClass('wbqc-report-heading').css({'margin': '0 0 4px 0', 'font-size': '0.85rem'})
.html(`<a href="${rep.helpUrl}" target="_blank">${rep.name}</a> <small class="wbqc-report-heading-links"><a class="wbqc-constraint-type-help" title="Help page" href="${rep.helpUrl}" target="_blank">Help</a> <a class="wbqc-constraint-discuss" title="Discussion page" href="${rep.talkUrl}" target="_blank">Discuss</a></small>`);
let $msg = $('<p>').css({'margin': '0', 'font-size': '0.8rem', 'color': '#202122'}).html(rep.message);
$reportBox.append($heading).append($msg);
$body.append($reportBox);
});
}
// Render Suggestions section
if (hasSuggestions) {
suggestions.forEach(rep => {
let $reportBox = $('<div>').addClass(`wbqc-reports-status-${rep.type} wbqc-report`).css({'margin-bottom': '8px'});
let $heading = $('<h4>').addClass('wbqc-report-heading').css({'margin': '0 0 4px 0', 'font-size': '0.85rem'})
.html(`<a href="${rep.helpUrl}" target="_blank">${rep.name}</a> <small class="wbqc-report-heading-links"><a class="wbqc-constraint-type-help" title="Help page" href="${rep.helpUrl}" target="_blank">Help</a> <a class="wbqc-constraint-discuss" title="Discussion page" href="${rep.talkUrl}" target="_blank">Discuss</a></small>`);
let $msg = $('<p>').css({'margin': '0', 'font-size': '0.8rem', 'color': '#202122'}).html(rep.message);
$reportBox.append($heading).append($msg);
$body.append($reportBox);
});
}
$popup.append($head).append($body);
let buttonOffset = $btn.offset();
let popupWidth = 330;
let windowWidth = $(window).width();
let leftPos = buttonOffset.left - popupWidth + 30;
if (leftPos + popupWidth > windowWidth - 15) {
leftPos = windowWidth - popupWidth - 15;
}
leftPos = Math.max(10, leftPos);
$popup.css({
'top': (buttonOffset.top + $btn.outerHeight() + 4) + 'px',
'left': leftPos + 'px'
});
$('body').append($popup);
});
}
});
});
}
/**
* Opens the feedback and bug report modal dialog to post directly to Wikidata_talk:Cradle-gadget.
*/
function openFeedbackModal() {
if ($('#cradle-feedback-modal-overlay').length) return;
let $overlay = $('<div>').attr('id', 'cradle-feedback-modal-overlay').css({
'position': 'fixed',
'top': 0,
'left': 0,
'width': '100%',
'height': '100%',
'background': 'rgba(0, 0, 0, 0.5)',
'z-index': 10002,
'display': 'flex',
'align-items': 'center',
'justify-content': 'center',
'padding': '16px',
'box-sizing': 'border-box'
});
let $modal = $('<div>').attr('id', 'cradle-feedback-modal').css({
'background': 'var(--background-color-base, #ffffff)',
'color': 'var(--color-base, #202122)',
'border-radius': '4px',
'box-shadow': '0 4px 16px rgba(0, 0, 0, 0.25)',
'width': '100%',
'max-width': '580px',
'max-height': '90vh',
'display': 'flex',
'flex-direction': 'column',
'border': '1px solid var(--border-color-base, #c8ccd1)',
'box-sizing': 'border-box'
});
// Header
let $header = $('<div>').css({
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center',
'padding': '14px 18px',
'border-bottom': '1px solid var(--border-color-base, #c8ccd1)'
});
let $title = $('<h3>').css({
'margin': 0,
'font-size': '16px',
'font-weight': 'bold',
'display': 'inline-flex',
'align-items': 'center',
'gap': '8px'
}).html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-title') + '</span>');
let $closeBtn = $('<button>').addClass('cradle-close-btn').html(ICONS.close).on('click', function() {
$overlay.remove();
});
$header.append($title).append($closeBtn);
// Body
let $body = $('<div>').css({
'padding': '18px',
'overflow-y': 'auto',
'display': 'flex',
'flex-direction': 'column',
'gap': '14px'
});
let $desc = $('<p>').css({
'margin': 0,
'font-size': '13px',
'color': 'var(--color-subtle, #54595d)',
'line-height': '1.4'
}).text(mw.msg('cradle-feedback-desc'));
$body.append($desc);
// Type selection dropdown
let $typeBox = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px'});
$typeBox.append($('<label>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-feedback-type-label') || 'Tipo:'));
let $typeSelect = $('<select>').addClass('cdx-select cradle-input').css({
'width': '100%',
'box-sizing': 'border-box',
'height': '36px',
'cursor': 'pointer'
});
let types = [
{ id: 'suggestion', label: mw.msg('cradle-feedback-type-suggestion') || 'Sugerencia / Nueva función' },
{ id: 'bug', label: mw.msg('cradle-feedback-type-bug') || 'Reporte de error (Bug)' },
{ id: 'congratulations', label: mw.msg('cradle-feedback-type-congratulations') || 'Felicitaciones' },
{ id: 'question', label: mw.msg('cradle-feedback-type-question') || 'Pregunta / Comentario general' }
];
types.forEach(t => {
$typeSelect.append($('<option>').val(t.id).text(t.label));
});
$typeBox.append($typeSelect);
$body.append($typeBox);
// Subject input
let $subjectBox = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px'});
$subjectBox.append($('<label>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-feedback-subject-label')));
let $subjectInput = $('<input>').addClass('cradle-input').attr({
'type': 'text',
'placeholder': mw.msg('cradle-feedback-subject-placeholder')
}).css({'width': '100%', 'box-sizing': 'border-box'});
$subjectBox.append($subjectInput);
$body.append($subjectBox);
// Message textarea
let $msgBox = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px'});
$msgBox.append($('<label>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-feedback-message-label')));
let $msgInput = $('<textarea>').addClass('cradle-input').attr({
'rows': '5',
'placeholder': mw.msg('cradle-feedback-message-placeholder')
}).css({'width': '100%', 'box-sizing': 'border-box', 'resize': 'vertical'});
$msgBox.append($msgInput);
$body.append($msgBox);
// Checkbox: diagnostic info
let $diagLabel = $('<label>').css({'display': 'flex', 'align-items': 'center', 'gap': '8px', 'font-size': '12px', 'cursor': 'pointer'});
let $diagCheck = $('<input>').attr({'type': 'checkbox', 'checked': 'checked'});
$diagLabel.append($diagCheck).append($('<span>').text(mw.msg('cradle-feedback-include-diagnostics')));
$body.append($diagLabel);
// Error banner area
let $errorBox = $('<div>').css({'color': 'var(--color-destructive, #d33)', 'font-size': '13px', 'display': 'none'});
$body.append($errorBox);
// Footer
let $modalFooter = $('<div>').css({
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center',
'padding': '14px 18px',
'border-top': '1px solid var(--border-color-base, #c8ccd1)',
'background': 'var(--background-color-interactive-subtle, #f8f9fa)',
'border-radius': '0 0 4px 4px',
'gap': '8px',
'flex-wrap': 'wrap'
});
let $openTalkBtn = $('<a>').attr({
'href': mw.util.getUrl('Wikidata_talk:Cradle-gadget') + '?action=edit§ion=new',
'target': '_blank'
}).addClass('cdx-button cdx-button--weight-quiet')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '4px', 'font-size': '12px', 'text-decoration': 'none'})
.html(ICONS.external + ' <span>' + mw.msg('cradle-feedback-open-talk-btn') + '</span>');
let $actionsRight = $('<div>').css({'display': 'flex', 'gap': '8px'});
let $cancelBtn = $('<button>').attr('type', 'button').addClass('cradle-btn-secondary').text(mw.msg('cradle-cancel')).on('click', function() {
$overlay.remove();
});
let $submitBtn = $('<button>').attr('type', 'button')
.addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-weight': 'bold'})
.html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-submit-btn') + '</span>');
$submitBtn.on('click', function() {
let subject = $subjectInput.val().trim();
let message = $msgInput.val().trim();
if (!subject) {
$errorBox.text(mw.msg('cradle-feedback-subject-required')).show();
$subjectInput.focus();
return;
}
if (!message) {
$errorBox.text(mw.msg('cradle-feedback-message-required')).show();
$msgInput.focus();
return;
}
$errorBox.hide();
$submitBtn.prop('disabled', true).text(mw.msg('cradle-feedback-submitting'));
let selectedTypeId = $typeSelect.val();
let typeObj = types.find(t => t.id === selectedTypeId) || types[0];
let sectionTitle = '[' + typeObj.label + '] ' + subject;
let fullText = message;
if ($diagCheck.is(':checked')) {
let currentSkin = mw.config.get('skin') || 'unknown';
let curPage = mw.config.get('wgPageName') || 'unknown';
let curLang = mw.config.get('wgUserLanguage') || 'unknown';
fullText += '\n\n; Diagnostic Info:\n' +
'* \'\'\'Cradle version:\'\'\' v' + CRADLE_VERSION + '\n' +
'* \'\'\'Page:\'\'\' [[' + curPage + ']]\n' +
'* \'\'\'Skin:\'\'\' ' + currentSkin + '\n' +
'* \'\'\'User Language:\'\'\' ' + curLang + '\n' +
'* \'\'\'Active Mode / Tab:\'\'\' ' + (activeMode || 'create') + ' / ' + (mw.storage.get('cradle-active-tab') || 'create') + '\n' +
'* \'\'\'User Agent:\'\'\' <nowiki>' + navigator.userAgent + '</nowiki>';
}
fullText += '\n\n[[User:Danielyepezgarces|Danielyepezgarces]] ([[User talk:Danielyepezgarces|talk]]) 15:43, 9 November 2026 (UTC)';
let api = new mw.Api();
api.postWithToken('csrf', {
action: 'edit',
title: 'Wikidata talk:Cradle-gadget',
section: 'new',
sectiontitle: sectionTitle,
text: fullText,
summary: '/* ' + sectionTitle + ' */ ' + mw.msg('cradle-feedback-summary')
}).then(function(res) {
$overlay.remove();
let talkUrl = mw.util.getUrl('Wikidata talk:Cradle-gadget');
mw.notify(
$('<span>').html(mw.msg('cradle-feedback-success') + ' <a href="' + talkUrl + '" target="_blank">' + mw.msg('cradle-feedback-open-talk-btn') + '</a>'),
{ type: 'success', autoHide: true }
);
}).catch(function(errCode, errObj) {
$submitBtn.prop('disabled', false).html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-submit-btn') + '</span>');
let errText = (errObj && errObj.error && errObj.error.info) ? errObj.error.info : errCode;
$errorBox.text(mw.msg('cradle-feedback-error', errText)).show();
});
});
$actionsRight.append($cancelBtn).append($submitBtn);
$modalFooter.append($openTalkBtn).append($actionsRight);
$modal.append($header).append($body).append($modalFooter);
$overlay.append($modal);
$overlay.on('click', function(e) {
if (e.target === $overlay[0]) {
$overlay.remove();
}
});
$('body').append($overlay);
$subjectInput.focus();
}
/**
* Updates the drawer footer area (credits and buttons).
*/
function updateDrawerFooter(showButtons) {
let $footer = $('#cradle-footer-area').empty();
if (!$footer.length) return;
if (showButtons) {
let $btnContainer = $('<div>').css({
'display': 'flex',
'gap': '12px',
'width': '100%',
'margin-bottom': '8px'
});
let $saveBtn = $('<button>')
.addClass('cradle-btn-primary')
.text(activeMode === 'edit' ? mw.msg('cradle-save-changes') : mw.msg('cradle-create-item'))
.on('click', saveForm);
let $cancelBtn = $('<button>')
.addClass('cradle-btn-secondary')
.text(mw.msg('cradle-cancel'))
.on('click', function() {
if (isSpecialCradle) {
renderCreateOptionsSelector();
} else {
closeEditor();
}
});
$btnContainer.append($cancelBtn).append($saveBtn);
$footer.append($btnContainer);
}
if (true) {
let danielLink = '<a href="' + mw.util.getUrl('User:Danielyepezgarces') + '" target="_blank">Daniel Yepez Garces</a>';
let ismaelLink = '<a href="' + mw.util.getUrl('User:Olea') + '" target="_blank">Ismael Olea</a>';
let cradleLink = '<a href="https://cradle.toolforge.org/" target="_blank">Cradle</a>';
let magnusLink = '<a href="https://meta.wikimedia.org/wiki/User:Magnus_Manske" target="_blank">Magnus Manske</a>';
let $credits = $('<p>')
.css({
'font-size': '0.72rem',
'color': 'var(--color-subtle, #54595d)',
'margin': '4px auto 0 auto',
'text-align': 'center',
'width': '100%',
'line-height': '1.3'
})
.html(mw.msg('cradle-credits', danielLink, ismaelLink, cradleLink, magnusLink) + ` <span style="font-weight:bold; color:#72777d; margin-left:4px;">v${CRADLE_VERSION}</span>`);
let $feedbackBtn = $('<button>').attr('type', 'button')
.addClass('cdx-button cdx-button--weight-quiet')
.css({
'margin': '4px auto 0 auto',
'display': 'inline-flex',
'align-items': 'center',
'gap': '5px',
'font-size': '12px',
'color': 'var(--color-progressive, #36c)'
})
.html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-btn') + '</span>')
.on('click', openFeedbackModal);
let $footerCenter = $('<div>').css({'text-align': 'center', 'width': '100%'})
.append($credits)
.append($('<div>').css({'margin-top': '4px'}).append($feedbackBtn));
$footer.append($footerCenter);
}
}
/**
* Resets active state and goes back to selection menu.
*/
function changeActiveForm() {
schemaProperties = {};
propertyMetadata = {};
softselectLabels = {};
formState = {};
activeSchema = null;
activeTemplate = null;
userWantsToChangeSchema = true;
renderActiveView();
}
function renderForm() {
updateNavigationTabs('create');
let $content = $('#cradle-content-area').empty();
let propIds = sortPropertyIDs(Object.keys(schemaProperties));
// Render back button
let $headerPanel = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '16px'});
$headerPanel.append($('<button>').addClass('cradle-btn-secondary').html(ICONS.back + ' <span>' + mw.msg('cradle-change-form') + '</span>').on('click', changeActiveForm));
$content.append($headerPanel);
// Display current active schema/template title
if (activeTemplate) {
let activeTitle = activeTemplate.labels[mw.config.get('wgUserLanguage')] || activeTemplate.title;
let $formHeader = $('<div>').css({'margin-bottom': '20px', 'padding-bottom': '8px'})
.append($('<h2>').css({
'font-size': '1.25rem',
'margin': '0',
'font-weight': 'bold',
'color': 'var(--color-base, #202122)'
}).text(activeTitle));
$content.append($formHeader);
} else if (activeSchema) {
let schemaUrl = mw.util.getUrl('EntitySchema:' + activeSchema.id);
let schemaText = (activeSchema.label && activeSchema.label !== activeSchema.id)
? `${activeSchema.label} (${activeSchema.id})`
: activeSchema.id;
let $schemaLink = $('<a>')
.attr({
'href': schemaUrl,
'target': '_blank',
'title': 'EntitySchema:' + activeSchema.id
})
.css({
'color': 'var(--color-link, #36c)',
'text-decoration': 'none'
})
.text(schemaText)
.hover(
function() { $(this).css('text-decoration', 'underline'); },
function() { $(this).css('text-decoration', 'none'); }
);
let $h2 = $('<h2>').css({
'font-size': '1.25rem',
'margin': '0',
'font-weight': 'bold',
'color': 'var(--color-base, #202122)'
}).append($schemaLink);
$content.append($('<div>').css({'margin-bottom': '20px', 'padding-bottom': '8px'}).append($h2));
}
// Live validation summary banner at the top of the form
let $summaryBox = $('<div>')
.attr('id', 'cradle-validation-summary-box')
.css({
'padding': '12px 16px',
'border-radius': '2px',
'margin-bottom': '16px',
'font-size': '0.9rem',
'font-weight': 'bold',
'border': '1px solid transparent',
'transition': 'all 0.2s ease'
});
$content.append($summaryBox);
// For Create Mode: Render Multilingual Identity Card (allowing 1 or more languages)
if (activeMode === 'create') {
let $metaCard = $('<div>').addClass('cradle-field-card').addClass('mandatory');
let $title = $('<h3>').addClass('cradle-field-title').text(mw.msg('cradle-new-item-identity'));
$title.append($('<span>').addClass('cradle-field-required-marker').text(' *'));
$metaCard.append($title);
$metaCard.append($('<p>').addClass('cradle-field-description').text(mw.msg('cradle-new-item-identity-desc')));
let $langRowsContainer = $('<div>').attr('id', 'cradle-lang-rows-container').css({
'display': 'flex',
'flex-direction': 'column',
'gap': '8px',
'margin-bottom': '8px'
});
function createLanguageRow(defaultLang) {
let $row = $('<div>').addClass('cradle-identity-lang-row').css({
'display': 'flex',
'flex-direction': 'row',
'gap': '8px',
'align-items': 'center'
});
// 1. Language search input
let $langWrapper = $('<div>').css({'flex': '0 0 95px', 'position': 'relative'});
let $langInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-lang-input')
.attr({
'type': 'text',
'placeholder': 'Lang'
})
.css({'width': '100%'})
.val(defaultLang || mw.config.get('wgUserLanguage') || 'en');
setupLanguageAutocomplete($langInput);
$langWrapper.append($langInput);
// 2. Label input
let $labelInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-label-input')
.attr({
'type': 'text',
'placeholder': mw.msg('cradle-new-item-label')
})
.css({'flex': '1', 'min-width': '130px'});
// 3. Description input
let $descInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-desc-input')
.attr({
'type': 'text',
'placeholder': mw.msg('cradle-new-item-desc')
})
.css({'flex': '1.4', 'min-width': '150px'});
// 4. Aliases input
let $aliasesInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-aliases-input')
.attr({
'type': 'text',
'placeholder': mw.msg('cradle-new-item-aliases')
})
.css({'flex': '1', 'min-width': '130px'});
// Remove button for secondary languages
let $removeBtn = $('<button>')
.addClass('cradle-btn-delete')
.html(ICONS.close)
.attr('title', 'Eliminar idioma')
.css({'height': '36px', 'width': '36px', 'padding': '0', 'flex-shrink': '0'})
.on('click', function() {
if ($langRowsContainer.children().length > 1) {
$row.remove();
} else {
mw.notify(mw.msg('cradle-error-at-least-one-language'), { type: 'warn' });
}
});
$row.append($langWrapper).append($labelInput).append($descInput).append($aliasesInput).append($removeBtn);
return $row;
}
$langRowsContainer.append(createLanguageRow(mw.config.get('wgUserLanguage') || 'es'));
let $addLangBtn = $('<button>')
.addClass('cdx-button cdx-button--weight-quiet')
.css({'color': '#36c', 'font-size': '0.85rem', 'padding': '4px 8px'})
.html(ICONS.plus + ' <span>' + mw.msg('cradle-add-language') + '</span>')
.on('click', function(e) {
e.preventDefault();
let nextLang = $langRowsContainer.children().length === 1 ? (mw.config.get('wgUserLanguage') === 'es' ? 'en' : 'es') : '';
$langRowsContainer.append(createLanguageRow(nextLang));
});
$metaCard.append($langRowsContainer).append($addLangBtn);
$content.append($metaCard);
}
// Render properties
propIds.forEach(pid => {
let propDef = schemaProperties[pid];
let meta = propertyMetadata[pid] || { label: pid, description: '', datatype: 'string' };
let $card = $('<div>')
.addClass('cradle-field-card')
.attr('id', `cradle-card-${pid}`);
if (propDef.mandatory) {
$card.addClass('mandatory');
}
// Header of card
let $cardHeader = $('<div>').addClass('cradle-field-header');
let $label = $('<h3>').addClass('cradle-field-title');
// Prepend validation badge span next to title
let $badge = $('<span>').addClass('cradle-card-validation-badge').css({'margin-right': '6px', 'font-size': '1.1rem'});
$label.append($badge);
$label.append($('<a>').attr({
href: `/wiki/Property:${pid}`,
target: '_blank'
}).text(meta.label));
if (propDef.mandatory) {
$label.append($('<span>').addClass('cradle-field-required-marker').text('*'));
}
$cardHeader.append($label);
if (meta.description) {
$cardHeader.append($('<p>').addClass('cradle-field-description').text(meta.description));
}
$card.append($cardHeader);
// Container for statement input rows
let $rowsContainer = $('<div>').attr('id', `cradle-rows-${pid}`);
$card.append($rowsContainer);
// Container for action bar
let $actionsContainer = $('<div>').attr('id', `cradle-actions-${pid}`);
$card.append($actionsContainer);
$content.append($card);
renderPropertyRows(pid);
});
updateDrawerFooter(true);
liveUpdateValidation();
}
/**
* Render statement rows for a given property.
*/
function renderPropertyRows(pid) {
let $container = $(`#cradle-rows-${pid}`).empty();
let $actionsContainer = $(`#cradle-actions-${pid}`).empty();
let propDef = schemaProperties[pid];
let rows = formState[pid];
rows.forEach((row, index) => {
let $row = $('<div>')
.addClass('cradle-row')
.attr('id', `cradle-row-${row.id}`);
if (row.isDeleted) {
$row.addClass('deleted');
}
let $inputElement = createInputForDatatype(pid, row);
let $indicators = $('<div>').addClass('wikibase-snakview-indicators').attr('id', `cradle-indicators-${row.id}`).css({'margin-left': '6px', 'display': 'inline-flex'});
let $inputWithIndicators = $('<div>').css({'display': 'flex', 'align-items': 'center', 'flex': '1'}).append($inputElement).append($indicators);
$row.append($inputWithIndicators);
let $deleteBtn = $('<button>')
.addClass('cradle-btn-delete')
.html(row.isDeleted ? ICONS.undo : ICONS.trash)
.attr('title', row.isDeleted ? 'Restore Claim' : 'Delete Claim')
.on('click', function() {
toggleDeleteRow(pid, row.id);
});
$row.append($deleteBtn);
$container.append($row);
});
// Dynamic Action Bar rendering (Add row button)
let nonDeletedRows = rows.filter(r => !r.isDeleted);
let maxLimit = propDef.max;
let showAddButton = (maxLimit === '*' || maxLimit === Infinity || nonDeletedRows.length < maxLimit);
if (showAddButton) {
let $addBtn = $('<button>')
.addClass('cradle-btn-text')
.html(`${ICONS.plus} ${mw.msg('cradle-add-value')}`)
.on('click', function() {
addRow(pid);
});
$actionsContainer.append($addBtn);
}
}
/**
* Creates appropriate jQuery inputs for a datatype.
*/
function createInputForDatatype(pid, row) {
let propDef = schemaProperties[pid];
let meta = propertyMetadata[pid] || {};
let uPid = (pid || '').toUpperCase();
// 0a. Globe-coordinate datatype auto-detection & single-field input
let isCoordinate = row.datatype === 'globe-coordinate' || row.datatype === 'globecoordinate' ||
KNOWN_COORDINATE_PROPERTIES.includes(uPid) ||
(meta && (meta.datatype === 'globe-coordinate' || meta.datatype === 'globecoordinate')) ||
(propDef && propDef.valueType === 'geo:wktLiteral') ||
(row.value && typeof row.value === 'object' && ('latitude' in row.value || 'longitude' in row.value));
if (isCoordinate) {
row.datatype = 'globe-coordinate';
let $group = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px', 'width': '100%'});
let coordVal = (row.value && typeof row.value === 'object') ? row.value : {
latitude: '',
longitude: '',
altitude: null,
precision: 0.0001,
globe: 'http://www.wikidata.org/entity/Q2'
};
if (typeof row.value === 'string' && row.value.trim()) {
let parsed = parseCoordinateInput(row.value);
if (parsed) {
coordVal.latitude = parsed.latitude;
coordVal.longitude = parsed.longitude;
coordVal.precision = parsed.precision;
}
}
row.value = coordVal;
let initialText = '';
if (coordVal.latitude !== '' && coordVal.latitude !== null && coordVal.longitude !== '' && coordVal.longitude !== null && !isNaN(coordVal.latitude) && !isNaN(coordVal.longitude)) {
initialText = formatCoordinates(coordVal.latitude, coordVal.longitude);
}
let $input = $('<input>')
.addClass('cradle-input')
.attr({type: 'text', placeholder: mw.msg('cradle-coord-placeholder')})
.val(initialText);
$group.append($input);
let $previewRow = $('<div>').css({
'display': 'flex',
'align-items': 'center',
'justify-content': 'space-between',
'font-size': '0.75rem',
'color': '#54595d',
'padding': '0 2px'
});
let $dmsBadge = $('<span>').addClass('cradle-coord-dms-badge');
let $mapLink = $('<a>')
.attr({target: '_blank', rel: 'noopener noreferrer'})
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '4px', 'color': '#36c', 'text-decoration': 'none'})
.html(ICONS.mapPin + ' <span>' + mw.msg('cradle-view-on-map') + '</span>')
.hide();
$previewRow.append($dmsBadge).append($mapLink);
$group.append($previewRow);
function updateCoordUI(formatOnSuccess) {
let text = $input.val().trim();
if (!text) {
coordVal.latitude = '';
coordVal.longitude = '';
$dmsBadge.empty().hide();
$mapLink.hide();
row.value = coordVal;
liveUpdateValidation();
return;
}
let parsed = parseCoordinateInput(text);
if (parsed) {
coordVal.latitude = parsed.latitude;
coordVal.longitude = parsed.longitude;
coordVal.precision = parsed.precision || coordVal.precision || 0.0001;
let dmsText = formatCoordinates(parsed.latitude, parsed.longitude);
let precLabel = formatPrecisionLabel(coordVal.precision);
$dmsBadge.text(`${dmsText} (${precLabel})`).show();
let mapUrl = 'https://geohack.toolforge.org/geohack.php?params=' + parsed.latitude + '_N_' + parsed.longitude + '_E_globe:earth';
$mapLink.attr('href', mapUrl).show();
if (formatOnSuccess) {
$input.val(dmsText);
}
} else {
$dmsBadge.empty().hide();
$mapLink.hide();
coordVal.latitude = text;
coordVal.longitude = '';
}
row.value = coordVal;
liveUpdateValidation();
}
$input.on('input', function() {
updateCoordUI(false);
});
$input.on('blur', function() {
updateCoordUI(true);
});
if (initialText) {
let precLabel = formatPrecisionLabel(coordVal.precision);
$dmsBadge.text(`${initialText} (${precLabel})`).show();
let mapUrl = 'https://geohack.toolforge.org/geohack.php?params=' + coordVal.latitude + '_N_' + coordVal.longitude + '_E_globe:earth';
$mapLink.attr('href', mapUrl).show();
}
return $group;
}
// 0b. Monolingual text datatype auto-detection & fallback
let isMonolingual = row.datatype === 'monolingualtext' ||
KNOWN_MONOLINGUAL_PROPERTIES.includes(uPid) ||
(meta && meta.datatype === 'monolingualtext') ||
(propDef && (propDef.valueType === 'rdf:langString' || propDef.hasLangTags)) ||
(row.value && typeof row.value === 'object' && ('language' in row.value || 'text' in row.value));
if (isMonolingual) {
row.datatype = 'monolingualtext';
let $group = $('<div>').css({'display': 'flex', 'gap': '8px', 'flex': '1'});
let valObj = (row.value && typeof row.value === 'object') ? row.value : {
text: typeof row.value === 'string' ? row.value : '',
language: mw.config.get('wgUserLanguage') || 'en'
};
if (!valObj.language) valObj.language = mw.config.get('wgUserLanguage') || 'en';
if (valObj.text === undefined || valObj.text === null) valObj.text = '';
row.value = valObj;
let $langInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-lang-input')
.attr('type', 'text')
.attr('placeholder', 'Lang')
.val(valObj.language);
let $textInput = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-monolingual-text-placeholder'))
.css({'flex': '1'})
.val(valObj.text);
$group.append($langInput).append($textInput);
setupLanguageAutocomplete($langInput, function(selectedCode) {
valObj.language = selectedCode;
row.value = valObj;
liveUpdateValidation();
});
$langInput.on('input', function() {
valObj.language = $langInput.val().trim();
row.value = valObj;
liveUpdateValidation();
});
$textInput.on('input', function() {
valObj.text = $textInput.val();
row.value = valObj;
liveUpdateValidation();
});
return $group;
}
// 1. wikibase-item & wikibase-property datatype
if (row.datatype === 'wikibase-item' || row.datatype === 'wikibase-property') {
if (propDef && propDef.hardselect && propDef.hardselect.length > 0) {
let $select = $('<select>').addClass('cradle-select');
function getAllQids() {
let qidList = [...propDef.hardselect];
if (row.value && typeof row.value === 'string' && /^[QP]\d+$/i.test(row.value) && !qidList.includes(row.value)) {
qidList.push(row.value);
}
return qidList;
}
function buildOptions() {
let qidList = getAllQids();
$select.empty().append($('<option>').val('').text('-- Select --'));
qidList.forEach(qid => {
let label = softselectLabels[qid] || qid;
let text = (label && label !== qid) ? `${label} (${qid})` : qid;
$select.append($('<option>').val(qid).text(text));
});
$select.val(row.value);
}
buildOptions();
let allQids = getAllQids();
let missingQids = allQids.filter(qid => !softselectLabels[qid]);
if (missingQids.length > 0) {
loadItemLabels(missingQids).then(labels => {
Object.assign(softselectLabels, labels);
buildOptions();
});
}
$select.on('change', function() {
row.value = $select.val();
liveUpdateValidation();
});
return $select;
}
let $wrapper = $('<div>').addClass('cradle-autocomplete-wrapper').css({'flex': '1'});
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-search-placeholder'))
.val('');
let $dropdown = $('<ul>').addClass('cradle-autocomplete-dropdown').hide();
$wrapper.append($input).append($dropdown);
function setSelectedItemUI(id, label) {
row.value = id;
if (label && label !== id) {
$input.val(`${label} (${id})`);
} else {
$input.val(id);
}
}
if (row.value) {
loadItemLabels([row.value]).then(labels => {
if (labels[row.value]) {
setSelectedItemUI(row.value, labels[row.value]);
} else {
setSelectedItemUI(row.value, row.value);
}
});
}
let searchTimeout = null;
function showSoftselectOptions() {
let optionsList = [];
if (propDef && propDef.softselect && propDef.softselect.length > 0) {
optionsList = [...propDef.softselect];
}
if (row.value && typeof row.value === 'string' && /^[QP]\d+$/i.test(row.value) && !optionsList.includes(row.value)) {
optionsList.push(row.value);
}
// Filter out QIDs that are already selected in other non-deleted rows of the same property
let otherRows = (formState[pid] || []).filter(r => r.id !== row.id && !r.isDeleted);
let usedQids = otherRows.map(r => typeof r.value === 'string' ? r.value.trim().toUpperCase() : '').filter(v => /^[QP]\d+$/i.test(v));
optionsList = optionsList.filter(qid => !usedQids.includes(qid.toUpperCase()));
if (optionsList.length > 0) {
loadItemDetails(optionsList).then(details => {
$dropdown.empty();
optionsList.forEach(qid => {
let item = details[qid] || { label: qid, description: '' };
let $r = $('<li>').addClass('cradle-autocomplete-row').css({'padding': '6px 8px', 'cursor': 'pointer'});
let $lbl = $('<div>').addClass('cradle-autocomplete-row-label').text(item.label);
$lbl.append($('<small>').css({'color': 'var(--color-subtle, #54595d)', 'margin-left': '6px'}).text(`(${qid})`));
$r.append($lbl);
if (item.description) {
$r.append($('<div>').addClass('cradle-autocomplete-row-desc').css({'font-size': '0.75rem', 'color': 'var(--color-subtle, #54595d)'}).text(item.description));
}
$r.on('click mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
setSelectedItemUI(qid, item.label);
$dropdown.hide();
liveUpdateValidation();
});
$dropdown.append($r);
});
$dropdown.show();
});
} else {
$dropdown.empty().hide();
}
}
$input.on('focus', function() {
let currentVal = $input.val();
let cleanLabel = currentVal.replace(/\s*\([QP]\d+\)$/i, '');
$input.val(cleanLabel);
setTimeout(function() { $input.select(); }, 50);
if (!$input.val().trim() || $input.val().trim().length < 2) {
showSoftselectOptions();
}
});
$input.on('blur', function() {
if (row.value && row.value.match(/^[QP]\d+$/i)) {
loadItemLabels([row.value]).then(labels => {
let label = labels[row.value] || row.value;
if (label && label !== row.value) {
$input.val(`${label} (${row.value})`);
} else {
$input.val(row.value);
}
});
}
});
$input.on('input', function() {
let query = $input.val().trim();
if (/^[qQpP]\d+$/.test(query)) {
let id = query.toUpperCase();
row.value = id;
loadItemLabels([id]).then(labels => {
if (labels[id]) {
setSelectedItemUI(id, labels[id]);
} else {
setSelectedItemUI(id, id);
}
});
} else if (!query) {
row.value = '';
}
liveUpdateValidation();
clearTimeout(searchTimeout);
if (query.length < 2) {
showSoftselectOptions();
return;
}
searchTimeout = setTimeout(function() {
searchWikidataItems(query).then(results => {
$dropdown.empty();
if (results.length === 0) {
$dropdown.hide();
return;
}
results.forEach(res => {
let $r = $('<li>').addClass('cradle-autocomplete-row').css({'padding': '6px 8px', 'cursor': 'pointer'});
let $lbl = $('<div>').addClass('cradle-autocomplete-row-label').text(res.label || res.id);
$lbl.append($('<small>').css({'color': 'var(--color-subtle, #54595d)', 'margin-left': '6px'}).text(`(${res.id})`));
$r.append($lbl);
if (res.description) {
$r.append($('<div>').addClass('cradle-autocomplete-row-desc').css({'font-size': '0.75rem', 'color': 'var(--color-subtle, #54595d)'}).text(res.description));
}
$r.on('click mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
setSelectedItemUI(res.id, res.label || res.id);
$dropdown.hide();
liveUpdateValidation();
});
$dropdown.append($r);
});
$dropdown.show();
});
}, 300);
});
$(document).on('click.cradleItemAutocomplete', function(e) {
if (!$wrapper.is(e.target) && $wrapper.has(e.target).length === 0) {
$dropdown.hide();
}
});
return $wrapper;
}
// 2. commonsMedia datatype (e.g. P18 image, P154 logo, P94 coat of arms)
if (row.datatype === 'commonsMedia') {
let $wrapper = $('<div>').addClass('cradle-autocomplete-wrapper').css({'flex': '1'});
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', 'e.g. Example.jpg or search Commons...')
.val(row.value);
let $dropdown = $('<ul>').addClass('cradle-autocomplete-dropdown').hide();
$wrapper.append($input).append($dropdown);
let searchTimeout = null;
$input.on('input', function() {
let query = $input.val().trim();
let cleanQuery = query.replace(/^File:/i, '');
row.value = cleanQuery;
liveUpdateValidation();
clearTimeout(searchTimeout);
if (query.length < 2) {
$dropdown.hide();
return;
}
searchTimeout = setTimeout(function() {
let apiUrl = 'https://commons.wikimedia.org/w/api.php?action=query&generator=search&gsrsearch=' + encodeURIComponent(query) + '&gsrnamespace=6&prop=pageimages|info&piprop=thumbnail&pithumbsize=80&format=json&origin=*';
$.getJSON(apiUrl).done(function(res) {
$dropdown.empty();
let pages = (res && res.query && res.query.pages) ? Object.values(res.query.pages) : [];
if (pages.length === 0) {
$dropdown.hide();
return;
}
pages.sort((a, b) => (a.index || 0) - (b.index || 0));
pages.slice(0, 10).forEach(page => {
let cleanTitle = (page.title || '').replace(/^File:/i, '');
let thumbUrl = page.thumbnail ? page.thumbnail.source : null;
let $row = $('<li>').addClass('cradle-autocomplete-row').css({
'display': 'flex',
'align-items': 'center',
'flex-direction': 'row',
'gap': '10px',
'padding': '6px 8px',
'cursor': 'pointer'
});
let $thumb = $('<div>').css({
'width': '40px',
'height': '40px',
'flex-shrink': '0',
'display': 'flex',
'align-items': 'center',
'justify-content': 'center',
'background': '#f8f9fa',
'border': '1px solid #eaecf0',
'border-radius': '2px'
});
if (thumbUrl) {
$thumb.append($('<img>').attr('src', thumbUrl).css({
'max-width': '40px',
'max-height': '40px',
'object-fit': 'contain'
}));
}
$row.append($thumb);
let $nameSpan = $('<span>').addClass('cradle-autocomplete-row-label').css({
'font-size': '0.825rem',
'word-break': 'break-all',
'flex': '1'
}).text(cleanTitle);
$row.append($nameSpan);
$row.on('click mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
row.value = cleanTitle;
$input.val(cleanTitle);
$dropdown.hide();
liveUpdateValidation();
});
$dropdown.append($row);
});
$dropdown.show();
}).fail(function() {
$dropdown.hide();
});
}, 300);
});
$(document).on('click.cradleCommonsMedia', function(e) {
if (!$(e.target).closest($wrapper).length) {
$dropdown.hide();
}
});
return $wrapper;
}
// 3. quantity datatype
if (row.datatype === 'quantity') {
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'number')
.attr('placeholder', 'Number value')
.val(row.value);
$input.on('input', function() {
row.value = $input.val();
liveUpdateValidation();
});
return $input;
}
// 4. time datatype
if (row.datatype === 'time') {
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', 'YYYY-MM-DD or YYYY')
.val(row.value);
$input.on('input', function() {
row.value = $input.val();
liveUpdateValidation();
});
return $input;
}
// 5. Fallback text input (string, external-id, url, etc.)
let displayVal = row.value;
if (typeof displayVal === 'object' && displayVal !== null) {
if ('latitude' in displayVal && 'longitude' in displayVal) {
displayVal = formatCoordinates(displayVal.latitude, displayVal.longitude);
} else {
displayVal = displayVal.text || displayVal.id || displayVal.time || '';
}
}
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', `Enter value`)
.val(displayVal || '');
$input.on('input', function() {
row.value = $input.val();
liveUpdateValidation();
});
return $input;
}
/**
* Add new blank row to property values list.
*/
function addRow(pid) {
let propDef = schemaProperties[pid] || {};
let meta = propertyMetadata[pid] || {};
let sampleClaim = (isItemPage && entityData && entityData.claims && entityData.claims[pid] && entityData.claims[pid][0]);
let sampleVal = sampleClaim && sampleClaim.mainsnak && sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.value;
let claimDatatype = sampleClaim && sampleClaim.mainsnak && (sampleClaim.mainsnak.datatype || (sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.type));
if (claimDatatype === 'globecoordinate') claimDatatype = 'globe-coordinate';
let dt = claimDatatype || inferDatatype(propDef, meta, pid, sampleVal);
formState[pid].push(createNewRowState(dt));
renderPropertyRows(pid);
liveUpdateValidation();
}
/**
* Toggle delete state on row.
*/
function toggleDeleteRow(pid, rowId) {
let index = formState[pid].findIndex(r => r.id === rowId);
if (index === -1) return;
let row = formState[pid][index];
if (row.guid === null) {
formState[pid].splice(index, 1);
} else {
row.isDeleted = !row.isDeleted;
}
renderPropertyRows(pid);
liveUpdateValidation();
}
/**
* Search wikidata items.
*/
/**
* Search EntitySchemas by label, description, or ID.
*/
function searchEntitySchemas(term) {
logDebug("[Cradle] Searching EntitySchemas in namespace 640 for:", term);
return new Promise((resolve) => {
let api = new mw.Api();
let userLang = mw.config.get('wgUserLanguage') || 'en';
function fetchLabelsForSchemas(schemaIds, rawDescriptionsMap) {
if (!schemaIds || schemaIds.length === 0) return Promise.resolve([]);
schemaIds = [...new Set(schemaIds)].slice(0, 10);
let titlesParam = schemaIds.map(id => 'EntitySchema:' + id).join('|');
return new Promise((resResolve) => {
api.get({
action: 'query',
prop: 'revisions',
titles: titlesParam,
rvslots: 'main',
rvprop: 'content',
format: 'json'
}).done(function(queryRes) {
let finalResults = [];
let pages = (queryRes && queryRes.query && queryRes.query.pages) || {};
let schemaMap = {};
Object.keys(pages).forEach(pageId => {
let p = pages[pageId];
if (p.revisions && p.revisions[0] && p.revisions[0].slots && p.revisions[0].slots.main) {
try {
let raw = p.revisions[0].slots.main['*'];
let parsed = JSON.parse(raw);
if (parsed && parsed.id) {
schemaMap[parsed.id.toUpperCase()] = parsed;
}
} catch(e) {}
}
});
schemaIds.forEach(id => {
let parsed = schemaMap[id];
let label = id;
let desc = rawDescriptionsMap[id] || '';
if (parsed) {
if (parsed.labels) {
label = (typeof parsed.labels[userLang] === 'string' && parsed.labels[userLang]) ||
(typeof parsed.labels['en'] === 'string' && parsed.labels['en']) ||
id;
}
if (parsed.descriptions) {
desc = (typeof parsed.descriptions[userLang] === 'string' && parsed.descriptions[userLang]) ||
(typeof parsed.descriptions['en'] === 'string' && parsed.descriptions['en']) ||
desc;
}
}
finalResults.push({
id: id,
label: label,
description: desc
});
});
resResolve(finalResults);
}).fail(function() {
let fallbackResults = schemaIds.map(id => ({
id: id,
label: id,
description: rawDescriptionsMap[id] || ''
}));
resResolve(fallbackResults);
});
});
}
api.get({
action: 'opensearch',
search: term,
namespace: 640,
limit: 10,
format: 'json'
}).done(function(res) {
let schemaIds = [];
let rawDescs = {};
if (res && res[1] && res[1].length > 0) {
let titles = res[1];
let descriptions = res[2] || [];
for (let i = 0; i < titles.length; i++) {
let title = titles[i];
let match = title.match(/(E\d+)$/i);
let schemaId = match ? match[1].toUpperCase() : title.replace(/^EntitySchema:/i, '').trim();
schemaIds.push(schemaId);
rawDescs[schemaId] = descriptions[i] || '';
}
fetchLabelsForSchemas(schemaIds, rawDescs).then(resolve);
} else {
// Fallback to fulltext search in namespace 640
api.get({
action: 'query',
list: 'search',
srnamespace: 640,
srsearch: term,
srlimit: 10,
format: 'json'
}).done(function(searchRes) {
let searchList = (searchRes && searchRes.query && searchRes.query.search) || [];
let listIds = [];
let listDescs = {};
searchList.forEach(item => {
let match = item.title.match(/(E\d+)$/i);
let schemaId = match ? match[1].toUpperCase() : item.title.replace(/^EntitySchema:/i, '').trim();
let snippetClean = item.snippet ? item.snippet.replace(/<[^>]+>/g, '') : '';
listIds.push(schemaId);
listDescs[schemaId] = snippetClean;
});
fetchLabelsForSchemas(listIds, listDescs).then(resolve);
}).fail(function(err) {
logError("[Cradle] Fulltext search fallback failed:", err);
resolve([]);
});
}
}).fail(function(err) {
logError("[Cradle] EntitySchema opensearch request failed:", err);
resolve([]);
});
});
}
/**
* Attaches autocompletion dropdown for EntitySchema search inputs.
*/
function attachEntitySchemaAutocompleter($wrapper, $input, onLoadCallback) {
$wrapper.css({'position': 'relative'});
let $dropdown = $('<ul>').addClass('cradle-autocomplete-dropdown').hide();
$wrapper.append($dropdown);
let searchTimeout = null;
$input.on('input', function() {
let query = $(this).val().trim();
if (searchTimeout) clearTimeout(searchTimeout);
if (query.length < 2) {
$dropdown.empty().hide();
return;
}
searchTimeout = setTimeout(function() {
searchEntitySchemas(query).then(results => {
$dropdown.empty();
if (results.length === 0) {
$dropdown.hide();
return;
}
results.forEach(res => {
let $row = $('<li>').addClass('cradle-autocomplete-row');
let labelText = (res.label && res.label !== res.id) ? `${res.label} (${res.id})` : res.id;
$row.append($('<span>').addClass('cradle-autocomplete-row-label').text(labelText));
if (res.description) {
$row.append($('<span>').addClass('cradle-autocomplete-row-desc').text(res.description));
}
$row.on('click', function(e) {
e.stopPropagation();
$input.val(`${res.id}`);
$dropdown.hide();
if (typeof onLoadCallback === 'function') {
onLoadCallback(res.id);
}
});
$dropdown.append($row);
});
$dropdown.show();
});
}, 300);
});
$(document).on('click.cradleSchemaAutocomplete', function(e) {
if (!$wrapper.is(e.target) && $wrapper.has(e.target).length === 0) {
$dropdown.hide();
}
});
}
let cachedLanguageList = null;
let commonLanguageNames = {
'en': 'English inglés',
'es': 'Spanish español',
'fr': 'French francés',
'de': 'German alemán',
'it': 'Italian italiano',
'pt': 'Portuguese portugués',
'pt-br': 'Brazilian Portuguese portugués brasileño',
'ru': 'Russian ruso',
'zh': 'Chinese chino',
'zh-hans': 'Simplified Chinese chino simplificado',
'zh-hant': 'Traditional Chinese chino tradicional',
'ja': 'Japanese japonés',
'ko': 'Korean coreano',
'ar': 'Arabic árabe',
'hi': 'Hindi hindi',
'bn': 'Bengali bengalí',
'nl': 'Dutch holandés neerlandés',
'sv': 'Swedish sueco',
'pl': 'Polish polaco',
'uk': 'Ukrainian ucraniano',
'tr': 'Turkish turco',
'vi': 'Vietnamese vietnamita',
'ca': 'Catalan catalán',
'gl': 'Galician gallego',
'eu': 'Basque euskera vasco',
'ast': 'Asturian asturiano',
'qu': 'Quechua quechua',
'ay': 'Aymara aimara',
'gn': 'Guarani guaraní',
'eo': 'Esperanto esperanto',
'la': 'Latin latín',
'grc': 'Ancient Greek griego antiguo',
'el': 'Greek griego',
'he': 'Hebrew hebreo',
'fa': 'Persian persa',
'th': 'Thai tailandés',
'id': 'Indonesian indonesio',
'ms': 'Malay malayo',
'sw': 'Swahili suajili',
'fi': 'Finnish finlandés',
'da': 'Danish danés',
'no': 'Norwegian noruego',
'nb': 'Bokmål noruego bokmål',
'nn': 'Nynorsk noruego nynorsk',
'cs': 'Czech checo',
'hu': 'Hungarian húngaro',
'ro': 'Romanian rumano',
'bg': 'Bulgarian búlgaro',
'sr': 'Serbian serbio',
'hr': 'Croatian croata',
'sk': 'Slovak eslovaco',
'sl': 'Slovenian esloveno',
'et': 'Estonian estonio',
'lv': 'Latvian letón',
'lt': 'Lithuanian lituano'
};
function fetchSupportedLanguages() {
if (cachedLanguageList) {
return Promise.resolve(cachedLanguageList);
}
return new Promise((resolve) => {
let api = new mw.Api();
api.get({
action: 'query',
meta: 'wbcontentlanguages|languageinfo',
wbclcontext: 'monolingualtext',
wbclprop: 'code|name|autonym',
liprop: 'code|name|autonym',
formatversion: 2
}).done(function(res) {
let wbLangs = (res && res.query && res.query.wbcontentlanguages) ? res.query.wbcontentlanguages : {};
let cldrLangs = (res && res.query && res.query.languageinfo) ? res.query.languageinfo : {};
let codes = new Set([...Object.keys(wbLangs), ...Object.keys(cldrLangs)]);
if (codes.size > 0) {
cachedLanguageList = Array.from(codes).map(code => {
let wbObj = wbLangs[code] || {};
let cldrObj = cldrLangs[code] || {};
let autonym = cldrObj.autonym || wbObj.autonym || wbObj.name || code;
let name = cldrObj.name || wbObj.name || autonym;
let extra = commonLanguageNames[code] || '';
let displayName = name || autonym;
return {
code: code,
name: displayName,
searchStr: (code + ' ' + name + ' ' + autonym + ' ' + extra).toLowerCase()
};
});
cachedLanguageList.sort((a, b) => a.code.localeCompare(b.code));
resolve(cachedLanguageList);
return;
}
fallbackLangs();
}).fail(function() {
fallbackLangs();
});
function fallbackLangs() {
api.get({
action: 'query',
meta: 'siteinfo',
siprop: 'languages',
formatversion: 2
}).done(function(res) {
let langs = (res && res.query && res.query.languages) ? res.query.languages : [];
cachedLanguageList = langs.map(l => {
let code = l.code || '';
let autonym = l.name || l['*'] || code;
let extra = commonLanguageNames[code] || '';
return {
code: code,
name: autonym,
searchStr: (code + ' ' + autonym + ' ' + extra).toLowerCase()
};
});
resolve(cachedLanguageList);
}).fail(function() {
cachedLanguageList = Object.keys(commonLanguageNames).map(c => ({
code: c,
name: commonLanguageNames[c].split(' ')[0],
searchStr: (c + ' ' + commonLanguageNames[c]).toLowerCase()
}));
resolve(cachedLanguageList);
});
}
});
}
function setupLanguageAutocomplete($input, onSelect) {
let $wrapper = $('<div>').addClass('cradle-lang-autocomplete-wrapper').css({
'position': 'relative',
'flex': '0 0 110px',
'min-width': '110px',
'display': 'inline-block'
});
$input.css({'width': '100%', 'box-sizing': 'border-box'}).wrap($wrapper);
let $containerWrapper = $input.parent();
let $dropdown = $('<ul>').addClass('cradle-autocomplete-dropdown').css({
'position': 'absolute',
'top': '100%',
'left': '0',
'min-width': '220px',
'max-height': '180px',
'overflow-y': 'auto',
'z-index': '10010',
'background-color': 'var(--background-color-base, #ffffff)',
'border': '1px solid var(--border-color-base, #a2a9b1)',
'border-radius': '2px',
'box-shadow': '0 4px 12px rgba(0,0,0,0.15)',
'margin': '2px 0 0 0',
'padding': '0',
'list-style': 'none'
}).hide();
$containerWrapper.append($dropdown);
function updateDropdown() {
let q = $input.val().trim().toLowerCase();
fetchSupportedLanguages().then(langs => {
let filtered = [];
if (!q) {
filtered = langs.slice(0, 12);
} else {
filtered = langs.filter(l => l.searchStr.includes(q));
filtered.sort((a, b) => {
if (a.code === q) return -1;
if (b.code === q) return 1;
if (a.code.startsWith(q)) return -1;
if (b.code.startsWith(q)) return 1;
return 0;
});
filtered = filtered.slice(0, 15);
}
$dropdown.empty();
if (filtered.length === 0) {
$dropdown.hide();
return;
}
filtered.forEach(item => {
let $li = $('<li>').addClass('cradle-autocomplete-row').css({
'padding': '6px 10px',
'font-size': '0.8rem',
'cursor': 'pointer',
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center'
});
$li.append($('<span>').css({'font-weight': 'bold'}).text(item.name));
$li.append($('<small>').css({'color': 'var(--color-subtle, #54595d)', 'margin-left': '6px'}).text(`(${item.code})`));
$li.on('click mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
$input.val(item.code);
$dropdown.hide();
if (typeof onSelect === 'function') {
onSelect(item.code);
}
});
$dropdown.append($li);
});
$dropdown.show();
});
}
$input.on('focus input', function() {
updateDropdown();
});
$(document).on('click.cradleLangAutocomplete', function(e) {
if (!$wrapper.is(e.target) && $wrapper.has(e.target).length === 0) {
$dropdown.hide();
}
});
}
function searchWikidataItems(term) {
logDebug("[Cradle] Searching Wikidata items for:", term);
return new Promise((resolve) => {
let api = new mw.Api();
api.get({
action: 'wbsearchentities',
search: term,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'item',
format: 'json'
}).done(function(res) {
logDebug("[Cradle] Search results received:", res.search);
resolve(res.search || []);
}).fail(function(err) {
logError("[Cradle] Search API request failed:", err);
resolve([]);
});
});
}
/**
* Saves form changes back to Wikidata (either editing an item or creating a new one).
*/
function saveForm() {
let claimsPayload = {};
let hasChanges = false;
let mandatoryErrors = [];
let creationData = {
labels: {},
descriptions: {},
aliases: {},
claims: claimsPayload
};
if (activeMode === 'create') {
let primaryLabelFound = false;
$('.cradle-identity-lang-row').each(function() {
let langCode = $(this).find('.cradle-lang-input').val().trim() || 'en';
let labelVal = $(this).find('.cradle-label-input').val().trim();
let descVal = $(this).find('.cradle-desc-input').val().trim();
let aliasesVal = $(this).find('.cradle-aliases-input').val().trim();
if (labelVal) {
creationData.labels[langCode] = { language: langCode, value: labelVal };
primaryLabelFound = true;
}
if (descVal) {
creationData.descriptions[langCode] = { language: langCode, value: descVal };
}
if (aliasesVal) {
let aliasList = aliasesVal.split('|').map(a => a.trim()).filter(Boolean);
if (aliasList.length > 0) {
creationData.aliases[langCode] = aliasList.map(a => ({ language: langCode, value: a }));
}
}
});
if (!primaryLabelFound) {
mandatoryErrors.push(mw.msg('cradle-label-required'));
}
}
// Validate mandatory claims & Wikidata constraints
Object.keys(schemaProperties).forEach(pid => {
let propDef = schemaProperties[pid];
let rows = formState[pid];
let meta = propertyMetadata[pid] || { label: pid };
let activeClaimsCount = rows.filter(r => !r.isDeleted && !isEmptyValue(r.value, r.datatype)).length;
if (propDef.mandatory && activeClaimsCount === 0) {
mandatoryErrors.push(mw.msg('cradle-mandatory-error', meta.label, pid));
}
// Also check Wikidata mandatory constraint (P2302 -> Q21503250)
if (meta.constraints && meta.constraints.length > 0) {
meta.constraints.forEach(c => {
if (c.isMandatory && activeClaimsCount === 0 && !propDef.mandatory) {
mandatoryErrors.push(mw.msg('cradle-constraint-mandatory-alert', meta.label, pid));
}
});
}
});
// Build claims payload
Object.keys(formState).forEach(pid => {
let rows = formState[pid];
let original = (activeMode === 'edit' && entityData.claims && entityData.claims[pid]) || [];
let propertyClaims = [];
rows.forEach(row => {
if (row.isDeleted) {
if (row.guid) {
propertyClaims.push({
id: row.guid,
remove: ""
});
hasChanges = true;
}
return;
}
if (isEmptyValue(row.value, row.datatype)) return;
let datavalue = constructDataValue(row.value, row.datatype);
if (!datavalue) return;
if (row.guid) {
// Update claim
let origClaim = original.find(c => c.id === row.guid);
if (origClaim && isValueChanged(origClaim, datavalue)) {
propertyClaims.push({
id: row.guid,
mainsnak: {
snaktype: 'value',
property: pid,
datavalue: datavalue
},
type: 'statement'
});
hasChanges = true;
}
} else {
// Add new claim
propertyClaims.push({
mainsnak: {
snaktype: 'value',
property: pid,
datavalue: datavalue
},
type: 'statement'
});
hasChanges = true;
}
});
if (propertyClaims.length > 0) {
claimsPayload[pid] = propertyClaims;
}
});
if (activeMode === 'edit' && !hasChanges) {
mw.notify(mw.msg('cradle-no-changes'), { type: 'warn' });
closeEditor();
return;
}
// Disable Save button and show spinner
let $saveBtn = $('.cradle-btn-primary').prop('disabled', true);
let origHtml = $saveBtn.html();
$saveBtn.html($('<div>').addClass('cradle-spinner'));
let api = new mw.Api();
let queryParams = {
action: 'wbeditentity'
};
if (activeMode === 'edit') {
queryParams.id = entityId;
queryParams.data = JSON.stringify({ claims: claimsPayload });
queryParams.summary = mw.msg('cradle-edit-summary', activeSchema ? activeSchema.id : 'Custom');
} else {
queryParams.new = 'item';
queryParams.data = JSON.stringify(creationData);
queryParams.summary = mw.msg('cradle-create-summary', activeTemplate ? activeTemplate.title : (activeSchema ? activeSchema.id : 'Custom'));
}
api.postWithEditToken(queryParams).then(res => {
if (activeMode === 'edit') {
mw.notify(mw.msg('cradle-save-success'), { type: 'success' });
setTimeout(() => {
location.reload();
}, 1000);
} else {
let newQid = res.entity.id;
mw.notify(mw.msg('cradle-create-success', newQid), { type: 'success' });
setTimeout(() => {
location.href = mw.util.getUrl(newQid);
}, 1200);
}
}).catch((code, err) => {
logError("[Cradle] Save error:", code, err);
let errMsg = err && err.error && err.error.info ? err.error.info : code;
mw.notify(mw.msg('cradle-save-error', errMsg), { type: 'error' });
$saveBtn.prop('disabled', false).html(origHtml);
});
}
/**
* Checks if value is empty depending on data type.
*/
function isEmptyValue(value, datatype) {
if (value === null || value === undefined) return true;
if (datatype === 'globe-coordinate' || datatype === 'globecoordinate' || (typeof value === 'object' && ('latitude' in value || 'longitude' in value))) {
if (typeof value === 'object') {
return value.latitude === '' || value.latitude === null || value.longitude === '' || value.longitude === null;
}
if (typeof value === 'string') {
return !parseCoordinateInput(value);
}
return !value;
}
if (datatype === 'monolingualtext' || (typeof value === 'object' && ('language' in value || 'text' in value))) {
if (typeof value === 'object') {
return !value.text || !String(value.text).trim();
}
return !value;
}
if (typeof value === 'string') {
return value.trim() === '';
}
return false;
}
/**
* Constructs the standard Wikibase API datavalue object.
*/
function constructDataValue(value, datatype) {
if (datatype === 'wikibase-item') {
let qid = typeof value === 'string' ? value.trim().toUpperCase() : (value && value.id ? value.id : '');
if (!qid.startsWith('Q')) return null;
let numId = parseInt(qid.substring(1));
return {
type: 'wikibase-entityid',
value: {
'entity-type': 'item',
'numeric-id': numId,
'id': qid
}
};
}
if (datatype === 'entity-schema') {
let eid = typeof value === 'string' ? value.trim().toUpperCase() : (value && value.id ? value.id : '');
if (!eid || !eid.startsWith('E')) return null;
return {
type: 'wikibase-entityid',
value: {
'entity-type': 'entity-schema',
'id': eid
}
};
}
if (datatype === 'monolingualtext' || (typeof value === 'object' && value !== null && ('language' in value || 'text' in value))) {
let t = (value && typeof value === 'object' && value.text !== undefined) ? String(value.text).trim() : (typeof value === 'string' ? value.trim() : '');
let l = (value && typeof value === 'object' && value.language) ? String(value.language).trim().toLowerCase() : (mw.config.get('wgUserLanguage') || 'en');
if (!t) return null;
return {
type: 'monolingualtext',
value: {
text: t,
language: l
}
};
}
if (datatype === 'globe-coordinate' || datatype === 'globecoordinate' || (typeof value === 'object' && value !== null && ('latitude' in value || 'longitude' in value))) {
let lat = NaN, lon = NaN, prec = 0.0001, globe = 'http://www.wikidata.org/entity/Q2', alt = null;
if (typeof value === 'object' && value !== null) {
lat = parseFloat(value.latitude);
lon = parseFloat(value.longitude);
if (value.precision) prec = parseFloat(value.precision);
if (value.globe) globe = value.globe;
if (value.altitude !== undefined) alt = value.altitude;
} else if (typeof value === 'string') {
let parsed = parseCoordinateInput(value);
if (parsed) {
lat = parsed.latitude;
lon = parsed.longitude;
prec = parsed.precision || 0.0001;
}
}
if (isNaN(lat) || isNaN(lon)) return null;
return {
type: 'globecoordinate',
value: {
latitude: lat,
longitude: lon,
altitude: alt,
precision: prec,
globe: globe
}
};
}
if (datatype === 'string' || datatype === 'external-id' || datatype === 'url' || datatype === 'commonsMedia') {
return {
type: 'string',
value: typeof value === 'string' ? value.trim() : String(value).trim()
};
}
if (datatype === 'quantity') {
let valStr = String(value).trim();
if (valStr && !valStr.startsWith('+') && !valStr.startsWith('-')) {
valStr = '+' + valStr;
}
return {
type: 'quantity',
value: {
amount: valStr,
unit: '1'
}
};
}
if (datatype === 'time') {
return parseNaturalDate(value);
}
return null;
}
/**
* Checks if form input value differs from existing claim value.
*/
function isValueChanged(origClaim, datavalue) {
if (!origClaim.mainsnak || !origClaim.mainsnak.datavalue) return true;
let origVal = origClaim.mainsnak.datavalue.value;
let newVal = datavalue.value;
if (datavalue.type !== origClaim.mainsnak.datavalue.type) return true;
if (datavalue.type === 'wikibase-entityid') {
return origVal.id !== newVal.id;
}
if (datavalue.type === 'string') {
return origVal !== newVal;
}
if (datavalue.type === 'monolingualtext') {
return origVal.text !== newVal.text || origVal.language !== newVal.language;
}
if (datavalue.type === 'globecoordinate') {
let latMatch = Math.abs(parseFloat(origVal.latitude) - parseFloat(newVal.latitude)) < 1e-7;
let lonMatch = Math.abs(parseFloat(origVal.longitude) - parseFloat(newVal.longitude)) < 1e-7;
return !latMatch || !lonMatch;
}
if (datavalue.type === 'quantity') {
return parseFloat(origVal.amount) !== parseFloat(newVal.amount);
}
if (datavalue.type === 'time') {
return origVal.time !== newVal.time;
}
return JSON.stringify(origVal) !== JSON.stringify(newVal);
}
// Load hook
/**
* Reconstruct user schemas from a single User:Name/Cradle page wikitext.
*/
function parseUserCradlePage(wikitext) {
let sections = {};
if (!wikitext) return sections;
let lines = wikitext.split('\n');
let currentHeader = null;
let currentLines = [];
lines.forEach(line => {
let headerMatch = line.match(/^==\s*(.+?)\s*==$/);
if (headerMatch) {
if (currentHeader) {
sections[currentHeader] = currentLines.join('\n');
}
currentHeader = headerMatch[1].trim();
currentLines = [line];
} else {
if (currentHeader) {
currentLines.push(line);
}
}
});
if (currentHeader) {
sections[currentHeader] = currentLines.join('\n');
}
return sections;
}
/**
* Fetch the wikitext sections of User:Name/Cradle page.
*/
function fetchUserSchemas(callback) {
let api = new mw.Api();
let userName = mw.config.get('wgUserName');
if (!userName) {
if (callback) callback({});
return;
}
let pageTitle = 'User:' + userName + '/Cradle';
api.get({
action: 'query',
prop: 'revisions',
titles: pageTitle,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(data) {
let page = data.query.pages[0];
if (page && !page.missing) {
let content = page.revisions[0].slots.main.content;
let sections = parseUserCradlePage(content);
if (callback) callback(sections);
} else {
if (callback) callback({});
}
}).fail(function() {
if (callback) callback({});
});
}
/**
* Delete a schema section from User:Name/Cradle page.
*/
function deleteSchemaFromPage(schemaName) {
let api = new mw.Api();
let userName = mw.config.get('wgUserName');
let pageTitle = 'User:' + userName + '/Cradle';
api.get({
action: 'query',
prop: 'revisions',
titles: pageTitle,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(data) {
let page = data.query.pages[0];
if (!page || page.missing) return;
let content = page.revisions[0].slots.main.content;
let sections = parseUserCradlePage(content);
if (sections[schemaName]) {
delete sections[schemaName];
let newWikitext = Object.values(sections).join('\n\n');
api.postWithToken('csrf', {
action: 'edit',
title: pageTitle,
text: newWikitext,
summary: 'Eliminado esquema de Cradle: ' + schemaName,
formatversion: 2
}).done(function() {
mw.notify(mw.msg('cradle-schema-deleted'));
renderCreateOptionsSelector();
});
}
});
}
/**
* Add or update a schema section on User:Name/Cradle page.
*/
function saveOrUpdateSchema(schemaName, schemaWikitext, callback) {
let api = new mw.Api();
let userName = mw.config.get('wgUserName');
let pageTitle = 'User:' + userName + '/Cradle';
api.get({
action: 'query',
prop: 'revisions',
titles: pageTitle,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(data) {
let page = data.query.pages[0];
let content = "";
if (page && !page.missing) {
content = page.revisions[0].slots.main.content;
}
let sections = parseUserCradlePage(content);
sections[schemaName] = schemaWikitext;
let newWikitext = Object.values(sections).join('\n\n');
api.postWithToken('csrf', {
action: 'edit',
title: pageTitle,
text: newWikitext,
summary: mw.msg('cradle-summary-create-update-schema', schemaName),
formatversion: 2
}).done(function() {
mw.notify(mw.msg('cradle-schema-saved'));
if (callback) callback();
}).fail(function(code, err) {
mw.notify(mw.msg('cradle-save-schema-failed', code), { type: 'error' });
});
});
}
/**
* Search community user schemas having "/Cradle" in user space.
*/
function searchCommunitySchemas(searchQuery, callback) {
let api = new mw.Api();
api.get({
action: 'query',
list: 'search',
srnamespace: 2,
srsearch: 'intitle:"/Cradle" ' + searchQuery,
format: 'json'
}).done(function(data) {
if (!data.query || !data.query.search) {
callback([]);
return;
}
let pending = data.query.search.length;
let results = [];
if (pending === 0) {
callback([]);
return;
}
data.query.search.forEach(page => {
api.get({
action: 'query',
prop: 'revisions',
titles: page.title,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(pageData) {
let p = pageData.query.pages[0];
if (p && !p.missing) {
let content = p.revisions[0].slots.main.content;
let sections = parseUserCradlePage(content);
let author = page.title.split('/Cradle')[0].replace('User:', '');
Object.keys(sections).forEach(schemaName => {
if (schemaName.toLowerCase().includes(searchQuery.toLowerCase()) || searchQuery === '') {
results.push({
title: page.title,
name: schemaName,
author: author
});
}
});
}
pending--;
if (pending === 0) {
callback(results);
}
}).fail(function() {
pending--;
if (pending === 0) {
callback(results);
}
});
});
}).fail(function() {
callback([]);
});
}
/**
* Loads a user schema, parses it, and loads the active template.
*/
function loadAndDisplayUserSchema(fullTitle, schemaName) {
let api = new mw.Api();
api.get({
action: 'query',
prop: 'revisions',
titles: fullTitle,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(data) {
let page = data.query.pages[0];
if (page && !page.missing) {
let content = page.revisions[0].slots.main.content;
let sections = parseUserCradlePage(content);
if (sections[schemaName]) {
let parsed = parseCradleWikitext(sections[schemaName]);
cradleTemplates[schemaName.toLowerCase().replace(/ /g, '_')] = {
title: schemaName,
labels: parsed.labels,
props: parsed.props
};
loadAndDisplayTemplate(schemaName.toLowerCase().replace(/ /g, '_'));
} else {
mw.notify(mw.msg('cradle-schema-not-found'), { type: 'error' });
}
}
});
}
/**
* Normalizes a ShEx shape label while preserving valid identifier characters.
*/
function normalizeShExShapeLabel(rawName, fallback) {
let cleaned = String(rawName || '').replace(/^[@<:]+|[>]+$/g, '').trim();
if (cleaned.includes('#')) {
cleaned = cleaned.split('#').pop().trim();
}
cleaned = cleaned.replace(/[^A-Za-z0-9_:-]/g, '_');
return cleaned || (fallback || 'sub_shape');
}
/**
* Parses an external EntitySchema reference (e.g. 'E10' or 'E10#country') into { schemaId, shapeName }.
*/
function parseExternalSubShapeSpec(externalIdRaw, subShapeNameRaw) {
let rawExt = String(externalIdRaw || '').trim();
let rawName = String(subShapeNameRaw || '').replace(/^[@<:]+|[>]+$/g, '').trim();
let schemaId = '';
let shapeName = '';
let hashMatch = rawExt.match(/^(E?\d+)#(.+)$/i) || rawName.match(/^(E\d+)#(.+)$/i);
if (hashMatch) {
schemaId = hashMatch[1].toUpperCase();
if (!schemaId.startsWith('E')) schemaId = 'E' + schemaId;
shapeName = normalizeShExShapeLabel(hashMatch[2], '');
} else {
if (rawExt) {
let digits = rawExt.replace(/^EntitySchema:/i, '').trim();
if (/^E?\d+$/i.test(digits)) {
schemaId = digits.toUpperCase().startsWith('E') ? digits.toUpperCase() : ('E' + digits);
}
}
if (!schemaId && /^E\d+$/i.test(rawName)) {
schemaId = rawName.toUpperCase();
}
if (rawName && !/^E\d+$/i.test(rawName)) {
shapeName = normalizeShExShapeLabel(rawName, '');
}
}
if (!shapeName) {
shapeName = schemaId || 'external_shape';
}
return { schemaId: schemaId, shapeName: shapeName };
}
/**
* Generates rich Wikidata-standard ShEx (Shape Expression) code for an EntitySchema,
* supporting both internal sub-schemas (<SubShape> EXTRA wdt:P31 { ... }) and
* external schemas via IMPORT <http://www.wikidata.org/wiki/Special:EntitySchemaText/E...>.
*/
function generateShExCode(title, propRows, propertyLabels, targetItem, subShapes, baseSchema) {
let cleanTitle = (title || 'custom_shape').toLowerCase().replace(/[^a-z0-9_]/g, '');
if (!cleanTitle) cleanTitle = 'custom_shape';
let targetQID = (targetItem || '').trim().toUpperCase();
let rawBaseSchema = (baseSchema || '').trim();
let importedSchemaIds = [];
let baseShapeRef = '';
if (rawBaseSchema) {
let baseSpec = parseExternalSubShapeSpec(rawBaseSchema, '');
if (baseSpec.schemaId) {
if (!importedSchemaIds.includes(baseSpec.schemaId)) {
importedSchemaIds.push(baseSpec.schemaId);
}
baseShapeRef = (baseSpec.shapeName && baseSpec.shapeName !== baseSpec.schemaId)
? baseSpec.shapeName
: (baseSpec.schemaId === 'E10' ? 'human' : baseSpec.schemaId);
} else {
baseShapeRef = normalizeShExShapeLabel(rawBaseSchema, '');
}
}
let internalSubShapesMap = {};
let externalSubShapeComments = [];
(propRows || []).forEach(row => {
if (!row) return;
let vType = row.valueType || 'IRI';
if (vType === 'subshape' || (vType && vType.startsWith('@<'))) {
let mode = row.subShapeMode || ((row.subShapeExternalId || /^E\d+(?:#.+)?$/i.test(row.subShapeName || '')) ? 'external' : 'internal');
if (mode === 'external') {
let extSpec = parseExternalSubShapeSpec(row.subShapeExternalId, row.subShapeName);
if (extSpec.schemaId && !importedSchemaIds.includes(extSpec.schemaId)) {
importedSchemaIds.push(extSpec.schemaId);
}
if (extSpec.schemaId && extSpec.shapeName) {
externalSubShapeComments.push(`# externalSubShape: @<${extSpec.shapeName}> from EntitySchema:${extSpec.schemaId}`);
}
} else {
let sName = normalizeShExShapeLabel(row.subShapeName || vType, 'sub_shape');
let qidsStr = row.subShapeQids || row.hardselect || row.softselect || '';
let qids = (Array.isArray(qidsStr) ? qidsStr : String(qidsStr).split(','))
.map(q => (q || '').trim().toUpperCase())
.filter(q => /^Q\d+$/i.test(q));
if (!internalSubShapesMap[sName.toLowerCase()]) {
internalSubShapesMap[sName.toLowerCase()] = { name: sName, qids: qids };
} else if (qids.length > 0) {
qids.forEach(q => {
if (!internalSubShapesMap[sName.toLowerCase()].qids.includes(q)) {
internalSubShapesMap[sName.toLowerCase()].qids.push(q);
}
});
}
}
}
});
let lines = [];
if (targetQID && /^Q\d+$/i.test(targetQID)) {
lines.push(`# targetItem: ${targetQID}`);
lines.push(`# Associated Item / Target Class: ${targetQID}`);
}
if (importedSchemaIds.length > 0) {
lines.push(`# Base / Imported External Schemas: ${importedSchemaIds.map(id => 'EntitySchema:' + id).join(', ')}`);
}
externalSubShapeComments.forEach(c => {
if (!lines.includes(c)) lines.push(c);
});
lines.push(`# Schema: ${title || cleanTitle}`);
lines.push(`# Generated with Cradle Schema Designer on Wikidata (https://www.wikidata.org/wiki/Wikidata:Cradle-gadget)`);
importedSchemaIds.forEach(schemaNum => {
lines.push(`IMPORT <http://www.wikidata.org/wiki/Special:EntitySchemaText/${schemaNum}>`);
});
lines.push(``);
lines.push(`PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>`);
lines.push(`PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>`);
lines.push(`PREFIX wd: <http://www.wikidata.org/entity/>`);
lines.push(`PREFIX wdt: <http://www.wikidata.org/prop/direct/>`);
lines.push(`PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>`);
lines.push(`PREFIX geo: <http://www.opengis.net/ont/geosparql#>`);
lines.push(``);
lines.push(`start = @<${cleanTitle}>`);
lines.push(``);
let headerModifier = baseShapeRef ? ` @<${baseShapeRef}> AND EXTRA wdt:P31` : ` EXTRA wdt:P31`;
lines.push(`<${cleanTitle}>${headerModifier} {`);
let propMap = propertyLabels || propertyMetadata || {};
let orGroups = {};
(propRows || []).forEach((row) => {
let pid = row.pid;
let meta = propMap[pid] || {};
let label = (meta && meta.label) ? meta.label : (typeof meta === 'string' ? meta : pid);
let valueExpr = '.';
let valueType = row.valueType || 'IRI';
if (valueType === 'xsd:string') valueExpr = 'xsd:string';
else if (valueType === 'rdf:langString') valueExpr = 'rdf:langString';
else if (valueType === 'xsd:dateTime') valueExpr = 'xsd:dateTime';
else if (valueType === 'xsd:decimal') valueExpr = 'xsd:decimal';
else if (valueType === 'geo:wktLiteral') valueExpr = 'geo:wktLiteral';
else if (valueType && valueType.startsWith('@<')) valueExpr = valueType;
else if (valueType === 'subshape') {
let mode = row.subShapeMode || ((row.subShapeExternalId || /^E\d+(?:#.+)?$/i.test(row.subShapeName || '')) ? 'external' : 'internal');
if (mode === 'external') {
let extSpec = parseExternalSubShapeSpec(row.subShapeExternalId, row.subShapeName);
valueExpr = `@<${extSpec.shapeName}>`;
} else {
let sName = normalizeShExShapeLabel(row.subShapeName, 'sub_shape');
valueExpr = `@<${sName}>`;
}
} else {
let options = [];
let qidsStr = row.hardselect || row.softselect || '';
if (qidsStr) {
let qids = (Array.isArray(qidsStr) ? qidsStr : String(qidsStr).split(',')).map(q => (q || '').trim()).filter(q => /^Q\d+$/i.test(q));
if (qids.length > 0) {
options = qids.map(q => `wd:${q.toUpperCase()}`);
}
}
valueExpr = options.length > 0 ? `[${options.join(' ')}]` : (valueType === 'IRI' ? 'IRI' : '.');
}
let cardSymbol = ';';
if (row.cardinality === '+') cardSymbol = '+ ;';
else if (row.cardinality === '*') cardSymbol = '* ;';
else if (row.cardinality === '?') cardSymbol = '? ;';
else if (row.cardinality === '1') cardSymbol = ';';
else if (row.mandatory) cardSymbol = row.allowMultiple ? '+ ;' : ';';
else cardSymbol = row.allowMultiple ? '* ;' : '? ;';
let comment = label ? ` # ${label}` : '';
if (row.orGroup) {
let gName = row.orGroup.trim();
if (!orGroups[gName]) orGroups[gName] = [];
orGroups[gName].push(` wdt:${pid} ${valueExpr}${comment}`);
} else {
lines.push(` wdt:${pid} ${valueExpr} ${cardSymbol}${comment}`);
}
});
Object.keys(orGroups).forEach(groupName => {
lines.push(` # Grupo alternativo (OR): ${groupName}`);
lines.push(` (`);
let items = orGroups[groupName];
items.forEach((item, idx) => {
let isLast = (idx === items.length - 1);
lines.push(` ${item}${isLast ? '' : ' |'}`);
});
lines.push(` ) ;`);
});
lines.push(` rdfs:label rdf:langString+;`);
lines.push(`}`);
let emittedSubShapes = new Set([cleanTitle.toLowerCase()]);
if (subShapes && Array.isArray(subShapes) && subShapes.length > 0) {
subShapes.forEach(sub => {
let subName = normalizeShExShapeLabel(sub.name, 'sub_shape');
emittedSubShapes.add(subName.toLowerCase());
lines.push(``);
lines.push(`<${subName}> EXTRA wdt:P31 {`);
if (sub.props && Array.isArray(sub.props) && sub.props.length > 0) {
sub.props.forEach(sp => {
let sPid = sp.pid;
let sMeta = propMap[sPid] || {};
let sLabel = (sMeta && sMeta.label) ? sMeta.label : (typeof sMeta === 'string' ? sMeta : sPid);
let sValExpr = sp.valueType || 'IRI';
let sCard = sp.cardinality || ';';
lines.push(` wdt:${sPid} ${sValExpr} ${sCard} # ${sLabel}`);
});
} else if (sub.qids && sub.qids.length > 0) {
lines.push(` wdt:P31 [ ${sub.qids.map(q => 'wd:' + q.toUpperCase()).join(' ')} ] + ;`);
} else {
lines.push(` wdt:P31 IRI + ;`);
}
lines.push(`}`);
});
}
Object.keys(internalSubShapesMap).forEach(k => {
if (emittedSubShapes.has(k)) return;
let subInfo = internalSubShapesMap[k];
emittedSubShapes.add(k);
lines.push(``);
lines.push(`<${subInfo.name}> EXTRA wdt:P31 {`);
if (subInfo.qids && subInfo.qids.length > 0) {
lines.push(` wdt:P31 [ ${subInfo.qids.map(q => 'wd:' + q.toUpperCase()).join(' ')} ] + ;`);
} else {
lines.push(` wdt:P31 IRI + ;`);
}
lines.push(`}`);
});
return lines.join('\n');
}
/**
* Validates ShEx (Shape Expression) syntax and returns { valid: boolean, errors: Array<string> }.
*/
function validateShExSyntax(shexText) {
let errors = [];
if (!shexText || !shexText.trim()) {
return { valid: false, errors: ['ShEx code is empty.'] };
}
let cleaned = stripShExComments(shexText);
let lines = shexText.split('\n');
// 1. Check balanced brackets, braces, and angle brackets
let openBraces = (cleaned.match(/\{/g) || []).length;
let closeBraces = (cleaned.match(/\}/g) || []).length;
if (openBraces !== closeBraces) {
errors.push(`Unbalanced braces: found ${openBraces} '{' and ${closeBraces} '}'.`);
}
let openBrackets = (cleaned.match(/\[/g) || []).length;
let closeBrackets = (cleaned.match(/\]/g) || []).length;
if (openBrackets !== closeBrackets) {
errors.push(`Unbalanced brackets: found ${openBrackets} '[' and ${closeBrackets} ']'.`);
}
let openAngles = (cleaned.match(/</g) || []).length;
let closeAngles = (cleaned.match(/>/g) || []).length;
if (openAngles !== closeAngles) {
errors.push(`Unbalanced angle brackets: found ${openAngles} '<' and ${closeAngles} '>'.`);
}
// 2. Check for misplaced AND after EXTRA (invalid ShExC order)
if (/\bEXTRA\s+[^\{]*\bAND\s+@/i.test(cleaned)) {
errors.push("Invalid ShExC header order: '@<BaseShape> AND' must appear before 'EXTRA wdt:P31 {', not after EXTRA.");
}
// 3. Check start shape declaration vs shape definitions and sub-shape references
let discovered = discoverShapesInShEx(cleaned, null);
let hasImports = extractImportIdsFromShEx(shexText).length > 0 || /\bIMPORT\s+<[^>]+>/i.test(cleaned);
let startMatch = cleaned.match(/start\s*=\s*@<\s*(.+?)\s*>/i);
if (startMatch) {
let startShapeName = startMatch[1].trim();
if (!discovered.shapesMap[startShapeName.toLowerCase()] && !hasImports) {
errors.push(`Declaration 'start = @<${startShapeName}>' does not match any defined shape '<${startShapeName}> {'.`);
}
} else if (discovered.shapes.length === 0) {
errors.push("No valid shape definition found like '<ShapeName> { ... }'.");
}
// Check that internal @<SubShape> references resolve to a defined shape or an IMPORT directive
discovered.shapes.forEach(s => {
let refRegex = /@<\s*([^>]+)\s*>/g;
let rm;
while ((rm = refRegex.exec(s.content)) !== null) {
let refName = (rm[1] || '').trim();
if (refName && !discovered.shapesMap[refName.toLowerCase()] && !hasImports) {
errors.push(`Referenced sub-schema '@<${refName}>' in '<${s.name}>' is not defined in this schema and no IMPORT directive is present.`);
}
}
});
// 4. Line-by-line checks for property syntax
let inShape = false;
lines.forEach((line, idx) => {
let cleanLine = line.replace(/#.*/, '').trim();
if (!cleanLine) return;
if (cleanLine.includes('{')) inShape = true;
if (cleanLine.includes('}')) inShape = false;
if (inShape && !cleanLine.startsWith('{') && !cleanLine.startsWith('}')) {
if (cleanLine.includes(':')) {
let propMatch = cleanLine.match(/(?:wdt|p|ps|pxt):([A-Za-z0-9_]+)/);
if (propMatch) {
let pid = propMatch[1];
if (!/^P\d+$/i.test(pid)) {
errors.push(`Line ${idx + 1}: Invalid property ID '${pid}' (must be format P123).`);
}
}
let bracketMatch = cleanLine.match(/\[\s*([^\]]+)\s*\]/);
if (bracketMatch) {
let items = bracketMatch[1].split(/\s+/).filter(Boolean);
items.forEach(item => {
if (item.startsWith('wd:')) {
let qid = item.substring(3);
if (!/^Q\d+$/i.test(qid)) {
errors.push(`Line ${idx + 1}: Invalid QID '${item}' (must be format wd:Q123).`);
}
}
});
}
}
}
});
return {
valid: errors.length === 0,
errors: errors
};
}
/**
* Publishes a new EntitySchema to Wikidata by submitting the Special:NewEntitySchema form directly.
*/
function publishEntitySchemaToWikidata(title, desc, aliasesStr, shexText) {
const ENTITY_SCHEMA_ID_PATTERN = /EntitySchema:(E\d+)/;
const TOKEN_FIELD_PATTERN = /(?:token|wpEditToken)$/i;
const userLang = String(
mw.config.get('wgUserLanguage') ||
mw.config.get('wgContentLanguage') ||
'en'
).trim();
const cleanTitle = String(title || '').trim();
if (!cleanTitle) {
return Promise.reject(new Error(mw.msg('cradle-schema-title-required')));
}
let aliasesFormatted = '';
if (aliasesStr) {
aliasesFormatted = Array.isArray(aliasesStr)
? aliasesStr.map(a => String(a).trim()).filter(Boolean).join('|')
: String(aliasesStr).trim();
}
return mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function() {
return new mw.Api().getToken('csrf');
}).then(function(csrfToken) {
return fetch(mw.util.getUrl('Special:NewEntitySchema'), {
credentials: 'same-origin'
}).then(function(response) {
if (!response.ok) {
throw new Error(mw.msg('cradle-schema-load-form-failed') || 'Could not load Special:NewEntitySchema');
}
return response.text();
}).then(function(html) {
const doc = new DOMParser().parseFromString(html, 'text/html');
const submitButton = doc.querySelector('#entityschema-newschema-submit');
const form = submitButton ? submitButton.closest('form') : doc.querySelector('form');
if (!form) {
throw new Error(mw.msg('cradle-schema-form-not-found') || 'Special:NewEntitySchema form was not found. Check that your account can create pages.');
}
const actionUrl = new URL(form.getAttribute('action') || window.location.href, window.location.origin);
const formData = new URLSearchParams();
Array.prototype.forEach.call(form.querySelectorAll('input[type="hidden"]'), function(input) {
const name = input.getAttribute('name');
if (name) {
formData.set(name, input.value || '');
}
});
Array.prototype.forEach.call(Array.from(formData.keys()), function(name) {
if (TOKEN_FIELD_PATTERN.test(name)) {
formData.set(name, csrfToken);
}
});
if (!Array.from(formData.keys()).some(name => TOKEN_FIELD_PATTERN.test(name))) {
formData.set('wpEditToken', csrfToken);
}
formData.set('label', cleanTitle);
formData.set('description', String(desc || '').trim());
formData.set('aliases', aliasesFormatted);
formData.set('schema-text', String(shexText || ''));
formData.set('languagecode', userLang);
formData.set('submit', '1');
return fetch(actionUrl.href, {
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: formData.toString()
});
}).then(function(postResponse) {
return postResponse.text().then(function(postHtml) {
return {
url: postResponse.url,
html: postHtml
};
});
}).then(function(result) {
const responseDoc = new DOMParser().parseFromString(result.html, 'text/html');
let match = ENTITY_SCHEMA_ID_PATTERN.exec(decodeURIComponent(result.url || ''));
let schemaId = match ? match[1] : null;
if (!schemaId) {
const link = responseDoc.querySelector('a[href*="EntitySchema:E"], a[title^="EntitySchema:E"]');
if (link) {
match = ENTITY_SCHEMA_ID_PATTERN.exec(
decodeURIComponent(link.getAttribute('href') || link.getAttribute('title') || '')
);
if (match) {
schemaId = match[1];
}
}
}
if (!schemaId) {
const errorNodes = responseDoc.querySelectorAll(
'.permissions-errors, .error, .warning, .cdx-message--error, .oo-ui-messageWidget-error, .mw-htmlform-ooui .oo-ui-fieldLayout-messages'
);
const errorTexts = [];
Array.prototype.forEach.call(errorNodes, function(node) {
const t = node.textContent.trim().replace(/\s+/g, ' ');
if (t && errorTexts.indexOf(t) === -1) {
errorTexts.push(t);
}
});
const errDetail = errorTexts.join(' ');
throw new Error(errDetail || mw.msg('cradle-publish-shex-failed', 'Unknown error') || 'EntitySchema creation failed.');
}
return new mw.Api().get({
action: 'query',
titles: 'EntitySchema:' + schemaId,
prop: 'info',
formatversion: 2
}).then(function(verifyData) {
const pages = verifyData.query && verifyData.query.pages || [];
if (!pages[0] || pages[0].missing) {
throw new Error('Created EntitySchema could not be verified on Wikidata.');
}
return schemaId;
});
});
});
}
/**
* Updates an existing EntitySchema on Wikidata by submitting the action=edit form.
*/
function saveEntitySchemaToWikidata(schemaId, shexText, summary) {
let cleanId = (schemaId || '').trim().toUpperCase();
if (!cleanId.startsWith('E')) {
cleanId = 'E' + cleanId.replace(/\D/g, '');
}
let pageTitle = 'EntitySchema:' + cleanId;
let editUrl = mw.util.getUrl(pageTitle, { action: 'edit' });
let finalSummary = (summary && summary.trim()) ? summary.trim() : (mw.msg('cradle-default-edit-summary') || 'Update EntitySchema via Cradle');
return mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function() {
return new mw.Api().getToken('csrf');
}).then(function(csrfToken) {
return fetch(editUrl, {
credentials: 'same-origin'
}).then(function(response) {
if (!response.ok) {
throw new Error('Failed to load edit form for ' + pageTitle);
}
return response.text();
}).then(function(html) {
let doc = new DOMParser().parseFromString(html, 'text/html');
let form = doc.querySelector('form.mw-htmlform') || doc.querySelector('form[action*="action=edit"]');
if (!form) {
throw new Error('Edit form not found for ' + pageTitle);
}
let actionUrl = new URL(form.getAttribute('action') || editUrl, window.location.origin);
let formData = new URLSearchParams();
// Extract all hidden inputs (including wpbase-rev, title, etc.)
let hiddenInputs = form.querySelectorAll('input[type="hidden"]');
for (let i = 0; i < hiddenInputs.length; i++) {
let name = hiddenInputs[i].getAttribute('name');
if (name) {
formData.set(name, hiddenInputs[i].value || '');
}
}
// Ensure CSRF token is properly set
formData.set('wpEditToken', csrfToken);
// Set ShEx content and clean edit summary (NO CodeEditor)
formData.set('wpschema-text', String(shexText || ''));
formData.set('wpedit-summary', finalSummary);
formData.set('wpSave', 'Publish changes');
return fetch(actionUrl.href, {
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: formData.toString()
});
}).then(function(postResponse) {
return postResponse.text().then(function(postHtml) {
return {
url: postResponse.url,
html: postHtml
};
});
}).then(function(result) {
let responseDoc = new DOMParser().parseFromString(result.html, 'text/html');
let errorNodes = responseDoc.querySelectorAll(
'.permissions-errors, .error, .warning, .cdx-message--error, .oo-ui-messageWidget-error, .mw-htmlform-ooui .oo-ui-fieldLayout-messages'
);
let errorTexts = [];
for (let i = 0; i < errorNodes.length; i++) {
let txt = (errorNodes[i].textContent || '').trim();
if (txt && !txt.includes('Creative Commons') && !txt.includes('Terms of Use') && !txt.includes('By clicking')) {
errorTexts.push(txt);
}
}
if (errorTexts.length > 0) {
throw new Error(errorTexts.join(' | '));
}
return cleanId;
});
});
}
/**
* Links an EntitySchema to its target class/item via property P12861 (EntitySchema for this class).
*/
function linkEntitySchemaToItem(targetQID, schemaId) {
let cleanQID = (targetQID || '').trim().toUpperCase();
let cleanEID = (schemaId || '').trim().toUpperCase();
if (!cleanEID.startsWith('E')) {
cleanEID = 'E' + cleanEID.replace(/\D/g, '');
}
if (!/^Q\d+$/i.test(cleanQID) || !/^E\d+$/i.test(cleanEID)) {
return Promise.resolve({ skipped: true });
}
let api = new mw.Api();
return api.get({
action: 'wbgetclaims',
entity: cleanQID,
property: 'P12861',
format: 'json'
}).then(function(res) {
let existingClaims = (res && res.claims && res.claims.P12861) || [];
let alreadyExists = existingClaims.some(function(claim) {
let val = claim.mainsnak && claim.mainsnak.datavalue && claim.mainsnak.datavalue.value;
if (!val) return false;
let id = typeof val === 'string' ? val : val.id;
return id && id.toUpperCase() === cleanEID;
});
if (alreadyExists) {
return { skipped: true, reason: 'already-exists' };
}
let claimPayload = {
mainsnak: {
snaktype: 'value',
property: 'P12861',
datavalue: {
type: 'wikibase-entityid',
value: {
'entity-type': 'entity-schema',
'id': cleanEID
}
}
},
type: 'statement',
rank: 'normal'
};
return api.postWithEditToken({
action: 'wbeditentity',
id: cleanQID,
data: JSON.stringify({
claims: [claimPayload]
}),
summary: mw.msg('cradle-link-p12861-summary', cleanEID) || `Add EntitySchema ${cleanEID} (P12861) via Cradle`
}).then(function(editRes) {
return { success: true, targetQID: cleanQID, schemaId: cleanEID, editRes: editRes };
});
});
}
/**
* Displays a modal overlay to preview ShEx code, copy it, or publish on Wikidata directly.
*/
function openShExExportModal(title, propRows, labelsMap, targetItem, baseSchema, desc, aliases) {
let shexText = generateShExCode(title, propRows, labelsMap, targetItem, null, baseSchema);
let $overlay = $('<div>').addClass('cradle-modal-overlay').css({
'position': 'fixed',
'top': '0',
'left': '0',
'right': '0',
'bottom': '0',
'background': 'rgba(0,0,0,0.5)',
'z-index': '10000',
'display': 'flex',
'align-items': 'center',
'justify-content': 'center'
});
let $modal = $('<div>').css({
'background': '#fff',
'border-radius': '6px',
'padding': '20px',
'max-width': '550px',
'width': '90%',
'box-shadow': '0 4px 16px rgba(0,0,0,0.3)',
'display': 'flex',
'flex-direction': 'column',
'gap': '12px'
});
$modal.append($('<h3>').css({'margin':'0'}).text(mw.msg('cradle-shex-preview')));
let $statusBox = $('<div>').css({
'padding': '8px 12px',
'border-radius': '4px',
'font-size': '12px',
'font-weight': 'bold'
});
$modal.append($statusBox);
let $textarea = $('<textarea>')
.css({
'width': '100%',
'height': '200px',
'font-family': 'monospace',
'font-size': '12px',
'padding': '8px',
'border': '1px solid #a2a9b1',
'border-radius': '4px',
'box-sizing': 'border-box'
})
.val(shexText);
function copyAllShEx() {
$textarea.select();
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText($textarea.val()).then(function() {
mw.notify(mw.msg('cradle-shex-copied-auto'), { type: 'info' });
});
} else {
document.execCommand('copy');
mw.notify(mw.msg('cradle-shex-copied-auto'), { type: 'info' });
}
}
$textarea.on('click focus', function() {
copyAllShEx();
});
$modal.append($textarea);
let cleanTargetQID = (targetItem || '').trim().toUpperCase();
if (!cleanTargetQID) {
let tMatch = (shexText || '').match(/#\s*(?:targetItem|Associated Item.*?):\s*(Q\d+)/i);
if (tMatch) cleanTargetQID = tMatch[1].toUpperCase();
}
let cleanBase = (baseSchema || '').trim().toUpperCase();
let isDerivation = Boolean(cleanBase) ||
/#\s*(?:baseSchema|Base Schema|Derivation):/i.test(shexText) ||
/IMPORT\s+<[^>]*EntitySchemaText\//i.test(shexText);
let $linkP12861Container = $('<div>').css({'margin': '4px 0'});
let $linkCheckbox = null;
if (cleanTargetQID && /^Q\d+$/i.test(cleanTargetQID)) {
if (!isDerivation) {
$linkCheckbox = $('<input>').attr({
type: 'checkbox',
id: 'cradle-link-p12861-cb',
checked: true
});
let $linkLabel = $('<label>').css({
'font-size': '12px',
'display': 'inline-flex',
'align-items': 'center',
'gap': '6px',
'cursor': 'pointer',
'color': '#202122'
}).append($linkCheckbox).append($('<span>').text(mw.msg('cradle-link-p12861-checkbox', cleanTargetQID)));
$linkP12861Container.append($linkLabel);
} else {
$linkP12861Container.append(
$('<div>').css({'font-size': '11px', 'color': '#54595d', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.html(`<span style="display:inline-flex; width:14px; height:14px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span> <span>${mw.msg('cradle-link-p12861-derivation-skip')}</span>`)
);
}
}
$modal.append($linkP12861Container);
let $btnRow = $('<div>').css({'display': 'flex', 'gap': '8px', 'justify-content': 'flex-end', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $manualLink = $('<a>').attr({
href: mw.util.getUrl('Special:NewEntitySchema'),
target: '_blank'
}).css({
'display': 'inline-flex',
'align-items': 'center',
'gap': '4px',
'font-size': '11px',
'color': '#72777d',
'text-decoration': 'none',
'margin-right': 'auto'
}).html(ICONS.external + ` <span>${mw.msg('cradle-open-newentityschema')}</span>`);
let $copyBtn = $('<button>').addClass('cdx-button')
.text(mw.msg('cradle-copy-shex'))
.on('click', function() {
copyAllShEx();
});
let $publishBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px'})
.html(ICONS.check + ` <span>${mw.msg('cradle-create-entityschema-btn')}</span>`)
.on('click', function() {
let currentShex = $textarea.val();
let validation = validateShExSyntax(currentShex);
if (!validation.valid) {
let proceed = confirm(mw.msg('cradle-shex-invalid') + '\n' + validation.errors.join('\n') + '\n\n' + mw.msg('cradle-confirm-proceed'));
if (!proceed) return;
}
$publishBtn.prop('disabled', true);
$copyBtn.prop('disabled', true);
$statusBox.css({
'background': 'rgba(0, 175, 137, 0.08)',
'border': '1px solid var(--color-progressive, #36c)',
'color': 'var(--color-progressive, #36c)'
}).text(mw.msg('cradle-publishing-shex'));
publishEntitySchemaToWikidata(title, desc, aliases, currentShex)
.then(function(schemaId) {
mw.notify(mw.msg('cradle-publish-shex-success', schemaId), { type: 'success' });
$statusBox.css({
'background': '#e6f9f0',
'border': '1px solid #00af89',
'color': '#00805d'
}).html(`<strong>${mw.msg('cradle-publish-shex-success', `EntitySchema:${schemaId}`)}</strong>: ` +
`<a href="${mw.util.getUrl('EntitySchema:' + schemaId)}" target="_blank" style="color:#00805d; text-decoration:underline;">` +
`${mw.msg('cradle-open-created-schema', schemaId)}</a>`);
$publishBtn.remove();
$copyBtn.prop('disabled', false);
let $viewBtn = $('<a>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.attr({
href: mw.util.getUrl('EntitySchema:' + schemaId),
target: '_blank'
})
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'text-decoration': 'none'})
.html(ICONS.external + ` <span>${mw.msg('cradle-open-created-schema', schemaId)}</span>`);
$btnRow.append($viewBtn);
// Check if we should link P12861 to the target item
let currentDerivation = isDerivation ||
/#\s*(?:baseSchema|Base Schema|Derivation):/i.test(currentShex) ||
/IMPORT\s+<[^>]*EntitySchemaText\//i.test(currentShex);
let shouldLink = !currentDerivation && cleanTargetQID && /^Q\d+$/i.test(cleanTargetQID) &&
(!$linkCheckbox || $linkCheckbox.is(':checked'));
if (shouldLink) {
linkEntitySchemaToItem(cleanTargetQID, schemaId).then(function(linkRes) {
if (linkRes && linkRes.success) {
mw.notify(mw.msg('cradle-schema-linked-p12861-success', schemaId, cleanTargetQID), { type: 'success' });
$statusBox.append(
$('<div>').css({'margin-top': '6px', 'font-size': '12px', 'color': '#00805d', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.html(`<span style="display:inline-flex; width:14px; height:14px; flex-shrink:0; fill:currentColor;">${ICONS.check}</span> <span>${mw.msg('cradle-schema-linked-p12861-notice', cleanTargetQID, schemaId)} (<a href="${mw.util.getUrl(cleanTargetQID)}" target="_blank" style="color:#00805d; text-decoration:underline;">${cleanTargetQID}</a>).</span>`)
);
}
}).catch(function(linkErr) {
logError('[Cradle] Error linking P12861 to ' + cleanTargetQID, linkErr);
let msg = (linkErr && linkErr.error && linkErr.error.info) || (linkErr && linkErr.message) || linkErr;
mw.notify(mw.msg('cradle-schema-linked-p12861-failed', cleanTargetQID, String(msg)), { type: 'warn' });
});
}
})
.catch(function(err) {
$publishBtn.prop('disabled', false);
$copyBtn.prop('disabled', false);
let errMessage = (err && err.message) ? err.message : String(err);
$statusBox.css({
'background': '#fef2f2',
'border': '1px solid #d33',
'color': '#d33'
}).text(mw.msg('cradle-publish-shex-failed', errMessage));
mw.notify(mw.msg('cradle-publish-shex-failed', errMessage), { type: 'error' });
});
});
function updateValidationUI() {
let res = validateShExSyntax($textarea.val());
if (res.valid) {
$statusBox.css({
'background': '#e6f9f0',
'border': '1px solid #00af89',
'color': '#00805d'
}).html(mw.msg('cradle-shex-valid'));
} else {
let $errHtml = $('<div>').append($('<div>').text(mw.msg('cradle-shex-invalid')));
let $ul = $('<ul>').css({'margin': '4px 0 0 16px', 'padding': '0', 'font-weight': 'normal'});
res.errors.forEach(e => $ul.append($('<li>').text(e)));
$errHtml.append($ul);
$statusBox.css({
'background': '#fef2f2',
'border': '1px solid #d33',
'color': '#d33'
}).html($errHtml);
}
}
$textarea.on('input', updateValidationUI);
updateValidationUI();
let $closeBtn = $('<button>').addClass('cdx-button cdx-button--weight-quiet')
.text(mw.msg('cradle-cancel'))
.on('click', function() { $overlay.remove(); });
$btnRow.append($manualLink).append($copyBtn).append($publishBtn).append($closeBtn);
$modal.append($btnRow);
$overlay.append($modal);
$('body').append($overlay);
// Auto-select and copy ShEx code immediately when modal opens
setTimeout(function() {
copyAllShEx();
}, 150);
}
/**
* Displays a modal to import properties from an existing Wikidata Item (QID) and detect its P31 class.
*/
function openPropertyImporterModal(fetchLabelsInBatches, onImportCallback) {
let $overlay = $('<div>').addClass('cradle-modal-overlay').css({
'position': 'fixed', 'top': '0', 'left': '0', 'right': '0', 'bottom': '0',
'background': 'rgba(0,0,0,0.5)', 'z-index': '10000',
'display': 'flex', 'align-items': 'center', 'justify-content': 'center'
});
let $modal = $('<div>').css({
'background': '#fff', 'border-radius': '6px', 'padding': '20px',
'max-width': '520px', 'width': '90%',
'box-shadow': '0 4px 16px rgba(0,0,0,0.3)',
'display': 'flex', 'flex-direction': 'column', 'gap': '12px'
});
let $headRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center'});
$headRow.append($('<h3>').css({'margin': '0', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px'}).html(ICONS.download + ` <span>${mw.msg('cradle-import-from-item')}</span>`));
let $closeBtn = $('<button>').addClass('cradle-btn-secondary').html(ICONS.close).on('click', function() { $overlay.remove(); });
$headRow.append($closeBtn);
$modal.append($headRow);
let $inputGroup = $('<div>').css({'display': 'flex', 'gap': '8px'});
let $input = $('<input>').addClass('cradle-input').attr('placeholder', 'QID (e.g. Q164027, Q483110)').css({'flex': '1'});
let $searchBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive').text(mw.msg('cradle-load-item-btn'));
$inputGroup.append($input).append($searchBtn);
$modal.append($inputGroup);
let $resultArea = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '10px', 'min-height': '60px'});
$modal.append($resultArea);
let fetchedPropPIDs = [];
let p31Candidates = [];
let selectedP31QID = '';
$searchBtn.on('click', function() {
let qid = $input.val().trim().toUpperCase();
if (!qid || !/^Q\d+$/i.test(qid)) {
mw.notify(mw.msg('cradle-val-err-qid', qid), { type: 'error' });
return;
}
$searchBtn.prop('disabled', true).text(mw.msg('cradle-loading-item'));
$resultArea.empty().append($('<div>').css({'color': '#54595d', 'font-size': '13px'}).text(mw.msg('cradle-fetching-wikidata-recoin')));
let api = new mw.Api();
api.get({
action: 'wbgetentities',
ids: qid,
props: 'claims|labels',
languages: mw.config.get('wgUserLanguage') || 'en',
format: 'json'
}).done(function(res) {
$searchBtn.prop('disabled', false).text(mw.msg('cradle-load-item-btn'));
if (!res || !res.entities || !res.entities[qid] || !res.entities[qid].claims) {
$resultArea.html('<div style="color:#d33; font-size:13px;">No claims found in ' + qid + '</div>');
return;
}
let claims = res.entities[qid].claims;
fetchedPropPIDs = sortPropertyIDs(Object.keys(claims));
let p31QIDs = [];
if (claims.P31) {
claims.P31.forEach(c => {
if (c.mainsnak && c.mainsnak.datavalue && c.mainsnak.datavalue.value && c.mainsnak.datavalue.value.id) {
p31QIDs.push(c.mainsnak.datavalue.value.id);
}
});
}
let p106QIDs = [];
if (claims.P106) {
claims.P106.forEach(c => {
if (c.mainsnak && c.mainsnak.datavalue && c.mainsnak.datavalue.value && c.mainsnak.datavalue.value.id) {
p106QIDs.push(c.mainsnak.datavalue.value.id);
}
});
}
let isHumanItem = p31QIDs.includes('Q5');
let targetClassQID = p31QIDs.length > 0 ? p31QIDs[0] : qid;
fetchRecoinData(targetClassQID, function(recoinData) {
let recoinFreqMap = {};
let recoinNumericFreq = {};
if (recoinData && recoinData.Frequenct_properties) {
recoinData.Frequenct_properties.forEach(m => {
let pid = m['Property ID'] || m.property;
let rawFreq = m.Frequency || m.frequency;
if (pid && rawFreq !== undefined) {
let num = parseFloat(rawFreq);
recoinFreqMap[pid] = num.toFixed(1) + '%';
recoinNumericFreq[pid] = num;
}
});
}
let allQIDsToFetch = [...new Set([...fetchedPropPIDs, ...p31QIDs, ...p106QIDs])];
fetchLabelsInBatches(allQIDsToFetch, function(labelsMap, datatypesMap) {
// Exclude external identifier properties (datatype: external-id)
fetchedPropPIDs = fetchedPropPIDs.filter(pid => datatypesMap[pid] !== 'external-id');
$resultArea.empty();
let ent = res.entities[qid];
let userLang = mw.config.get('wgUserLanguage') || 'en';
let itemLabel = (ent.labels && (ent.labels[userLang]?.value || ent.labels['en']?.value)) || labelsMap[qid] || qid;
p31Candidates = p31QIDs.map(id => ({ qid: id, label: labelsMap[id] || id }));
let p106Candidates = p106QIDs.map(id => ({ qid: id, label: labelsMap[id] || id }));
let $info = $('<div>').css({
'background': '#eaf3ff', 'border': '1px solid #36c',
'padding': '8px 12px', 'border-radius': '4px', 'font-size': '13px'
}).html(`<strong>${itemLabel} (${qid})</strong>: ${fetchedPropPIDs.length} properties found.`);
$resultArea.append($info);
// Fetch claims.P12861 (EntitySchema ID) for both p31QIDs and p106QIDs
let schemasMap = {};
let entitiesToCheckSchemas = [...new Set([...p31QIDs, ...p106QIDs])];
let metaFetchDone = function() {
let targetMode = (p106Candidates.length > 0 && isHumanItem) ? 'p106' : 'p31';
let selectedP106QID = p106Candidates.length > 0 ? p106Candidates[0].qid : null;
selectedP31QID = p31Candidates.length > 0 ? p31Candidates[0].qid : qid;
let $duplicateNoticeBox = $('<div>').css({'margin-top': '6px'});
let $importConfirmBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({'display': 'inline-flex', 'align-items': 'center', 'justify-content': 'center', 'gap': '6px', 'flex': '1', 'min-height': '38px', 'box-sizing': 'border-box'})
.html(ICONS.check + ` <span>${mw.msg('cradle-import-from-item')}</span>`);
let $editExistingSchemaBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive')
.css({'display': 'none', 'align-items': 'center', 'justify-content': 'center', 'gap': '6px', 'flex': '1', 'min-height': '38px', 'box-sizing': 'border-box'});
function updateActiveSchemaCheck() {
if (targetMode === 'p106' && selectedP106QID) {
let occSchemaId = schemasMap[selectedP106QID];
let occLabel = labelsMap[selectedP106QID] || selectedP106QID;
if (occSchemaId) {
$duplicateNoticeBox.html(`
<div style="background:#fef2f2; border:1px solid #d33; color:#b32424; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.alert}</span>
<span>${mw.msg('cradle-importer-p106-schema-exists', occSchemaId)} (<strong><a href="/wiki/EntitySchema:${occSchemaId}" target="_blank" style="color:#b32424; text-decoration:underline;">EntitySchema ${occSchemaId}</a></strong>).</span>
</div>
`).show();
$editExistingSchemaBtn.html(ICONS.external + ` <span>Ver EntitySchema ${occSchemaId}</span>`).off('click').on('click', function() {
window.open('/wiki/EntitySchema:' + occSchemaId, '_blank');
}).css('display', 'inline-flex');
$btnRow.css({'justify-content': 'space-between'});
$importConfirmBtn.css({'flex': '1'});
} else {
$duplicateNoticeBox.html(`
<div style="background:#eaf3ff; border:1px solid #36c; color:#102a43; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span>
<span>${mw.msg('cradle-importer-p106-no-schema')} ${isHumanItem ? mw.msg('cradle-base-schema-notice', 'E10') : ''}</span>
</div>
`).show();
$editExistingSchemaBtn.hide();
$btnRow.css({'justify-content': 'center'});
$importConfirmBtn.css({'flex': '0 1 auto'});
}
} else {
let p31SchemaId = schemasMap[selectedP31QID];
if (p31SchemaId) {
$duplicateNoticeBox.html(`
<div style="background:#eaf3ff; border:1px solid #36c; color:#102a43; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span>
<span>${mw.msg('cradle-base-schema-notice', p31SchemaId)} (<strong><a href="/wiki/EntitySchema:${p31SchemaId}" target="_blank" style="color:#36c; text-decoration:underline;">EntitySchema ${p31SchemaId}</a></strong>).</span>
</div>
`).show();
$editExistingSchemaBtn.html(ICONS.external + ` <span>Ver EntitySchema ${p31SchemaId}</span>`).off('click').on('click', function() {
window.open('/wiki/EntitySchema:' + p31SchemaId, '_blank');
}).css('display', 'inline-flex');
$btnRow.css({'justify-content': 'space-between'});
$importConfirmBtn.css({'flex': '1'});
} else {
$duplicateNoticeBox.empty().hide();
$editExistingSchemaBtn.hide();
$btnRow.css({'justify-content': 'center'});
$importConfirmBtn.css({'flex': '0 1 auto'});
}
}
}
// Render Target Mode Selector when P106 is present
let $p106Box = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px'});
let $p31Box = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px'});
if (p106Candidates.length > 0) {
let $modeContainer = $('<div>').css({
'display': 'flex', 'flex-direction': 'column', 'gap': '6px',
'background': '#f8f9fa', 'border': '1px solid #c8ccd1',
'padding': '10px', 'border-radius': '4px'
});
$modeContainer.append($('<div>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-importer-target-mode-label')));
let $modeRow = $('<div>').css({'display': 'flex', 'gap': '16px', 'margin-bottom': '4px'});
let $radP106 = $('<input>').attr({ type: 'radio', name: 'target-choice', id: 'target-mode-p106', checked: (targetMode === 'p106') })
.on('change', function() {
targetMode = 'p106';
$p106Box.show();
$p31Box.hide();
updateActiveSchemaCheck();
});
let $radP31 = $('<input>').attr({ type: 'radio', name: 'target-choice', id: 'target-mode-p31', checked: (targetMode === 'p31') })
.on('change', function() {
targetMode = 'p31';
$p106Box.hide();
$p31Box.show();
updateActiveSchemaCheck();
});
$modeRow.append($('<label>').css({'cursor': 'pointer', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-size': '13px'}).append($radP106).append($('<span>').text(mw.msg('cradle-importer-target-p106'))));
$modeRow.append($('<label>').css({'cursor': 'pointer', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-size': '13px'}).append($radP31).append($('<span>').text(mw.msg('cradle-importer-target-p31'))));
$modeContainer.append($modeRow);
$resultArea.append($modeContainer);
// Setup P106 candidate selection
$p106Box.append($('<div>').css({'font-weight': 'bold', 'font-size': '13px', 'margin-top': '4px'}).text(mw.msg('cradle-importer-select-occupation')));
p106Candidates.forEach((cand, idx) => {
let occSchemaId = schemasMap[cand.qid];
let radId = `p106-cand-${cand.qid}-${idx}`;
let $rad = $('<input>').attr({
type: 'radio', name: 'p106-candidate', id: radId, value: cand.qid, checked: idx === 0
}).on('change', function() {
selectedP106QID = cand.qid;
updateActiveSchemaCheck();
});
let badgeHtml = occSchemaId
? `<span style="background:#fef2f2; color:#b32424; border:1px solid #d33; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; display:inline-flex; align-items:center; gap:4px;"><span style="display:inline-flex; width:14px; height:14px; fill:currentColor;">${ICONS.alert}</span> <strong>${occSchemaId}</strong></span>`
: `<span style="background:#e6f9f0; color:#00805d; border:1px solid #00af89; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; display:inline-flex; align-items:center; gap:4px;"><span style="display:inline-flex; width:14px; height:14px; fill:currentColor;">${ICONS.check}</span> ${mw.msg('cradle-importer-p106-available-badge')}</span>`;
let $lbl = $('<label>').attr('for', radId).css({'font-size': '13px', 'display': 'flex', 'align-items': 'center', 'gap': '6px', 'cursor': 'pointer'})
.append($rad).append($('<span>').html(`<strong>${cand.label}</strong> (${cand.qid}) ${badgeHtml}`));
$p106Box.append($lbl);
});
$resultArea.append($p106Box);
}
// Setup P31 candidate selection
if (p31Candidates.length === 1) {
selectedP31QID = p31Candidates[0].qid;
let schemaId = schemasMap[selectedP31QID];
let badgeHtml = schemaId
? `<span style="background:#eaf3ff; color:#36c; border:1px solid #36c; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; display:inline-flex; align-items:center; gap:4px;"><span style="display:inline-flex; width:14px; height:14px; fill:currentColor;">${ICONS.info}</span> Base: <strong>${schemaId}</strong></span>`
: '';
$p31Box.append($('<div>').css({'font-size': '13px', 'color': '#202122'})
.html(`Class (P31): <strong>${p31Candidates[0].label} (${selectedP31QID})</strong> ${badgeHtml}`));
} else if (p31Candidates.length > 1) {
$p31Box.append($('<div>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-select-p31-class')));
p31Candidates.forEach((cand, idx) => {
let schemaId = schemasMap[cand.qid];
let radId = `p31-cand-${cand.qid}-${idx}`;
let $rad = $('<input>').attr({
type: 'radio', name: 'p31-candidate', id: radId, value: cand.qid, checked: idx === 0
}).on('change', function() {
selectedP31QID = cand.qid;
updateActiveSchemaCheck();
});
let badgeHtml = schemaId
? `<span style="background:#eaf3ff; color:#36c; border:1px solid #36c; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; display:inline-flex; align-items:center; gap:4px;"><span style="display:inline-flex; width:14px; height:14px; fill:currentColor;">${ICONS.info}</span> Base: <strong>${schemaId}</strong></span>`
: '';
let $lbl = $('<label>').attr('for', radId).css({'font-size': '13px', 'display': 'flex', 'align-items': 'center', 'gap': '6px', 'cursor': 'pointer'})
.append($rad).append($('<span>').html(`${cand.label} (${cand.qid}) ${badgeHtml}`));
$p31Box.append($lbl);
});
}
$resultArea.append($p31Box);
if (targetMode === 'p106') {
$p106Box.show();
$p31Box.hide();
} else {
$p106Box.hide();
$p31Box.show();
}
// Checkboxes and sorting controls for properties
let $propSelectorHeader = $('<div>').css({
'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center',
'flex-wrap': 'wrap', 'gap': '8px', 'margin-top': '4px'
});
let $propSelectorTitle = $('<div>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-select-props-to-import'));
$propSelectorHeader.append($propSelectorTitle);
let $sortContainer = $('<div>').css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px'});
let $sortLabel = $('<span>').css({'color': '#54595d'}).text(mw.msg('cradle-importer-sort-label'));
let $sortSelect = $('<select>').addClass('cdx-select').css({
'height': '26px', 'font-size': '11px', 'padding': '0 6px',
'border-radius': '2px', 'border': '1px solid #a2a9b1', 'background': '#fff', 'cursor': 'pointer'
});
$sortSelect.append($('<option>').val('recoin').text(mw.msg('cradle-importer-sort-recoin')));
$sortSelect.append($('<option>').val('pid').text(mw.msg('cradle-importer-sort-pid')));
$sortSelect.append($('<option>').val('alpha').text(mw.msg('cradle-importer-sort-alphabetical')));
let hasRecoinData = Object.keys(recoinNumericFreq).length > 0;
$sortSelect.val(hasRecoinData ? 'recoin' : 'pid');
$sortContainer.append($sortLabel).append($sortSelect);
$propSelectorHeader.append($sortContainer);
$resultArea.append($propSelectorHeader);
let $propListContainer = $('<div>').css({
'display': 'flex', 'flex-direction': 'column', 'gap': '4px',
'max-height': '160px', 'overflow-y': 'auto', 'border': '1px solid #c8ccd1',
'padding': '8px', 'border-radius': '4px', 'background': '#fff'
});
let $selectAllCheckbox = $('<input>').attr({ type: 'checkbox', id: 'cradle-select-all-props', checked: true });
let $selectAllRow = $('<div>').css({'font-weight': 'bold', 'margin-bottom': '4px', 'padding-bottom': '4px', 'border-bottom': '1px solid #eaecf0'})
.append($('<label>').css({'cursor': 'pointer', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px'}).append($selectAllCheckbox).append($('<span>').text(mw.msg('cradle-select-all'))));
$propListContainer.append($selectAllRow);
let propCBs = {};
let propElements = {};
let orderedPropPIDs = fetchedPropPIDs.slice();
fetchedPropPIDs.forEach(pid => {
let propLbl = labelsMap[pid] ? `${labelsMap[pid]} (${pid})` : pid;
let freqBadge = recoinFreqMap[pid]
? `<span style="background:#eaf3ff; color:#36c; border:1px solid #36c; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; font-weight:bold;">${recoinFreqMap[pid]}</span>`
: '';
let $cb = $('<input>').attr({ type: 'checkbox', id: `cb-import-${pid}`, checked: true });
propCBs[pid] = $cb;
let $itemLabel = $('<label>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px', 'cursor': 'pointer'})
.append($cb).append($('<span>').html(`${propLbl} ${freqBadge}`));
propElements[pid] = $itemLabel;
});
function sortAndRenderProperties(sortMode) {
if (sortMode === 'recoin') {
orderedPropPIDs.sort((a, b) => {
let freqA = recoinNumericFreq[a] !== undefined ? recoinNumericFreq[a] : -1;
let freqB = recoinNumericFreq[b] !== undefined ? recoinNumericFreq[b] : -1;
if (freqB !== freqA) return freqB - freqA;
return (parseInt(a.replace(/\D/g, ''), 10) || 0) - (parseInt(b.replace(/\D/g, ''), 10) || 0);
});
} else if (sortMode === 'alpha') {
orderedPropPIDs.sort((a, b) => {
let nameA = (labelsMap[a] || a).toLowerCase();
let nameB = (labelsMap[b] || b).toLowerCase();
return nameA.localeCompare(nameB);
});
} else { // 'pid'
orderedPropPIDs = sortPropertyIDs(orderedPropPIDs);
}
orderedPropPIDs.forEach(pid => {
if (propElements[pid]) {
$propListContainer.append(propElements[pid]);
}
});
}
sortAndRenderProperties($sortSelect.val());
$sortSelect.on('change', function() {
sortAndRenderProperties($(this).val());
});
$selectAllCheckbox.on('change', function() {
let isChecked = $(this).is(':checked');
orderedPropPIDs.forEach(pid => {
if (propCBs[pid]) propCBs[pid].prop('checked', isChecked);
});
});
$resultArea.append($propListContainer);
if (recoinData && recoinData.Frequenct_properties) {
let $recoinCreditFooter = $('<div>').css({'font-size': '11px', 'color': '#54595d', 'margin-top': '8px', 'margin-bottom': '4px', 'text-align': 'center', 'font-style': 'italic'})
.html('Recoin frequency API: <a href="https://www.wikidata.org/wiki/Wikidata:Recoin" target="_blank" style="color:#36c; font-weight:bold; text-decoration:underline;">Recoin</a>');
$resultArea.append($recoinCreditFooter);
}
$resultArea.append($duplicateNoticeBox);
$importConfirmBtn.on('click', function() {
let selectedPIDs = orderedPropPIDs.filter(pid => propCBs[pid] && propCBs[pid].is(':checked'));
if (selectedPIDs.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'warn' });
return;
}
$overlay.remove();
if (onImportCallback) {
let finalTargetQID = (targetMode === 'p106' && selectedP106QID) ? selectedP106QID : selectedP31QID;
let finalBaseSchema = (targetMode === 'p106') ? (isHumanItem ? (schemasMap['Q5'] || 'E10') : '') : (schemasMap[selectedP31QID] || '');
let occupationPreset = (targetMode === 'p106' && selectedP106QID) ? {
pid: 'P106',
qid: selectedP106QID,
label: labelsMap[selectedP106QID] || selectedP106QID
} : null;
onImportCallback(finalTargetQID, selectedPIDs, labelsMap, recoinFreqMap, finalBaseSchema, occupationPreset);
}
});
let $btnRow = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'stretch', 'width': '100%', 'margin-top': '10px'})
.append($importConfirmBtn)
.append($editExistingSchemaBtn);
$resultArea.append($btnRow);
// Trigger initial check
updateActiveSchemaCheck();
};
if (entitiesToCheckSchemas.length > 0) {
let userLang = mw.config.get('wgUserLanguage') || 'en';
let langsToFetch = userLang === 'en' ? 'en' : `${userLang}|en`;
api.get({
action: 'wbgetentities',
ids: entitiesToCheckSchemas.join('|'),
props: 'claims',
languages: langsToFetch,
format: 'json'
}).done(function(checkRes) {
if (checkRes && checkRes.entities) {
entitiesToCheckSchemas.forEach(eId => {
if (checkRes.entities[eId] && checkRes.entities[eId].claims) {
let cMap = checkRes.entities[eId].claims;
if (cMap.P12861 && cMap.P12861.length > 0) {
let sId = parseEntitySchemaID(cMap.P12861[0].mainsnak?.datavalue);
if (sId) schemasMap[eId] = sId;
}
}
});
}
metaFetchDone();
}).fail(function() {
metaFetchDone();
});
} else {
metaFetchDone();
}
});
});
}).fail(function() {
$searchBtn.prop('disabled', false).text(mw.msg('cradle-load-item-btn'));
$resultArea.html('<div style="color:#d33; font-size:13px;">Error connecting to Wikidata</div>');
});
});
$overlay.append($modal);
$('body').append($overlay);
}
/**
* Render the Cradle Schema Designer UI.
*/
function renderSchemaDesigner(editSchemaName, editSchemaData) {
updateNavigationTabs('design');
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
let isEdit = !!editSchemaName;
let titleVal = isEdit ? editSchemaName : '';
let $form = $('<div>').addClass('cradle-selector-box').css({'display': 'flex', 'flex-direction': 'column', 'gap': '12px'});
let $titleInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-schema-title')).val(titleVal);
if (isEdit) {
$titleInput.attr('disabled', 'disabled');
}
let $descInput = $('<input>').addClass('cradle-input').attr({
'id': 'cradle-schema-desc-input',
'placeholder': mw.msg('cradle-schema-desc-placeholder') || 'Descripción del esquema...'
});
let $aliasesInput = $('<input>').addClass('cradle-input').attr({
'id': 'cradle-schema-aliases-input',
'placeholder': mw.msg('cradle-schema-aliases-placeholder') || 'Alias del esquema (separados por plecas |)...'
});
let $targetItemInput = $('<input>').addClass('cradle-input').attr({
'id': 'cradle-schema-target-item-input',
'placeholder': 'Ej: Q483110 (Estadio) o Q5 (Humano)'
});
let $targetNoticeDiv = $('<div>').css({'margin-top': '4px'});
function checkTargetItemDuplicateSchema(qid) {
$targetNoticeDiv.empty();
let cleanQID = (qid || '').trim().toUpperCase();
if (!cleanQID || !/^Q\d+$/i.test(cleanQID)) return;
let schemaNames = Object.keys(customSchemas || {});
let foundCustom = null;
schemaNames.forEach(sName => {
let sData = customSchemas[sName];
if (sData && sData.targetItem && sData.targetItem.toUpperCase() === cleanQID) {
foundCustom = sName;
}
});
if (foundCustom) {
$targetNoticeDiv.html(`
<div style="background:#fff3cd; border:1px solid #ffe8a1; color:#856404; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.alert}</span> <span>${mw.msg('cradle-schema-exists-custom', cleanQID, foundCustom)}</span>
</div>
`);
return;
}
let api = new mw.Api();
let userLang = mw.config.get('wgUserLanguage') || 'en';
let langs = userLang === 'en' ? 'en' : `${userLang}|en`;
// Query entity to check claims.P12861 (EntitySchema ID)
api.get({
action: 'wbgetentities',
ids: cleanQID,
props: 'claims|labels',
languages: langs,
format: 'json'
}).done(function(res) {
if (res && res.entities && res.entities[cleanQID]) {
let ent = res.entities[cleanQID];
let claims = ent.claims || {};
let existingSchemaId = null;
if (claims.P12861 && claims.P12861.length > 0) {
existingSchemaId = parseEntitySchemaID(claims.P12861[0].mainsnak?.datavalue);
}
if (existingSchemaId) {
let itemLabel = (ent.labels && (ent.labels[userLang]?.value || ent.labels['en']?.value)) || cleanQID;
let currentBase = ($('#cradle-schema-base-schema-input').val() || '').trim().toUpperCase();
let cleanExisting = existingSchemaId.toUpperCase();
let isDerivation = (currentBase === cleanExisting || currentBase === ('E' + cleanExisting.replace(/\D/g, '')));
if (isDerivation) {
$targetNoticeDiv.html(`
<div style="background:#eaf3ff; border:1px solid #36c; color:#102a43; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span>
<span>${mw.msg('cradle-base-schema-notice', existingSchemaId)} (<strong><a href="/wiki/EntitySchema:${existingSchemaId}" target="_blank" style="color:#36c; text-decoration:underline;">EntitySchema ${existingSchemaId}</a></strong>).</span>
</div>
`);
} else {
let $dupBox = $('<div>').css({
'background': '#fcf2f2', 'border': '1px solid #d33', 'color': '#b32424',
'padding': '8px 12px', 'border-radius': '4px', 'font-size': '12px',
'display': 'flex', 'align-items': 'center', 'justify-content': 'space-between', 'gap': '8px', 'flex-wrap': 'wrap'
});
let $dupText = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'flex': '1'})
.html(`<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.alert}</span> <span>${mw.msg('cradle-schema-exists-p12861', itemLabel, cleanQID, `<a href="/wiki/EntitySchema:${existingSchemaId}" target="_blank" style="color:#b32424; text-decoration:underline;">EntitySchema ${existingSchemaId}</a>`)}</span>`);
let $useAsBaseBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-quiet').css({'font-size': '11px', 'height': '26px'})
.text(mw.msg('cradle-set-as-base-schema-btn', existingSchemaId))
.on('click', function(e) {
e.preventDefault();
$baseSchemaInput.val(existingSchemaId);
checkTargetItemDuplicateSchema(cleanQID);
});
$dupBox.append($dupText).append($useAsBaseBtn);
$targetNoticeDiv.empty().append($dupBox);
}
return;
}
}
// Fallback: Search Wikidata EntitySchemas via MediaWiki API
api.get({
action: 'wbsearchentities',
search: cleanQID,
type: 'entityschema',
language: userLang,
format: 'json'
}).done(function(resSearch) {
let items = resSearch.search || [];
if (items.length > 0) {
let match = items[0];
let currentBase = ($('#cradle-schema-base-schema-input').val() || '').trim().toUpperCase();
let cleanExisting = match.id.toUpperCase();
let isDerivation = (currentBase === cleanExisting || currentBase === ('E' + cleanExisting.replace(/\D/g, '')));
if (isDerivation) {
$targetNoticeDiv.html(`
<div style="background:#eaf3ff; border:1px solid #36c; color:#102a43; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span>
<span>${mw.msg('cradle-base-schema-notice', match.id)} (<strong><a href="/wiki/EntitySchema:${match.id}" target="_blank" style="color:#36c; text-decoration:underline;">EntitySchema ${match.id}</a></strong>).</span>
</div>
`);
} else {
let $dupBox = $('<div>').css({
'background': '#fff3cd', 'border': '1px solid #ffe8a1', 'color': '#856404',
'padding': '8px 12px', 'border-radius': '4px', 'font-size': '12px',
'display': 'flex', 'align-items': 'center', 'justify-content': 'space-between', 'gap': '8px', 'flex-wrap': 'wrap'
});
let $dupText = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'flex': '1'})
.html(`<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.alert}</span> <span>${mw.msg('cradle-schema-exists-matched', cleanQID, `<a href="/wiki/EntitySchema:${match.id}" target="_blank"><strong>${match.id}</strong></a>`, match.label || '')}</span>`);
let $useAsBaseBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-quiet').css({'font-size': '11px', 'height': '26px'})
.text(mw.msg('cradle-set-as-base-schema-btn', match.id))
.on('click', function(e) {
e.preventDefault();
$baseSchemaInput.val(match.id);
checkTargetItemDuplicateSchema(cleanQID);
});
$dupBox.append($dupText).append($useAsBaseBtn);
$targetNoticeDiv.empty().append($dupBox);
}
}
});
});
}
$targetItemInput.on('change input', function() {
checkTargetItemDuplicateSchema($(this).val());
});
// Header Title Row with Importer button on top right
let $headerTitleRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '4px'});
$headerTitleRow.append($('<h3>').css({'margin': '0'}).text(mw.msg('cradle-schema-designer')));
let $baseSchemaInput = $('<input>').addClass('cradle-input').attr({
type: 'text',
id: 'cradle-schema-base-schema-input',
placeholder: mw.msg('cradle-base-schema-placeholder')
}).on('input change', function() {
checkTargetItemDuplicateSchema($targetItemInput.val());
});
let $openImporterBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-quiet')
.css({'height': '32px', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px'})
.html(ICONS.download + ` <span>${mw.msg('cradle-import-from-item')}</span>`)
.on('click', function(e) {
e.preventDefault();
openPropertyImporterModal(fetchLabelsInBatches, function(importedTargetQID, importedPIDs, modalLabelsMap, recoinFreqMap, importedBaseSchema, occupationPreset) {
if (importedBaseSchema) {
$baseSchemaInput.val(importedBaseSchema);
}
if (importedTargetQID) {
$targetItemInput.val(importedTargetQID);
checkTargetItemDuplicateSchema(importedTargetQID);
}
if (occupationPreset && occupationPreset.label && !$titleInput.val().trim()) {
$titleInput.val(occupationPreset.label);
}
// Clear previous property rows so new import starts fresh
$propsList.empty();
let newPIDs = (importedPIDs || []).slice();
if (occupationPreset && !newPIDs.includes('P106')) {
newPIDs.unshift('P106');
}
if (newPIDs.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'info' });
return;
}
fetchLabelsInBatches(newPIDs, function(freshLabelsMap) {
let mergedMap = Object.assign({}, modalLabelsMap || {}, freshLabelsMap || {});
newPIDs.forEach(pid => {
try {
if (occupationPreset && pid === 'P106') {
renderPropRow(pid, true, '', [occupationPreset.qid], null, mergedMap, recoinFreqMap);
} else {
renderPropRow(pid, false, '', null, null, mergedMap, recoinFreqMap);
}
} catch (err) {
console.error('[Cradle Importer Error]', err);
}
});
mw.notify(`Imported ${newPIDs.length} properties!`, { type: 'success' });
});
});
});
$headerTitleRow.append($openImporterBtn);
$form.append($headerTitleRow);
let $headerFieldsRow = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '10px', 'margin-bottom': '12px'});
// Row 1: Title, Description, Aliases (|) in FULL width flex row
let $row1 = $('<div>').css({'display': 'flex', 'gap': '8px', 'flex-wrap': 'wrap', 'align-items': 'center'});
$row1.append($('<div>').css({'flex': '1', 'min-width': '140px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-schema-title'))).append($titleInput));
$row1.append($('<div>').css({'flex': '1.5', 'min-width': '160px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-schema-desc'))).append($descInput));
$row1.append($('<div>').css({'flex': '1', 'min-width': '130px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-new-item-aliases'))).append($aliasesInput));
// Row 2: Associated Item & Base Schema (Derivation)
let $row2 = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px'});
let $row2Inner = $('<div>').css({'display': 'flex', 'gap': '8px', 'flex-wrap': 'wrap'});
$row2Inner.append($('<div>').css({'flex': '1', 'min-width': '200px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-schema-target-item-label'))).append($targetItemInput));
$row2Inner.append($('<div>').css({'flex': '1', 'min-width': '200px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-base-schema-label'))).append($baseSchemaInput));
$row2.append($row2Inner).append($targetNoticeDiv);
$headerFieldsRow.append($row1).append($row2);
$form.append($headerFieldsRow);
let $propertiesDiv = $('<div>').css({
'display': 'flex',
'flex-direction': 'column',
'gap': '8px',
'border': '1px dashed #c8ccd1',
'padding': '12px',
'border-radius': '4px',
'position': 'relative'
});
$propertiesDiv.append($('<h4>').css({'margin': '0'}).text(mw.msg('cradle-properties-list')));
let $propsList = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '8px'});
$propertiesDiv.append($propsList);
// Helper to batch fetch labels for properties and items (with English fallback)
function fetchLabelsInBatches(ids, callback) {
let labels = {};
let datatypes = {};
ids = ids.filter(id => id);
if (ids.length === 0) {
callback(labels, datatypes);
return;
}
let api = new mw.Api();
let chunks = [];
for (let i = 0; i < ids.length; i += 50) {
chunks.push(ids.slice(i, i + 50));
}
let pending = chunks.length;
let userLang = mw.config.get('wgUserLanguage') || 'en';
let langsToFetch = userLang === 'en' ? 'en' : `${userLang}|en`;
chunks.forEach(chunk => {
let idsStr = Array.isArray(chunk) ? chunk.join('|') : chunk;
api.get({
action: 'wbgetentities',
ids: idsStr,
props: 'labels|datatype',
languages: langsToFetch,
format: 'json'
}).done(function(res) {
if (res && res.entities) {
chunk.forEach(id => {
if (res.entities[id]) {
let lObj = res.entities[id].labels || {};
let lbl = (lObj[userLang] && lObj[userLang].value) || (lObj['en'] && lObj['en'].value);
labels[id] = lbl || id;
if (res.entities[id].datatype) {
datatypes[id] = res.entities[id].datatype;
if (id.startsWith('P')) {
propertyMetadata[id] = propertyMetadata[id] || {};
propertyMetadata[id].label = labels[id];
propertyMetadata[id].datatype = res.entities[id].datatype;
}
}
} else {
labels[id] = id;
}
});
}
pending--;
if (pending === 0) callback(labels, datatypes);
}).fail(function() {
chunk.forEach(id => { labels[id] = id; });
pending--;
if (pending === 0) callback(labels, datatypes);
});
});
}
function renderPropRow(pid, mandatory, defaultValue, hardselectQIDs, softselectQIDs, labelsMap, recoinFreqMap) {
labelsMap = labelsMap || {};
recoinFreqMap = recoinFreqMap || {};
let propLabel = labelsMap[pid] ? ` (${labelsMap[pid]})` : '';
let freqStr = recoinFreqMap[pid] ? recoinFreqMap[pid] : '';
let freqBadge = freqStr ? `<span style="background:#eaf3ff; color:#36c; border:1px solid #36c; padding:2px 6px; border-radius:3px; font-size:11px; margin-left:8px; font-weight:bold;">${freqStr}</span>` : '';
let uniqueRowId = Math.random().toString(36).substring(2, 9);
let $row = $('<div>').addClass('cradle-prop-row-builder').css({
'display': 'flex',
'flex-direction': 'column',
'gap': '8px',
'padding': '10px',
'background': '#f8f9fa',
'border-radius': '4px',
'border': '1px solid #a2a9b1',
'position': 'relative'
});
// Header line
let $headerRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center'});
$headerRow.append($('<strong>').css({'font-size': '14px'}).html(pid + propLabel + ' ' + freqBadge));
let $remove = $('<button>').addClass('cradle-btn-secondary').css({'padding': '2px 6px', 'color': '#d33', 'font-weight': 'bold'}).html(ICONS.close).on('click', function() {
$row.remove();
});
$headerRow.append($remove);
$row.append($headerRow);
// Cardinality, Value Type, and OR Group row
let $optionsRow = $('<div>').css({'display': 'flex', 'gap': '12px', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $cardinalitySelect = $('<select>').addClass('cradle-select').css({
'font-size': '12px',
'height': '28px',
'padding': '2px 6px',
'width': 'auto'
});
$cardinalitySelect.append($('<option>').val('1').text(mw.msg('cradle-cardinality-1')));
$cardinalitySelect.append($('<option>').val('?').text(mw.msg('cradle-cardinality-opt-single')));
$cardinalitySelect.append($('<option>').val('+').text(mw.msg('cradle-cardinality-req-multi')));
$cardinalitySelect.append($('<option>').val('*').text(mw.msg('cradle-cardinality-opt-multi')));
let initialCard = mandatory ? '1' : '?';
$cardinalitySelect.val(initialCard);
let $cardinalityLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '6px',
'font-size': '12px',
'font-weight': 'bold',
'color': '#202122'
}).text(mw.msg('cradle-cardinality-label')).append($cardinalitySelect);
// Value Type / DataType selector
let $valueTypeSelect = $('<select>').addClass('cradle-select').css({
'font-size': '12px',
'height': '28px',
'padding': '2px 6px',
'width': 'auto'
});
$valueTypeSelect.append($('<option>').val('IRI').text(mw.msg('cradle-valtype-qid')));
$valueTypeSelect.append($('<option>').val('xsd:string').text(mw.msg('cradle-valtype-string')));
$valueTypeSelect.append($('<option>').val('rdf:langString').text(mw.msg('cradle-valtype-langstring')));
$valueTypeSelect.append($('<option>').val('xsd:dateTime').text(mw.msg('cradle-valtype-datetime')));
$valueTypeSelect.append($('<option>').val('xsd:decimal').text(mw.msg('cradle-valtype-decimal')));
$valueTypeSelect.append($('<option>').val('geo:wktLiteral').text(mw.msg('cradle-valtype-geo')));
$valueTypeSelect.append($('<option>').val('subshape').text(mw.msg('cradle-valtype-subshape')));
// Auto-detect value type based on property metadata
let propDT = (propertyMetadata[pid] && propertyMetadata[pid].datatype) || '';
if (propDT === 'string' || propDT === 'external-id') $valueTypeSelect.val('xsd:string');
else if (propDT === 'monolingualtext') $valueTypeSelect.val('rdf:langString');
else if (propDT === 'time') $valueTypeSelect.val('xsd:dateTime');
else if (propDT === 'quantity') $valueTypeSelect.val('xsd:decimal');
else if (propDT === 'globe-coordinate') $valueTypeSelect.val('geo:wktLiteral');
else $valueTypeSelect.val('IRI');
let $valueTypeLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '6px',
'font-size': '12px',
'font-weight': 'bold',
'color': '#202122'
}).text(mw.msg('cradle-valtype-label')).append($valueTypeSelect);
// Alternative Group (OR) input
let $orGroupInput = $('<input>').addClass('cradle-input').attr('placeholder', 'e.g. OSM ID').css({
'font-size': '12px',
'height': '28px',
'width': '120px',
'padding': '2px 6px'
});
let $orGroupLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '4px',
'font-size': '12px',
'color': '#54595d'
}).text(mw.msg('cradle-orgroup-label')).append($orGroupInput);
$optionsRow.append($cardinalityLabel).append($valueTypeLabel).append($orGroupLabel);
$row.append($optionsRow);
// SubShape Container (supports both internal @<SubShape> and external IMPORT EntitySchema)
let $subShapeGroup = $('<div>').css({'display': 'none', 'flex-direction': 'column', 'gap': '6px', 'margin-top': '4px', 'padding': '8px', 'background': '#fff', 'border': '1px solid #c8ccd1', 'border-radius': '4px'});
let $subShapeTopRow = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $subShapeModeSelect = $('<select>').addClass('cradle-select').css({'font-size': '12px', 'height': '28px', 'padding': '2px 6px', 'width': 'auto'});
$subShapeModeSelect.append($('<option>').val('internal').text(mw.msg('cradle-subshape-mode-internal')));
$subShapeModeSelect.append($('<option>').val('external').text(mw.msg('cradle-subshape-mode-external')));
let $subShapeModeLabel = $('<label>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-mode-label')).append($subShapeModeSelect);
let $subShapeExternalWrap = $('<div>').css({'display': 'none', 'gap': '6px', 'align-items': 'center'});
let $subShapeExternalInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-subshape-external-id-placeholder')).css({'font-size': '12px', 'height': '28px', 'width': '150px'});
$subShapeExternalWrap.append($('<label>').css({'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-external-id-label'))).append($subShapeExternalInput);
let $subShapeNameWrap = $('<div>').css({'display': 'flex', 'gap': '6px', 'align-items': 'center', 'flex': '1', 'min-width': '200px'});
let $subShapeInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-subshape-name-placeholder')).css({
'font-size': '12px',
'height': '28px',
'flex': '1'
});
$subShapeNameWrap.append($('<label>').css({'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-name-label'))).append($subShapeInput);
let $subShapeClassesHint = $('<div>').css({'font-size': '11px', 'color': '#54595d'}).text(mw.msg('cradle-subshape-classes-hint'));
$subShapeTopRow.append($subShapeModeLabel).append($subShapeExternalWrap).append($subShapeNameWrap);
$subShapeGroup.append($subShapeTopRow).append($subShapeClassesHint);
$row.append($subShapeGroup);
// Selection options layout: Radio buttons for Value type
let isHard = !!hardselectQIDs || (defaultValue && defaultValue.startsWith('Q'));
let isSoft = !isHard && !!softselectQIDs;
let activePreset = 'none';
if (isHard) activePreset = 'hard';
else if (isSoft) activePreset = 'soft';
let $radioGroup = $('<div>').css({'display': 'flex', 'gap': '12px', 'margin-top': '4px'});
let $radioNone = $('<input>').attr({
type: 'radio',
name: `select-type-${uniqueRowId}`,
id: `none-${uniqueRowId}`,
checked: (activePreset === 'none')
});
let $labelNone = $('<label>').attr('for', `none-${uniqueRowId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioNone).append(mw.msg('cradle-preset-none'));
let $radioHard = $('<input>').attr({
type: 'radio',
name: `select-type-${uniqueRowId}`,
id: `hard-${uniqueRowId}`,
checked: (activePreset === 'hard')
});
let $labelHard = $('<label>').attr('for', `hard-${uniqueRowId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioHard).append(mw.msg('cradle-hardselect-label'));
let $radioSoft = $('<input>').attr({
type: 'radio',
name: `select-type-${uniqueRowId}`,
id: `soft-${uniqueRowId}`,
checked: (activePreset === 'soft')
});
let $labelSoft = $('<label>').attr('for', `soft-${uniqueRowId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioSoft).append(mw.msg('cradle-softselect-label'));
$radioGroup.append($labelNone).append($labelHard).append($labelSoft);
$row.append($radioGroup);
// Container for preset value options
let $valuePresetContainer = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px'});
// Chips Container
let $chipsDiv = $('<div>').css({'display': 'flex', 'flex-wrap': 'wrap', 'gap': '6px', 'margin-top': '4px'});
$valuePresetContainer.append($chipsDiv);
// Toggle visibility of QID chips / subShape based on ValueType and SubShape Mode selection
function updateVisibilityBasedOnValueType() {
let vt = $valueTypeSelect.val();
let sMode = $subShapeModeSelect.val();
if (vt === 'IRI') {
$radioGroup.show();
$valuePresetContainer.show();
$subShapeGroup.css('display', 'none');
} else if (vt === 'subshape') {
$radioGroup.hide();
$subShapeGroup.css('display', 'flex');
if (sMode === 'external') {
$subShapeExternalWrap.css('display', 'flex');
$subShapeClassesHint.hide();
$valuePresetContainer.hide();
} else {
$subShapeExternalWrap.css('display', 'none');
$subShapeClassesHint.show();
$valuePresetContainer.show();
if (typeof updateSearchInputVisibility === 'function') updateSearchInputVisibility();
}
} else {
$radioGroup.hide();
$valuePresetContainer.hide();
$subShapeGroup.css('display', 'none');
}
}
$valueTypeSelect.on('change', updateVisibilityBasedOnValueType);
$subShapeModeSelect.on('change', updateVisibilityBasedOnValueType);
updateVisibilityBasedOnValueType();
let selectedItems = []; // List of { qid, label }
var $valSearchGroup = null;
function addChip(qid, label) {
let useHard = $radioHard.is(':checked');
if (selectedItems.some(i => i.qid === qid)) return;
selectedItems.push({ qid: qid, label: label });
let $chip = $('<span>').css({
'display': 'inline-flex',
'align-items': 'center',
'gap': '6px',
'background': '#eaecf0',
'border': '1px solid #c8ccd1',
'border-radius': '3px',
'padding': '3px 8px',
'font-size': '12px'
}).text(`${label} (${qid})`);
let $removeChip = $('<span>').css({
'cursor': 'pointer',
'color': '#72777d',
'font-weight': 'bold',
'margin-left': '4px'
}).html(ICONS.close).on('click', function() {
selectedItems = selectedItems.filter(item => item.qid !== qid);
$chip.remove();
updateSearchInputVisibility();
});
$chip.append($removeChip);
$chipsDiv.append($chip);
updateSearchInputVisibility();
}
// Autocomplete search input group
$valSearchGroup = $('<div>').css({'position': 'relative', 'margin-top': '4px'});
let $valSearchInput = $('<input>').addClass('cradle-input').css({'height': '36px', 'padding': '2px 8px', 'font-size': '13px'})
.attr('placeholder', mw.msg('cradle-search-value-placeholder'));
$valSearchGroup.append($valSearchInput);
let $valAutocompleteMenu = $('<ul>').css({
'position': 'absolute',
'top': '100%',
'left': '0',
'right': '0',
'background': '#fff',
'border': '1px solid #a2a9b1',
'border-radius': '0 0 4px 4px',
'box-shadow': '0 2px 4px rgba(0,0,0,0.15)',
'max-height': '150px',
'overflow-y': 'auto',
'z-index': '1010',
'list-style': 'none',
'margin': '0',
'padding': '0',
'display': 'none'
});
$valSearchGroup.append($valAutocompleteMenu);
$valuePresetContainer.append($valSearchGroup);
$row.append($valuePresetContainer);
// Bind autocomplete searches for select item values
let valDebounce;
$valSearchInput.on('input', function() {
clearTimeout(valDebounce);
let val = $valSearchInput.val().trim();
if (val.length < 2) {
$valAutocompleteMenu.hide().empty();
return;
}
valDebounce = setTimeout(function() {
let api = new mw.Api();
logDebug('[Cradle Designer] Searching value preset:', val);
api.get({
action: 'wbsearchentities',
search: val,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'item',
format: 'json'
}).done(function(res) {
$valAutocompleteMenu.empty();
let items = res.search || [];
if (items.length === 0) {
$valAutocompleteMenu.hide();
return;
}
items.forEach(item => {
let desc = item.description ? ` - ${item.description}` : '';
let $li = $('<li>').css({
'padding': '6px 10px',
'cursor': 'pointer',
'border-bottom': '1px solid #eaecf0',
'font-size': '12px'
})
.html(`<strong>${item.id}</strong>: ${item.label}${desc}`)
.on('click', function() {
addChip(item.id, item.label);
$valSearchInput.val('');
$valAutocompleteMenu.hide().empty();
})
.on('mouseenter', function() { $(this).css('background', '#f8f9fa'); })
.on('mouseleave', function() { $(this).css('background', '#fff'); });
$valAutocompleteMenu.append($li);
});
$valAutocompleteMenu.show();
});
}, 300);
});
function updateSearchInputVisibility() {
if (!$valSearchGroup || !$valSearchGroup.length) return;
if ($valueTypeSelect.val() === 'subshape' && $subShapeModeSelect.val() === 'internal') {
$chipsDiv.show();
$valSearchGroup.show();
return;
}
let activeType = $radioHard.is(':checked') ? 'hard' : ($radioSoft.is(':checked') ? 'soft' : 'none');
if (activeType === 'none') {
$valSearchGroup.hide();
$chipsDiv.hide();
} else {
$chipsDiv.show();
if (activeType === 'hard' && selectedItems.length >= 1) {
$valSearchGroup.hide();
} else {
$valSearchGroup.show();
}
}
}
$radioNone.on('change', updateSearchInputVisibility);
$radioHard.on('change', updateSearchInputVisibility);
$radioSoft.on('change', updateSearchInputVisibility);
// Populate existing values on edit (after $valSearchGroup and updateSearchInputVisibility are initialized)
if (isHard) {
let qids = hardselectQIDs || (defaultValue ? [defaultValue] : []);
qids.forEach(qid => {
if (qid) addChip(qid, labelsMap[qid] || qid);
});
} else if (isSoft) {
softselectQIDs.forEach(qid => {
addChip(qid, labelsMap[qid] || qid);
});
}
updateSearchInputVisibility();
$(document).on('click', function(e) {
if (!$(e.target).closest($valSearchGroup).length) {
$valAutocompleteMenu.hide();
}
});
$row.data('pid', pid);
$row.data('get_data', function() {
let qidString = selectedItems.map(i => i.qid).join(',');
let useHard = $radioHard.is(':checked');
let useSoft = $radioSoft.is(':checked');
let cardVal = $cardinalitySelect.val();
let vType = $valueTypeSelect.val();
let sMode = $subShapeModeSelect.val() || 'internal';
let sExtId = $subShapeExternalInput.val().trim();
let sName = $subShapeInput.val().trim();
let oGroup = $orGroupInput.val().trim();
return {
pid: pid,
cardinality: cardVal,
mandatory: (cardVal === '1' || cardVal === '+'),
allowMultiple: (cardVal === '+' || cardVal === '*'),
valueType: vType,
subShapeMode: sMode,
subShapeExternalId: sExtId,
subShapeName: sName,
subShapeQids: (vType === 'subshape' && sMode === 'internal') ? qidString : '',
orGroup: oGroup,
defaultValue: '',
hardselect: (vType === 'IRI' && useHard && qidString) ? qidString : '',
softselect: (vType === 'IRI' && useSoft && qidString) ? qidString : ((vType === 'subshape' && sMode === 'internal') ? qidString : '')
};
});
$propsList.append($row);
}
// Initialize designer: Gather edit details and load labels in a single batch
let editPIDs = isEdit ? Object.keys(editSchemaData.props) : [];
let qidsToFetch = [];
if (isEdit && editSchemaData.props) {
editPIDs.forEach(pid => {
qidsToFetch.push(pid);
let p = editSchemaData.props[pid];
if (p.defaultValue && p.defaultValue.startsWith('Q')) qidsToFetch.push(p.defaultValue);
if (p.hardselect) qidsToFetch = qidsToFetch.concat(p.hardselect);
if (p.softselect) qidsToFetch = qidsToFetch.concat(p.softselect);
});
}
qidsToFetch = [...new Set(qidsToFetch)].filter(id => /^[QP]\d+$/.test(id));
fetchLabelsInBatches(qidsToFetch, function(labelsMap) {
if (isEdit && editSchemaData.props) {
editPIDs.forEach(pid => {
let p = editSchemaData.props[pid];
let isMandatory = p.mandatory === true || p.mandatory === 1 || p.mandatory === '1';
let defVal = p.defaultValue || '';
let hSel = p.hardselect || null;
let sSel = p.softselect || null;
renderPropRow(pid, isMandatory, defVal, hSel, sSel, labelsMap);
});
}
});
let $addPropGroup = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px', 'margin-top': '8px', 'position': 'relative'});
let $addPropInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-prop-search-placeholder'));
$addPropGroup.append($addPropInput);
let $autocompleteMenu = $('<ul>').css({
'position': 'absolute',
'top': '100%',
'left': '0',
'right': '0',
'background': '#fff',
'border': '1px solid #a2a9b1',
'border-radius': '0 0 4px 4px',
'box-shadow': '0 2px 4px rgba(0,0,0,0.15)',
'max-height': '200px',
'overflow-y': 'auto',
'z-index': '1000',
'list-style': 'none',
'margin': '0',
'padding': '0',
'display': 'none'
});
$addPropGroup.append($autocompleteMenu);
$propertiesDiv.append($addPropGroup);
$form.append($propertiesDiv);
$content.append($form);
let debounceTimer;
$addPropInput.on('input', function() {
clearTimeout(debounceTimer);
let val = $addPropInput.val().trim();
if (val.length < 2) {
$autocompleteMenu.hide().empty();
return;
}
debounceTimer = setTimeout(function() {
let api = new mw.Api();
logDebug('[Cradle Designer] Searching property:', val);
api.get({
action: 'wbsearchentities',
search: val,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'property',
format: 'json'
}).done(function(res) {
$autocompleteMenu.empty();
let items = res.search || [];
if (items.length === 0) {
$autocompleteMenu.hide();
return;
}
items.forEach(item => {
let desc = item.description ? ` - ${item.description}` : '';
let $li = $('<li>').css({
'padding': '8px 12px',
'cursor': 'pointer',
'border-bottom': '1px solid #eaecf0',
'font-size': '13px'
})
.html(`<strong>${item.id}</strong>: ${item.label}${desc}`)
.on('click', function() {
let map = {};
map[item.id] = item.label;
renderPropRow(item.id, false, '', null, null, map);
$addPropInput.val('');
$autocompleteMenu.hide().empty();
})
.on('mouseenter', function() { $(this).css('background', '#f8f9fa'); })
.on('mouseleave', function() { $(this).css('background', '#fff'); });
$autocompleteMenu.append($li);
});
$autocompleteMenu.show();
});
}, 300);
});
$(document).on('click', function(e) {
if (!$(e.target).closest($addPropGroup).length) {
$autocompleteMenu.hide();
}
});
function gatherDesignerProps() {
let propRows = [];
$propsList.children().each(function() {
let rowData = $(this).data('get_data')();
propRows.push(rowData);
});
return propRows;
}
let $footer = $('#cradle-footer-area').empty().css({
'display': 'flex',
'flex-direction': 'row',
'justify-content': 'space-between',
'align-items': 'center',
'gap': '8px',
'padding': '12px 16px'
});
let $cancelBtn = $('<button>').addClass('cradle-btn-secondary').html(ICONS.back + ' <span>' + mw.msg('cradle-back') + '</span>').on('click', function() {
renderCreateOptionsSelector();
});
let $feedbackBtn = $('<button>').attr('type', 'button')
.addClass('cdx-button cdx-button--weight-quiet')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '5px', 'font-size': '12px', 'color': 'var(--color-progressive, #36c)'})
.html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-btn') + '</span>')
.on('click', openFeedbackModal);
let $saveBtn = $('<button>').addClass('cradle-btn-primary').text(mw.msg('cradle-create-entityschema-btn')).on('click', function() {
let name = $titleInput.val().trim() || 'CustomSchema';
let desc = $('#cradle-schema-desc-input').length ? $('#cradle-schema-desc-input').val().trim() : '';
let aliases = $('#cradle-schema-aliases-input').length ? $('#cradle-schema-aliases-input').val().trim() : '';
let targetQID = $targetItemInput.val().trim();
let baseSchema = $('#cradle-schema-base-schema-input').length ? $('#cradle-schema-base-schema-input').val().trim() : '';
let propRows = gatherDesignerProps();
if (propRows.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'error' });
return;
}
let pids = propRows.map(r => r.pid);
fetchLabelsInBatches(pids, function(labelsMap) {
openShExExportModal(name, propRows, labelsMap, targetQID, baseSchema, desc, aliases);
});
});
let $exportShexBtn = $('<button>')
.addClass('cradle-btn-secondary')
.text(mw.msg('cradle-export-shex'))
.on('click', function() {
let name = $titleInput.val().trim() || 'CustomSchema';
let desc = $('#cradle-schema-desc-input').length ? $('#cradle-schema-desc-input').val().trim() : '';
let aliases = $('#cradle-schema-aliases-input').length ? $('#cradle-schema-aliases-input').val().trim() : '';
let targetQID = $targetItemInput.val().trim();
let baseSchema = $('#cradle-schema-base-schema-input').length ? $('#cradle-schema-base-schema-input').val().trim() : '';
let propRows = gatherDesignerProps();
if (propRows.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'error' });
return;
}
let pids = propRows.map(r => r.pid);
fetchLabelsInBatches(pids, function(labelsMap) {
openShExExportModal(name, propRows, labelsMap, targetQID, baseSchema, desc, aliases);
});
});
let $versionBadge = $('<span>').css({
'font-size': '0.75rem',
'font-weight': 'bold',
'color': '#72777d',
'margin-left': '8px'
}).text(`v${CRADLE_VERSION}`);
let $leftGroup = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '8px'}).append($cancelBtn).append($feedbackBtn).append($versionBadge);
let $rightGroup = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'center'}).append($exportShexBtn).append($saveBtn);
$footer.append($leftGroup).append($rightGroup);
}
/**
* Loads an existing EntitySchema for editing (Special:Cradle#edit).
*/
function loadSchemaForEditing(schemaId) {
updateNavigationTabs('edit');
let cleanId = (schemaId || '').trim().toUpperCase();
if (!cleanId.startsWith('E')) {
cleanId = 'E' + cleanId.replace(/\D/g, '');
}
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
$content.append($('<div>').css({'text-align': 'center', 'margin-top': '40px'})
.append($('<div>').addClass('cradle-spinner').css({'border-top-color': 'var(--border-color-progressive, #36c)', 'width': '30px', 'height': '30px'}))
.append($('<p>').text(mw.msg('cradle-loading-schema', cleanId)))
);
fetchSchemaWithImports(cleanId).then(function(schema) {
let parsedProps = parseShEx(schema.schemaText, schema.importedSchemas);
let pids = Object.keys(parsedProps);
let qidsToFetch = [];
pids.forEach(pid => {
let p = parsedProps[pid];
if (p.hardselect && Array.isArray(p.hardselect)) qidsToFetch = qidsToFetch.concat(p.hardselect);
if (p.softselect && Array.isArray(p.softselect)) qidsToFetch = qidsToFetch.concat(p.softselect);
});
qidsToFetch = [...new Set(qidsToFetch)].filter(id => /^Q\d+$/i.test(id));
return Promise.all([
loadPropertiesMetadata(pids),
loadItemLabels(qidsToFetch)
]).then(function(results) {
let metaMap = results[0] || {};
let qidLabelsMap = results[1] || {};
renderSchemaEditor(cleanId, schema, parsedProps, metaMap, qidLabelsMap);
});
}).catch(function(err) {
console.error('[Cradle] Error loading schema for editing:', err);
$content.empty().append($('<div>').addClass('cradle-selector-box').css('border-color', 'var(--color-destructive, #d33)')
.append($('<p>').css({'color': 'var(--color-destructive, #d33)', 'font-weight': 'bold'}).text(mw.msg('cradle-load-schema-error') || 'Error loading schema'))
.append($('<p>').text((err && err.message) ? err.message : String(err)))
.append($('<button>').addClass('cradle-btn-secondary').text(mw.msg('cradle-back')).on('click', renderCreateOptionsSelector))
);
});
}
/**
* Seamlessly merges visual property builder rows into an existing ShEx schema text.
* Preserves:
* - All preambles (custom comments, PREFIX declarations, IMPORT statements, and start shapes)
* - Standalone section comments inside the main shape
* - Non-property statements (e.g. rdfs:label, schema:description)
* - Existing custom inline comments on properties when unchanged
* - All postambles (sub-shapes, auxiliary shapes, closing braces, trailing comments)
*/
function mergeVisualPropsIntoShex(existingCode, propRows, labelsMap, shapeTitle) {
if (!existingCode || !existingCode.trim()) {
return generateShExCode(shapeTitle, propRows, labelsMap, null, null, null);
}
function findMatchingBrace(str, startIdx) {
let depth = 0;
let inComment = false;
for (let i = startIdx; i < str.length; i++) {
let ch = str[i];
if (ch === '\n') {
inComment = false;
continue;
}
if (ch === '#') {
inComment = true;
continue;
}
if (inComment) continue;
if (ch === '{') {
depth++;
} else if (ch === '}') {
depth--;
if (depth === 0) {
return i;
}
}
}
return -1;
}
function findShapeOpenBrace(shexText) {
if (!shexText) return -1;
let startMatch = shexText.match(/start\s*=\s*@<\s*(.+?)\s*>/i) || shexText.match(/start\s*=\s*@?([A-Za-z0-9_:-]+)/i);
let startShapeName = startMatch ? (startMatch[1] || startMatch[2]).replace(/^[<@:]+|[>]+$/g, '').trim() : null;
if (startShapeName) {
let escapedName = startShapeName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
let regex = new RegExp(`(?:<${escapedName}>|:${escapedName}|\\b${escapedName}\\b)[^{]*\\{`, 'i');
let m = regex.exec(shexText);
if (m) {
return shexText.indexOf('{', m.index);
}
}
let genericMatch = shexText.match(/(?:<[A-Za-z0-9_:-]+>|:[A-Za-z0-9_:-]+|\b[A-Za-z0-9_:-]+)\s*(?:EXTRA\s+[^{]+)?\s*\{/i);
if (genericMatch) {
return shexText.indexOf('{', genericMatch.index);
}
return shexText.indexOf('{');
}
let openBraceIdx = findShapeOpenBrace(existingCode);
if (openBraceIdx === -1) {
return generateShExCode(shapeTitle, propRows, labelsMap, null, null, null);
}
let closeBraceIdx = findMatchingBrace(existingCode, openBraceIdx);
if (closeBraceIdx === -1) {
return generateShExCode(shapeTitle, propRows, labelsMap, null, null, null);
}
let preamble = existingCode.substring(0, openBraceIdx + 1);
let shapeBody = existingCode.substring(openBraceIdx + 1, closeBraceIdx);
let postamble = existingCode.substring(closeBraceIdx);
let bodyLines = shapeBody.split('\n');
let existingComments = {};
let preservedStandaloneComments = [];
let preservedNonPropLines = [];
let hasLabelConstraint = false;
let inOrGroup = false;
for (let i = 0; i < bodyLines.length; i++) {
let line = bodyLines[i];
let trimmed = line.trim();
if (trimmed.startsWith('(')) {
inOrGroup = true;
continue;
}
if (inOrGroup) {
if (trimmed.endsWith(')') || trimmed.endsWith(');') || trimmed.endsWith(') ;')) {
inOrGroup = false;
}
continue;
}
let propMatch = line.match(/(?:wdt|p):(P\d+)/i);
let commentMatch = line.match(/#\s*(.+)$/);
if (propMatch && commentMatch) {
existingComments[propMatch[1].toUpperCase()] = commentMatch[1].trim();
}
if (propMatch) {
continue; // Replaced by updated visual rows
}
if (/^\s*#\s*Grupo alternativo/i.test(line)) {
continue; // Regenerated if needed
}
if (/rdfs:label/i.test(line)) {
hasLabelConstraint = true;
preservedNonPropLines.push(line);
continue;
}
if (/schema:|skos:/i.test(line)) {
preservedNonPropLines.push(line);
continue;
}
if (trimmed.startsWith('#') && !trimmed.startsWith('# P') && !/^\s*#\s*wdt:/i.test(trimmed)) {
preservedStandaloneComments.push(line);
}
}
let propLines = [];
let orGroups = {};
let propMap = labelsMap || propertyMetadata || {};
propRows.forEach(row => {
let pid = row.pid;
let meta = propMap[pid] || {};
let label = (meta && meta.label) ? meta.label : (typeof meta === 'string' ? meta : pid);
let commentText = existingComments[pid] || label || pid;
let comment = commentText ? ` # ${commentText}` : '';
let valueExpr = '.';
let valueType = row.valueType || 'IRI';
if (valueType === 'xsd:string') valueExpr = 'xsd:string';
else if (valueType === 'rdf:langString') valueExpr = 'rdf:langString';
else if (valueType === 'xsd:dateTime') valueExpr = 'xsd:dateTime';
else if (valueType === 'xsd:decimal') valueExpr = 'xsd:decimal';
else if (valueType === 'geo:wktLiteral') valueExpr = 'geo:wktLiteral';
else if (valueType && valueType.startsWith('@<')) valueExpr = valueType;
else if (valueType === 'subshape') {
let mode = row.subShapeMode || ((row.subShapeExternalId || /^E\d+(?:#.+)?$/i.test(row.subShapeName || '')) ? 'external' : 'internal');
if (mode === 'external') {
let extSpec = parseExternalSubShapeSpec(row.subShapeExternalId, row.subShapeName);
valueExpr = `@<${extSpec.shapeName}>`;
} else {
let sName = normalizeShExShapeLabel(row.subShapeName, 'sub_shape');
valueExpr = `@<${sName}>`;
}
} else {
let options = [];
let qidsStr = row.hardselect || row.softselect || '';
if (qidsStr) {
let qids = (Array.isArray(qidsStr) ? qidsStr : String(qidsStr).split(',')).map(q => (q || '').trim()).filter(q => /^Q\d+$/i.test(q));
if (qids.length > 0) options = qids.map(q => `wd:${q.toUpperCase()}`);
}
valueExpr = options.length > 0 ? `[ ${options.join(' ')} ]` : (valueType === 'IRI' ? 'IRI' : '.');
}
let cardSymbol = ';';
if (row.cardinality === '+') cardSymbol = '+ ;';
else if (row.cardinality === '*') cardSymbol = '* ;';
else if (row.cardinality === '?') cardSymbol = '? ;';
else if (row.cardinality === '1') cardSymbol = ';';
else if (row.mandatory) cardSymbol = row.allowMultiple ? '+ ;' : ';';
else cardSymbol = row.allowMultiple ? '* ;' : '? ;';
if (row.orGroup) {
let gName = row.orGroup.trim();
if (!orGroups[gName]) orGroups[gName] = [];
orGroups[gName].push(` wdt:${pid} ${valueExpr}${comment}`);
} else {
propLines.push(` wdt:${pid} ${valueExpr} ${cardSymbol}${comment}`);
}
});
Object.keys(orGroups).forEach(groupName => {
propLines.push(` # Grupo alternativo (OR): ${groupName}`);
propLines.push(` (`);
let items = orGroups[groupName];
items.forEach((item, idx) => {
let isLast = (idx === items.length - 1);
propLines.push(` ${item}${isLast ? '' : ' |'}`);
});
propLines.push(` ) ;`);
});
let newBody = [];
if (preservedStandaloneComments.length > 0) {
newBody.push(...preservedStandaloneComments);
}
if (propLines.length > 0) {
newBody.push(...propLines);
}
if (preservedNonPropLines.length > 0) {
newBody.push(...preservedNonPropLines);
} else if (!hasLabelConstraint) {
newBody.push(' rdfs:label rdf:langString+;');
}
// Synchronize external IMPORT directives in preamble and internal sub-schema blocks in postamble
(propRows || []).forEach(row => {
if (!row || row.valueType !== 'subshape') return;
let mode = row.subShapeMode || ((row.subShapeExternalId || /^E\d+(?:#.+)?$/i.test(row.subShapeName || '')) ? 'external' : 'internal');
if (mode === 'external') {
let extSpec = parseExternalSubShapeSpec(row.subShapeExternalId, row.subShapeName);
if (extSpec.schemaId) {
let importLine = `IMPORT <http://www.wikidata.org/wiki/Special:EntitySchemaText/${extSpec.schemaId}>`;
if (!new RegExp('EntitySchemaText/' + extSpec.schemaId + '\\b', 'i').test(preamble)) {
preamble = importLine + '\n' + preamble;
}
let hintComment = `# externalSubShape: @<${extSpec.shapeName}> from EntitySchema:${extSpec.schemaId}`;
if (!preamble.includes(hintComment)) {
preamble = hintComment + '\n' + preamble;
}
}
} else {
let sName = normalizeShExShapeLabel(row.subShapeName, 'sub_shape');
let qidsStr = row.subShapeQids || row.hardselect || row.softselect || '';
let qids = (Array.isArray(qidsStr) ? qidsStr : String(qidsStr).split(','))
.map(q => (q || '').trim().toUpperCase())
.filter(q => /^Q\d+$/i.test(q));
let subBlockBody = qids.length > 0
? ` wdt:P31 [ ${qids.map(q => 'wd:' + q).join(' ')} ] + ;`
: ` wdt:P31 IRI + ;`;
let existingSubRegex = new RegExp(`(<${escapeRegex(sName)}>\\s*(?:EXTRA\\s+[^{]+)?\\{)([\\s\\S]*?)(\\})`, 'i');
if (existingSubRegex.test(postamble)) {
if (qids.length > 0) {
postamble = postamble.replace(existingSubRegex, `$1\n${subBlockBody}\n$3`);
}
} else {
postamble = postamble + `\n\n<${sName}> EXTRA wdt:P31 {\n${subBlockBody}\n}`;
}
}
});
return preamble + '\n' + newBody.join('\n') + '\n' + postamble;
}
/**
* Renders the Dual-Mode EntitySchema Editor UI (Special:Cradle#edit).
* Supports:
* 1. Modo Visual (GUI): rich property-based builder matching Schema Designer.
* 2. Modo Código (CodeEditor): MediaWiki native Ace editor with ShEx & # comment support and textarea fallback.
*/
function renderSchemaEditor(schemaId, schema, parsedProps, metaMap, qidLabelsMap) {
updateNavigationTabs('edit');
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
let currentShex = schema.schemaText || '';
let currentMode = 'visual'; // 'visual' or 'code'
let labelsMap = Object.assign({}, metaMap || {});
let itemLabels = Object.assign({}, qidLabelsMap || {});
let aceEditorInstance = null;
// Container
let $editorWrap = $('<div>').addClass('cradle-selector-box').css({'display': 'flex', 'flex-direction': 'column', 'gap': '14px'});
// Header
let $header = $('<div>').addClass('cradle-schema-editor-header');
let $backBtn = $('<button>').addClass('cradle-btn-secondary')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'height': '32px'})
.html(ICONS.back + ' <span>' + mw.msg('cradle-back') + '</span>')
.on('click', function() {
renderCreateOptionsSelector();
});
let $titleInfo = $('<div>').css({'display': 'inline-flex', 'align-items': 'center', 'gap': '8px', 'flex-wrap': 'wrap'})
.append($('<strong>').css({'font-size': '15px'}).text(mw.msg('cradle-editing-schema-title', schemaId)))
.append($('<span>').css({'color': '#54595d'}).text('(' + (schema.label || schemaId) + ')'))
.append($('<a>').attr({href: mw.util.getUrl('EntitySchema:' + schemaId), target: '_blank'}).css({'color': '#36c', 'display': 'inline-flex', 'align-items': 'center', 'gap': '3px'}).html(ICONS.external + ' <span style="font-size:12px;">EntitySchema:' + schemaId + '</span>'));
let $modeSwitcher = $('<div>').addClass('cradle-mode-switcher');
let $btnVisual = $('<button>').addClass('cradle-mode-btn active').html(ICONS.edit + ' <span>' + (mw.msg('cradle-mode-visual') || 'Modo visual (GUI)') + '</span>');
let $btnCode = $('<button>').addClass('cradle-mode-btn').html(ICONS.code + ' <span>' + (mw.msg('cradle-mode-code') || 'Modo código (ShEx)') + '</span>');
$modeSwitcher.append($btnVisual).append($btnCode);
let $leftHeader = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '12px', 'flex-wrap': 'wrap'})
.append($backBtn).append($titleInfo);
$header.append($leftHeader).append($modeSwitcher);
$editorWrap.append($header);
// Visual Mode Container
let $visualContainer = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '10px'});
let $propsList = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '8px'});
$visualContainer.append($('<h4>').css({'margin': '0'}).text(mw.msg('cradle-properties-list')));
$visualContainer.append($propsList);
// Helper to batch fetch labels
function fetchLabelsInBatches(ids, callback) {
let labels = {};
let datatypes = {};
ids = ids.filter(Boolean);
if (ids.length === 0) {
callback(labels, datatypes);
return;
}
let api = new mw.Api();
let chunks = [];
for (let i = 0; i < ids.length; i += 50) {
chunks.push(ids.slice(i, i + 50));
}
let pending = chunks.length;
let userLang = mw.config.get('wgUserLanguage') || 'en';
let langsToFetch = userLang === 'en' ? 'en' : `${userLang}|en`;
chunks.forEach(chunk => {
let idsStr = Array.isArray(chunk) ? chunk.join('|') : chunk;
api.get({
action: 'wbgetentities',
ids: idsStr,
props: 'labels|datatype',
languages: langsToFetch,
format: 'json'
}).done(function(res) {
if (res && res.entities) {
chunk.forEach(id => {
if (res.entities[id]) {
let lObj = res.entities[id].labels || {};
let lbl = (lObj[userLang] && lObj[userLang].value) || (lObj['en'] && lObj['en'].value);
labels[id] = lbl || id;
if (res.entities[id].datatype) {
datatypes[id] = res.entities[id].datatype;
if (id.startsWith('P')) {
propertyMetadata[id] = propertyMetadata[id] || {};
propertyMetadata[id].label = labels[id];
propertyMetadata[id].datatype = res.entities[id].datatype;
}
}
} else {
labels[id] = id;
}
});
}
pending--;
if (pending === 0) callback(labels, datatypes);
}).fail(function() {
chunk.forEach(id => { labels[id] = id; });
pending--;
if (pending === 0) callback(labels, datatypes);
});
});
}
// Render individual property row in Visual Mode
function renderEditorPropCard(pid, pData, mergedLabels, mergedItemLabels) {
mergedLabels = mergedLabels || {};
mergedItemLabels = mergedItemLabels || {};
let meta = mergedLabels[pid] ? mergedLabels[pid] : (propertyMetadata[pid] || {});
let propLabelText = (meta && meta.label) ? meta.label : (typeof meta === 'string' ? meta : pid);
let displayTitle = pid + (propLabelText && propLabelText !== pid ? ` (${propLabelText})` : '');
let uniqueId = Math.random().toString(36).substring(2, 9);
let $row = $('<div>').addClass('cradle-prop-row-builder').css({
'display': 'flex',
'flex-direction': 'column',
'gap': '8px',
'padding': '10px',
'background': '#f8f9fa',
'border-radius': '4px',
'border': '1px solid #a2a9b1',
'position': 'relative'
});
// Header line
let $headerRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center'});
$headerRow.append($('<strong>').css({'font-size': '14px'}).html(displayTitle));
let $remove = $('<button>').addClass('cradle-btn-secondary').css({'padding': '2px 6px', 'color': '#d33', 'font-weight': 'bold'}).html(ICONS.close).on('click', function() {
$row.remove();
});
$headerRow.append($remove);
$row.append($headerRow);
// Cardinality, Value Type, and OR Group
let $optionsRow = $('<div>').css({'display': 'flex', 'gap': '12px', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $cardinalitySelect = $('<select>').addClass('cradle-select').css({
'font-size': '12px',
'height': '28px',
'padding': '2px 6px',
'width': 'auto'
});
$cardinalitySelect.append($('<option>').val('1').text(mw.msg('cradle-cardinality-1')));
$cardinalitySelect.append($('<option>').val('?').text(mw.msg('cradle-cardinality-opt-single')));
$cardinalitySelect.append($('<option>').val('+').text(mw.msg('cradle-cardinality-req-multi')));
$cardinalitySelect.append($('<option>').val('*').text(mw.msg('cradle-cardinality-opt-multi')));
let initialCard = pData.cardinality || (pData.mandatory ? '1' : '?');
$cardinalitySelect.val(initialCard);
let $cardinalityLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '6px',
'font-size': '12px',
'font-weight': 'bold',
'color': '#202122'
}).text(mw.msg('cradle-cardinality-label')).append($cardinalitySelect);
// Value Type select
let $valueTypeSelect = $('<select>').addClass('cradle-select').css({
'font-size': '12px',
'height': '28px',
'padding': '2px 6px',
'width': 'auto'
});
$valueTypeSelect.append($('<option>').val('IRI').text(mw.msg('cradle-valtype-qid')));
$valueTypeSelect.append($('<option>').val('xsd:string').text(mw.msg('cradle-valtype-string')));
$valueTypeSelect.append($('<option>').val('rdf:langString').text(mw.msg('cradle-valtype-langstring')));
$valueTypeSelect.append($('<option>').val('xsd:dateTime').text(mw.msg('cradle-valtype-datetime')));
$valueTypeSelect.append($('<option>').val('xsd:decimal').text(mw.msg('cradle-valtype-decimal')));
$valueTypeSelect.append($('<option>').val('geo:wktLiteral').text(mw.msg('cradle-valtype-geo')));
$valueTypeSelect.append($('<option>').val('subshape').text(mw.msg('cradle-valtype-subshape')));
let initialVType = pData.valueType || 'IRI';
$valueTypeSelect.val(initialVType);
let $valueTypeLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '6px',
'font-size': '12px',
'font-weight': 'bold',
'color': '#202122'
}).text(mw.msg('cradle-valtype-label')).append($valueTypeSelect);
// Alternative OR Group
let $orGroupInput = $('<input>').addClass('cradle-input').attr('placeholder', 'e.g. OSM ID').css({
'font-size': '12px',
'height': '28px',
'width': '120px',
'padding': '2px 6px'
}).val(pData.orGroup || '');
let $orGroupLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '4px',
'font-size': '12px',
'color': '#54595d'
}).text(mw.msg('cradle-orgroup-label')).append($orGroupInput);
$optionsRow.append($cardinalityLabel).append($valueTypeLabel).append($orGroupLabel);
$row.append($optionsRow);
// SubShape input (supports both internal @<SubShape> and external IMPORT EntitySchema)
let $subShapeGroup = $('<div>').css({'display': 'none', 'flex-direction': 'column', 'gap': '6px', 'margin-top': '4px', 'padding': '8px', 'background': '#fff', 'border': '1px solid #c8ccd1', 'border-radius': '4px'});
let $subShapeTopRow = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $subShapeModeSelect = $('<select>').addClass('cradle-select').css({'font-size': '12px', 'height': '28px', 'padding': '2px 6px', 'width': 'auto'});
$subShapeModeSelect.append($('<option>').val('internal').text(mw.msg('cradle-subshape-mode-internal')));
$subShapeModeSelect.append($('<option>').val('external').text(mw.msg('cradle-subshape-mode-external')));
$subShapeModeSelect.val(pData.subShapeMode || (pData.subShapeExternalId ? 'external' : 'internal'));
let $subShapeModeLabel = $('<label>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-mode-label')).append($subShapeModeSelect);
let $subShapeExternalWrap = $('<div>').css({'display': 'none', 'gap': '6px', 'align-items': 'center'});
let $subShapeExternalInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-subshape-external-id-placeholder')).css({'font-size': '12px', 'height': '28px', 'width': '150px'}).val(pData.subShapeExternalId || '');
$subShapeExternalWrap.append($('<label>').css({'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-external-id-label'))).append($subShapeExternalInput);
let $subShapeNameWrap = $('<div>').css({'display': 'flex', 'gap': '6px', 'align-items': 'center', 'flex': '1', 'min-width': '200px'});
let $subShapeInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-subshape-name-placeholder')).css({
'font-size': '12px',
'height': '28px',
'flex': '1'
}).val(pData.subShapeName || '');
$subShapeNameWrap.append($('<label>').css({'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-name-label'))).append($subShapeInput);
let $subShapeClassesHint = $('<div>').css({'font-size': '11px', 'color': '#54595d'}).text(mw.msg('cradle-subshape-classes-hint'));
$subShapeTopRow.append($subShapeModeLabel).append($subShapeExternalWrap).append($subShapeNameWrap);
$subShapeGroup.append($subShapeTopRow).append($subShapeClassesHint);
$row.append($subShapeGroup);
// Presets: None / Hardselect / Softselect
let hasHard = pData.hardselect && ((Array.isArray(pData.hardselect) && pData.hardselect.length > 0) || (typeof pData.hardselect === 'string' && pData.hardselect.trim().length > 0));
let hasSoft = pData.softselect && ((Array.isArray(pData.softselect) && pData.softselect.length > 0) || (typeof pData.softselect === 'string' && pData.softselect.trim().length > 0));
let activePreset = 'none';
if (hasHard) activePreset = 'hard';
else if (hasSoft) activePreset = 'soft';
let $radioGroup = $('<div>').css({'display': 'flex', 'gap': '12px', 'margin-top': '4px'});
let $radioNone = $('<input>').attr({type: 'radio', name: `select-type-${uniqueId}`, id: `none-${uniqueId}`, checked: (activePreset === 'none')});
let $labelNone = $('<label>').attr('for', `none-${uniqueId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioNone).append(mw.msg('cradle-preset-none'));
let $radioHard = $('<input>').attr({type: 'radio', name: `select-type-${uniqueId}`, id: `hard-${uniqueId}`, checked: (activePreset === 'hard')});
let $labelHard = $('<label>').attr('for', `hard-${uniqueId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioHard).append(mw.msg('cradle-hardselect-label'));
let $radioSoft = $('<input>').attr({type: 'radio', name: `select-type-${uniqueId}`, id: `soft-${uniqueId}`, checked: (activePreset === 'soft')});
let $labelSoft = $('<label>').attr('for', `soft-${uniqueId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioSoft).append(mw.msg('cradle-softselect-label'));
$radioGroup.append($labelNone).append($labelHard).append($labelSoft);
$row.append($radioGroup);
let $valuePresetContainer = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px'});
let $chipsDiv = $('<div>').css({'display': 'flex', 'flex-wrap': 'wrap', 'gap': '6px', 'margin-top': '4px'});
$valuePresetContainer.append($chipsDiv);
function updateVisibilityBasedOnValueType() {
let vt = $valueTypeSelect.val();
let sMode = $subShapeModeSelect.val();
if (vt === 'IRI') {
$radioGroup.show();
$valuePresetContainer.show();
$subShapeGroup.css('display', 'none');
} else if (vt === 'subshape') {
$radioGroup.hide();
$subShapeGroup.css('display', 'flex');
if (sMode === 'external') {
$subShapeExternalWrap.css('display', 'flex');
$subShapeClassesHint.hide();
$valuePresetContainer.hide();
} else {
$subShapeExternalWrap.css('display', 'none');
$subShapeClassesHint.show();
$valuePresetContainer.show();
if (typeof updateSearchInputVisibility === 'function') updateSearchInputVisibility();
}
} else {
$radioGroup.hide();
$valuePresetContainer.hide();
$subShapeGroup.css('display', 'none');
}
}
$valueTypeSelect.on('change', updateVisibilityBasedOnValueType);
$subShapeModeSelect.on('change', updateVisibilityBasedOnValueType);
updateVisibilityBasedOnValueType();
let selectedItems = [];
var $valSearchGroup = null;
function addChip(qid, label) {
if (selectedItems.some(i => i.qid === qid)) return;
selectedItems.push({ qid: qid, label: label });
let $chip = $('<span>').css({
'display': 'inline-flex',
'align-items': 'center',
'gap': '6px',
'background': '#eaecf0',
'border': '1px solid #c8ccd1',
'border-radius': '3px',
'padding': '3px 8px',
'font-size': '12px'
}).text(`${label} (${qid})`);
let $removeChip = $('<span>').css({
'cursor': 'pointer',
'color': '#72777d',
'font-weight': 'bold',
'margin-left': '4px'
}).html(ICONS.close).on('click', function() {
selectedItems = selectedItems.filter(item => item.qid !== qid);
$chip.remove();
updateSearchInputVisibility();
});
$chip.append($removeChip);
$chipsDiv.append($chip);
updateSearchInputVisibility();
}
// Autocomplete search input group
$valSearchGroup = $('<div>').css({'position': 'relative', 'margin-top': '4px'});
let $valSearchInput = $('<input>').addClass('cradle-input').css({'height': '36px', 'padding': '2px 8px', 'font-size': '13px'})
.attr('placeholder', mw.msg('cradle-search-value-placeholder'));
$valSearchGroup.append($valSearchInput);
let $valAutocompleteMenu = $('<ul>').css({
'position': 'absolute', 'top': '100%', 'left': '0', 'right': '0',
'background': '#fff', 'border': '1px solid #a2a9b1', 'border-radius': '0 0 4px 4px',
'box-shadow': '0 2px 4px rgba(0,0,0,0.15)', 'max-height': '150px',
'overflow-y': 'auto', 'z-index': '1010', 'list-style': 'none',
'margin': '0', 'padding': '0', 'display': 'none'
});
$valSearchGroup.append($valAutocompleteMenu);
$valuePresetContainer.append($valSearchGroup);
$row.append($valuePresetContainer);
let valDebounce;
$valSearchInput.on('input', function() {
clearTimeout(valDebounce);
let val = $valSearchInput.val().trim();
if (val.length < 2) {
$valAutocompleteMenu.hide().empty();
return;
}
valDebounce = setTimeout(function() {
let api = new mw.Api();
api.get({
action: 'wbsearchentities',
search: val,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'item',
format: 'json'
}).done(function(res) {
$valAutocompleteMenu.empty();
let items = res.search || [];
if (items.length === 0) {
$valAutocompleteMenu.hide();
return;
}
items.forEach(item => {
let desc = item.description ? ` - ${item.description}` : '';
let $li = $('<li>').css({'padding': '6px 10px', 'cursor': 'pointer', 'border-bottom': '1px solid #eaecf0', 'font-size': '12px'})
.html(`<strong>${item.id}</strong>: ${item.label}${desc}`)
.on('click', function() {
addChip(item.id, item.label);
$valSearchInput.val('');
$valAutocompleteMenu.hide().empty();
})
.on('mouseenter', function() { $(this).css('background', '#f8f9fa'); })
.on('mouseleave', function() { $(this).css('background', '#fff'); });
$valAutocompleteMenu.append($li);
});
$valAutocompleteMenu.show();
});
}, 300);
});
function updateSearchInputVisibility() {
if (!$valSearchGroup || !$valSearchGroup.length) return;
if ($valueTypeSelect.val() === 'subshape' && $subShapeModeSelect.val() === 'internal') {
$chipsDiv.show();
$valSearchGroup.show();
return;
}
let activeType = $radioHard.is(':checked') ? 'hard' : ($radioSoft.is(':checked') ? 'soft' : 'none');
if (activeType === 'none') {
$valSearchGroup.hide();
$chipsDiv.hide();
} else {
$chipsDiv.show();
if (activeType === 'hard' && selectedItems.length >= 1) {
$valSearchGroup.hide();
} else {
$valSearchGroup.show();
}
}
}
$radioNone.on('change', updateSearchInputVisibility);
$radioHard.on('change', updateSearchInputVisibility);
$radioSoft.on('change', updateSearchInputVisibility);
// Populate initial QIDs (after $valSearchGroup and updateSearchInputVisibility are initialized)
let initialQids = [];
if (pData.hardselect) {
initialQids = Array.isArray(pData.hardselect) ? pData.hardselect : String(pData.hardselect).split(',');
} else if (pData.softselect) {
initialQids = Array.isArray(pData.softselect) ? pData.softselect : String(pData.softselect).split(',');
}
initialQids.forEach(q => {
let clean = (q || '').trim().toUpperCase();
if (/^Q\d+$/i.test(clean)) {
addChip(clean, mergedItemLabels[clean] || clean);
}
});
updateSearchInputVisibility();
$(document).on('click', function(e) {
if (!$(e.target).closest($valSearchGroup).length) {
$valAutocompleteMenu.hide();
}
});
$row.data('pid', pid);
$row.data('get_data', function() {
let qidString = selectedItems.map(i => i.qid).join(',');
let useHard = $radioHard.is(':checked');
let useSoft = $radioSoft.is(':checked');
let cardVal = $cardinalitySelect.val();
let vType = $valueTypeSelect.val();
let sMode = $subShapeModeSelect.val() || 'internal';
let sExtId = $subShapeExternalInput.val().trim();
let sName = $subShapeInput.val().trim();
let oGroup = $orGroupInput.val().trim();
return {
pid: pid,
cardinality: cardVal,
mandatory: (cardVal === '1' || cardVal === '+'),
allowMultiple: (cardVal === '+' || cardVal === '*'),
valueType: vType,
subShapeMode: sMode,
subShapeExternalId: sExtId,
subShapeName: sName,
subShapeQids: (vType === 'subshape' && sMode === 'internal') ? qidString : '',
orGroup: oGroup,
defaultValue: '',
hardselect: (vType === 'IRI' && useHard && qidString) ? qidString : '',
softselect: (vType === 'IRI' && useSoft && qidString) ? qidString : ((vType === 'subshape' && sMode === 'internal') ? qidString : '')
};
});
$propsList.append($row);
}
// Render all initial parsed props in Visual Mode
Object.keys(parsedProps).forEach(pid => {
renderEditorPropCard(pid, parsedProps[pid], labelsMap, itemLabels);
});
// Add property search group
let $addPropGroup = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px', 'margin-top': '8px', 'position': 'relative'});
let $addPropInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-prop-search-placeholder'));
$addPropGroup.append($addPropInput);
let $autocompleteMenu = $('<ul>').css({
'position': 'absolute', 'top': '100%', 'left': '0', 'right': '0',
'background': '#fff', 'border': '1px solid #a2a9b1', 'border-radius': '0 0 4px 4px',
'box-shadow': '0 2px 4px rgba(0,0,0,0.15)', 'max-height': '200px',
'overflow-y': 'auto', 'z-index': '1000', 'list-style': 'none',
'margin': '0', 'padding': '0', 'display': 'none'
});
$addPropGroup.append($autocompleteMenu);
$visualContainer.append($addPropGroup);
$editorWrap.append($visualContainer);
let propSearchDebounce;
$addPropInput.on('input', function() {
clearTimeout(propSearchDebounce);
let val = $addPropInput.val().trim();
if (val.length < 2) {
$autocompleteMenu.hide().empty();
return;
}
propSearchDebounce = setTimeout(function() {
let api = new mw.Api();
api.get({
action: 'wbsearchentities',
search: val,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'property',
format: 'json'
}).done(function(res) {
$autocompleteMenu.empty();
let items = res.search || [];
if (items.length === 0) {
$autocompleteMenu.hide();
return;
}
items.forEach(item => {
let desc = item.description ? ` - ${item.description}` : '';
let $li = $('<li>').css({'padding': '8px 12px', 'cursor': 'pointer', 'border-bottom': '1px solid #eaecf0', 'font-size': '13px'})
.html(`<strong>${item.id}</strong>: ${item.label}${desc}`)
.on('click', function() {
labelsMap[item.id] = item.label;
renderEditorPropCard(item.id, { cardinality: '?' }, labelsMap, itemLabels);
$addPropInput.val('');
$autocompleteMenu.hide().empty();
})
.on('mouseenter', function() { $(this).css('background', '#f8f9fa'); })
.on('mouseleave', function() { $(this).css('background', '#fff'); });
$autocompleteMenu.append($li);
});
$autocompleteMenu.show();
});
}, 300);
});
$(document).on('click', function(e) {
if (!$(e.target).closest($addPropGroup).length) {
$autocompleteMenu.hide();
}
});
function gatherEditorProps() {
let propRows = [];
$propsList.children().each(function() {
let fn = $(this).data('get_data');
if (fn) {
propRows.push(fn());
}
});
return propRows;
}
// Code Mode Container
let $codeContainer = $('<div>').css({'display': 'none', 'flex-direction': 'column', 'gap': '8px'});
let $codeToolbar = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '8px'});
let $valStatusSpan = $('<span>').css({'font-size': '12px', 'font-weight': 'bold'});
let $validateBtn = $('<button>').addClass('cdx-button cdx-button--weight-quiet')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '4px', 'font-size': '12px'})
.html(ICONS.check + ' <span>' + (mw.msg('cradle-validate-shex-btn') || 'Validar sintaxis') + '</span>')
.on('click', function() {
let code = getEditorCode();
let v = validateShExSyntax(code);
if (v.valid) {
$valStatusSpan.css({'color': '#00af89'}).text(mw.msg('cradle-shex-syntax-valid') || 'Sintaxis ShEx válida');
} else {
$valStatusSpan.css({'color': '#d33'}).text((mw.msg('cradle-shex-syntax-invalid', v.errors[0]) || ('Error: ' + v.errors[0])));
}
});
let $commentHint = $('<span>').css({'font-size': '11px', 'color': '#72777d'}).text('W3C ShExC (# comentarios soportados)');
$codeToolbar.append($('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '8px'}).append($validateBtn).append($valStatusSpan)).append($commentHint);
$codeContainer.append($codeToolbar);
let $codeArea = $('<textarea>').addClass('cradle-shex-code-area').val(currentShex);
let $aceDiv = $('<div>').addClass('cradle-ace-editor').hide();
$codeContainer.append($codeArea).append($aceDiv);
$editorWrap.append($codeContainer);
function initAceEditor() {
if (aceEditorInstance) return Promise.resolve(aceEditorInstance);
return mw.loader.using('ext.codeEditor.ace').then(function() {
if (window.ace && $aceDiv.length) {
$codeArea.hide();
$aceDiv.show();
aceEditorInstance = window.ace.edit($aceDiv[0]);
try {
aceEditorInstance.session.setMode('ace/mode/turtle');
} catch (e) {}
aceEditorInstance.setValue($codeArea.val(), -1);
aceEditorInstance.setOptions({
fontSize: '13px',
showPrintMargin: false,
wrap: true
});
}
return aceEditorInstance;
}).catch(function() {
return null;
});
}
function getEditorCode() {
if (aceEditorInstance) {
return aceEditorInstance.getValue();
}
return $codeArea.val();
}
function setEditorCode(val) {
$codeArea.val(val);
if (aceEditorInstance) {
aceEditorInstance.setValue(val, -1);
}
}
// Mode Switching
$btnVisual.on('click', function() {
if (currentMode === 'visual') return;
let code = getEditorCode();
let v = validateShExSyntax(code);
if (!v.valid) {
let firstErr = (v.errors && v.errors.length) ? v.errors[0] : 'Syntax error';
mw.notify(mw.msg('cradle-shex-syntax-invalid', firstErr) || ('Error: ' + firstErr), { type: 'error' });
return;
}
let newParsed = parseShEx(code, schema.importedSchemas);
let newPids = Object.keys(newParsed);
let qidsToFetch = [];
newPids.forEach(pid => {
let p = newParsed[pid];
if (p.hardselect && Array.isArray(p.hardselect)) qidsToFetch = qidsToFetch.concat(p.hardselect);
if (p.softselect && Array.isArray(p.softselect)) qidsToFetch = qidsToFetch.concat(p.softselect);
});
qidsToFetch = [...new Set(qidsToFetch)].filter(id => /^Q\d+$/i.test(id) && !itemLabels[id]);
$propsList.empty();
let p1 = new Promise(resolve => {
fetchLabelsInBatches(newPids, function(freshLabels) {
resolve(freshLabels);
});
});
let p2 = qidsToFetch.length > 0 ? loadItemLabels(qidsToFetch) : Promise.resolve({});
Promise.all([p1, p2]).then(results => {
let freshLabels = results[0] || {};
let freshItemLabels = results[1] || {};
Object.assign(labelsMap, freshLabels);
Object.assign(itemLabels, freshItemLabels);
newPids.forEach(pid => {
renderEditorPropCard(pid, newParsed[pid], labelsMap, itemLabels);
});
});
currentMode = 'visual';
$btnVisual.addClass('active');
$btnCode.removeClass('active');
$codeContainer.hide();
$visualContainer.show();
});
$btnCode.on('click', function() {
if (currentMode === 'code') return;
let rows = gatherEditorProps();
let currentCode = getEditorCode();
let newCode = mergeVisualPropsIntoShex(currentCode, rows, labelsMap, schema.label || schemaId);
setEditorCode(newCode);
currentMode = 'code';
$btnCode.addClass('active');
$btnVisual.removeClass('active');
$visualContainer.hide();
$codeContainer.show();
initAceEditor().then(function(ed) {
if (ed) ed.resize();
});
});
$content.append($editorWrap);
// Footer setup
let $footer = $('#cradle-footer-area').empty().css({
'display': 'flex',
'flex-direction': 'column',
'gap': '12px',
'padding': '14px 16px',
'background': '#f8f9fa',
'border-top': '1px solid #c8ccd1',
'margin-top': '16px',
'border-radius': '0 0 4px 4px'
});
// Summary row
let $summaryRow = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '10px'});
$summaryRow.append($('<label>').css({'font-weight': 'bold', 'font-size': '13px', 'white-space': 'nowrap'}).text(mw.msg('cradle-edit-summary-label') || 'Resumen:'));
let $summaryInput = $('<input>').addClass('cradle-input')
.attr('placeholder', mw.msg('cradle-edit-summary-placeholder') || 'Resumen de edición (ej. Declaraciones añadidas)...')
.css({'flex': '1', 'height': '32px'});
$summaryRow.append($summaryInput);
$footer.append($summaryRow);
// Buttons row
let $buttonsRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'gap': '8px', 'flex-wrap': 'wrap'});
let $cancelBtn = $('<button>').addClass('cradle-btn-secondary')
.html(ICONS.back + ' <span>' + mw.msg('cradle-back') + '</span>')
.on('click', function() {
renderCreateOptionsSelector();
});
let $feedbackBtn = $('<button>').attr('type', 'button')
.addClass('cdx-button cdx-button--weight-quiet')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '5px', 'font-size': '12px', 'color': 'var(--color-progressive, #36c)'})
.html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-btn') + '</span>')
.on('click', openFeedbackModal);
let $saveBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'min-height': '34px', 'font-weight': 'bold'})
.html(ICONS.check + ' <span>' + mw.msg('cradle-save-changes') + '</span>')
.on('click', function() {
let codeToSave = '';
if (currentMode === 'code') {
codeToSave = getEditorCode();
} else {
let rows = gatherEditorProps();
if (rows.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'error' });
return;
}
codeToSave = mergeVisualPropsIntoShex(getEditorCode(), rows, labelsMap, schema.label || schemaId);
}
let validation = validateShExSyntax(codeToSave);
if (!validation.valid) {
let proceed = confirm(mw.msg('cradle-shex-invalid') + '\n' + validation.errors.join('\n') + '\n\n' + mw.msg('cradle-confirm-proceed'));
if (!proceed) return;
}
$saveBtn.prop('disabled', true);
let customSummary = $summaryInput.val().trim();
let savingNotice = mw.notify(mw.msg('cradle-saving-schema') || 'Guardando cambios en el EntitySchema...', { autoHide: false });
saveEntitySchemaToWikidata(schemaId, codeToSave, customSummary).then(function(savedId) {
if (savingNotice && savingNotice.close) savingNotice.close();
mw.notify(mw.msg('cradle-save-schema-success', savedId) || `¡EntitySchema ${savedId} actualizado con éxito!`, { type: 'success' });
$saveBtn.prop('disabled', false);
}).catch(function(saveErr) {
if (savingNotice && savingNotice.close) savingNotice.close();
$saveBtn.prop('disabled', false);
let errStr = (saveErr && saveErr.message) ? saveErr.message : String(saveErr);
mw.notify((mw.msg('cradle-save-schema-failed', errStr) || ('Error al guardar: ' + errStr)), { type: 'error' });
});
});
let $leftGroup = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '8px'}).append($cancelBtn).append($feedbackBtn);
let $rightGroup = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'center'}).append($saveBtn);
$buttonsRow.append($leftGroup).append($rightGroup);
$footer.append($buttonsRow);
}
$(document).ready(function() {
mw.loader.using(['mediawiki.api', 'mediawiki.util', 'mediawiki.storage', 'mediawiki.jqueryMsg']).then(init);
});
})();
68l7j5058ra9ojcudngu14kmhkpklp0
806953
806924
2026-11-09T16:02:53Z
Danielyepezgarces
7347
Bump version to 1.57.0 (dev)
806953
javascript
text/javascript
/**
* Cradle - A Wikidata User Gadget
*
* This script provides a Cradle-like form editor directly within Wikidata item pages.
* It automatically detects EntitySchemas associated with the item's classes (via Property P12861
* on the item itself or its P31 "instance of" / P279 "subclass of" classes), parses the ShEx schema,
* and displays a premium, modern drawer interface to add, modify, or delete claims in-place.
*
* Authors: [[User:Danielyepezgarces|Daniel Yepez Garces]], [[User:Olea|Ismael Olea]]
* Based on: Cradle (https://cradle.toolforge.org/) by [[User:Magnus Manske|Magnus Manske]]
* License: MIT (https://opensource.org/licenses/MIT)
* Version: 1.57.0
*
* Installation:
* Add the following line to your [[Special:MyPage/common.js]] on Wikidata (increment version value to bypass cache)
*
* Production loader snippet for your common.js:
* mw.loader.load('//www.wikidata.org/w/index.php?title=User:Danielyepezgarces/Gadget-cradle.js&action=raw&ctype=text/javascript&version=1.56.0');
*
* Enjoy editing Wikidata entities seamlessly with Cradle!
*/
(function() {
'use strict';
const CRADLE_VERSION = '1.56.0';
let debugMode = false;
try {
debugMode = new URLSearchParams(window.location.search).has('cradledebug');
} catch (e) {}
function logDebug(...args) {
if (debugMode) {
console.log(...args);
}
}
function logError(...args) {
if (debugMode) {
console.error(...args);
}
}
// Verify if we are on Wikidata or Test Wikidata
if (!mw.config.get('wgServer').includes('wikidata.org')) {
return;
}
mw.loader.load(mw.util.wikiScript('index') + '?title=User:Danielyepezgarces/Gadget-cradle-dev.css&action=raw&ctype=text/css&version=' + CRADLE_VERSION, 'text/css');
const P12861 = 'P12861'; // EntitySchema for this class
const P31 = 'P31'; // Instance of
const P279 = 'P279'; // Subclass of
const P106 = 'P106'; // Occupation
// Built-in fallback registry for standard Wikibase property datatypes
const KNOWN_COORDINATE_PROPERTIES = ['P625', 'P133', 'P159', 'P276', 'P6766'];
const KNOWN_MONOLINGUAL_PROPERTIES = ['P1705', 'P1448', 'P1476', 'P1559', 'P1813', 'P1814', 'P2093', 'P2704', 'P5061', 'P6333', 'P898'];
let pageName = mw.config.get('wgPageName');
let isSpecialCradle = (pageName === 'Special:Cradle' || pageName === 'Special:BlankPage/Cradle');
// Inject early hide CSS rules to prevent any default content from flashing before script loads
if (isSpecialCradle) {
let style = document.createElement('style');
style.id = 'cradle-early-hide-style';
style.innerHTML = '#mw-content-text > *:not(.cradle-fullpage-container) { display: none !important; } #firstHeading { visibility: hidden !important; }';
document.head.appendChild(style);
}
let isItemPage = (mw.config.get('wgNamespaceNumber') === 0 && mw.config.get('wbEntityId'));
let entityId = isItemPage ? mw.config.get('wbEntityId') : null;
// State
let entityData = null;
let entityDataPromise = null;
let detectedSchemas = [];
let cradleTemplates = {};
let activeSchema = null;
let activeTemplate = null;
let activeMode = isItemPage ? 'edit' : 'create'; // 'edit' or 'create'
let schemaProperties = {};
let propertyMetadata = {};
let propertyConstraints = {};
let customSchemas = {};
let sortedPropertiesMap = {};
let sortedPropertiesLoaded = false;
/**
* Fetches MediaWiki:Wikibase-SortedProperties from Wikidata to order statements canonically.
*/
function fetchSortedProperties(callback) {
if (sortedPropertiesLoaded) {
if (callback) callback();
return;
}
let api = new mw.Api();
api.get({
action: 'query',
prop: 'revisions',
titles: 'MediaWiki:Wikibase-SortedProperties',
rvslots: 'main',
rvprop: 'content',
format: 'json'
}).done(function(res) {
if (res && res.query && res.query.pages) {
let pages = res.query.pages;
let pageId = Object.keys(pages)[0];
if (pageId && pages[pageId].revisions && pages[pageId].revisions[0]) {
let content = pages[pageId].revisions[0].slots.main['*'];
let matches = content.match(/P\d+/g) || [];
let idx = 0;
matches.forEach(pid => {
if (!(pid in sortedPropertiesMap)) {
sortedPropertiesMap[pid] = idx++;
}
});
sortedPropertiesLoaded = true;
logDebug('[Cradle] Loaded ' + idx + ' sorted properties from MediaWiki:Wikibase-SortedProperties');
}
}
if (callback) callback();
}).fail(function() {
if (callback) callback();
});
}
/**
* Ensures MediaWiki:Wikibase-SortedProperties is loaded before executing callback.
*/
function ensureSortedProperties(callback) {
if (sortedPropertiesLoaded) {
if (callback) callback();
} else {
fetchSortedProperties(callback);
}
}
/**
* Fetches missing property frequency recommendations from Recoin API (relative completeness indicator).
*/
/**
* Fetches property frequency statistics for an entity class from Recoin API (getbyclassid.php).
*/
function fetchRecoinData(classQID, callback) {
let cleanQID = (classQID || '').trim().toUpperCase();
if (!cleanQID || !/^Q\d+$/i.test(cleanQID)) {
callback(null);
return;
}
let userLang = mw.config.get('wgUserLanguage') || 'en';
let url = 'https://recoin.toolforge.org/getbyclassid.php?lang=' + userLang + '&subject=' + cleanQID;
$.ajax({
url: url,
dataType: 'jsonp',
timeout: 5000
}).done(function(res) {
if (res && res.Frequenct_properties && Array.isArray(res.Frequenct_properties)) {
callback(res);
} else {
callback(null);
}
}).fail(function() {
callback(null);
});
}
/**
* Safely parses EntitySchema ID string (e.g. 'E524') from a datavalue object.
*/
function parseEntitySchemaID(datavalueObj) {
if (!datavalueObj) return null;
let val = datavalueObj.value;
if (!val) return null;
if (typeof val === 'string') return val;
if (typeof val === 'object' && val.id) return val.id;
return null;
}
/**
* Sorts an array of Property IDs according to MediaWiki:Wikibase-SortedProperties canonical order.
*/
function sortPropertyIDs(propIds) {
if (!propIds || !Array.isArray(propIds)) return [];
return propIds.slice().sort((a, b) => {
let idxA = (a in sortedPropertiesMap) ? sortedPropertiesMap[a] : 999999;
let idxB = (b in sortedPropertiesMap) ? sortedPropertiesMap[b] : 999999;
if (idxA !== idxB) {
return idxA - idxB;
}
let numA = parseInt(a.replace('P', ''), 10) || 0;
let numB = parseInt(b.replace('P', ''), 10) || 0;
return numA - numB;
});
}
let softselectLabels = {};
let formState = {}; // propertyId -> Array of { id, guid, value, datatype, isDeleted }
let userWantsToChangeSchema = false;
let schemasLoadedPromise = null;
// SVG Icons
const ICONS = {
cradle: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/></svg>`,
close: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="m4.34 2.93 12.73 12.73-1.41 1.41L2.93 4.34z"/><path d="M17.07 4.34 4.34 17.07l-1.41-1.41L15.66 2.93z"/></svg>`,
plus: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M11 9V4H9v5H4v2h5v5h2v-5h5V9z"/></svg>`,
trash: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M17 2h-3.5l-1-1h-5l-1 1H3v2h14zm-12 4v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6zm3 11H6V8h2zm3 0H9V8h2zm3 0h-2V8h2z"/></svg>`,
undo: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M17.8 8A7.8 7.8 0 0 1 10 15.8c-1.3 0-2.5-.3-3.6-.9l1.5-1.5c.7.4 1.4.6 2.1.6a5.8 5.8 0 1 0 0-11.6c-.9 0-1.7.2-2.5.6H10V5H4v6h6V9H6.9c.8-.9 1.9-1.4 3.1-1.4A7.8 7.8 0 0 1 17.8 8"/></svg>`,
back: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M19 9H4.414l5.293-5.293-1.414-1.414L1.586 10l6.707 6.707 1.414-1.414L4.414 11H19z"/></svg>`,
check: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="m8.16 13.9 7.4-8.15 1.5 1.35-8.9 9.8L3.25 12l1.4-1.4z"/></svg>`,
alert: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M11.53 2.3A1.85 1.85 0 0 0 10 1.25 1.85 1.85 0 0 0 8.47 2.3L1.31 14.73A1.82 1.82 0 0 0 1.3 16.5a1.76 1.76 0 0 0 1.54.85h14.32a1.76 1.76 0 0 0 1.54-.85 1.82 1.82 0 0 0 0-1.77ZM11 15H9v-2h2Zm0-4H9V6h2z"/></svg>`,
info: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M10 0a10 10 0 1 0 10 10A10 10 0 0 0 10 0m1 15H9v-6h2Zm0-8H9V5h2z"/></svg>`,
download: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M17 12v5H3v-5H1v5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5z"/><path d="M10 15l5-6h-3V1H8v8H5z"/></svg>`,
external: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg>`,
edit: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M16.77 8l1.94-2a1 1 0 0 0 0-1.41l-3.34-3.3a1 1 0 0 0-1.41 0L12 3.23zM1 14.25V19h4.75l9.96-9.96-4.75-4.75z"/></svg>`,
code: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="m5 13-4-3 4-3 1.4 1.4-2.1 1.6 2.1 1.6zm10 0-1.4-1.4 2.1-1.6-2.1-1.6L15 7l4 3zm-6.8 3.5-2.4-.6 6-12 2.4.6z"/></svg>`,
feedback: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M18 10c0-4.42-3.58-8-8-8s-8 3.58-8 8c0 2.03.76 3.87 2 5.28V19l3.53-1.77C8.41 17.72 9.19 18 10 18c4.42 0 8-3.58 8-8zm-8 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm1-4H9V6h2v4z"/></svg>`,
mapPin: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 20 20"><path d="M10 2a6 6 0 0 0-6 6c0 4.5 6 10 6 10s6-5.5 6-10a6 6 0 0 0-6-6zm0 8.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>`
};
/**
* Initializes the gadget and loads i18n messages dynamically from a subpage.
*/
function init() {
let userLang = mw.config.get('wgUserLanguage') || 'en';
// Local fallback messages to ensure script functionality even if network request fails
const fallbackMessages = {
'cradle-add-language': 'Add another language',
'cradle-add-prop-btn': 'Add',
'cradle-add-property': 'Add property',
'cradle-add-qualifier': 'Add qualifier',
'cradle-add-ref-property': 'Add property to reference',
'cradle-add-reference': 'Add reference',
'cradle-add-value': 'Add value',
'cradle-auto-cite': 'Auto-fill via Citoid',
'cradle-back': 'Back',
'cradle-base-schema-label': 'Base schema / derivation (IMPORT)',
'cradle-base-schema-notice': 'Existing base schema detected ($1). You can create a specialized derivation (e.g. Firefighter derived from Human).',
'cradle-base-schema-placeholder': 'e.g. E10 (Human) or E519',
'cradle-btn-delete': 'Delete',
'cradle-btn-edit': 'Edit',
'cradle-btn-edit-with-cradle': 'Edit with Cradle',
'cradle-btn-load': 'Load',
'cradle-cancel': 'Cancel',
'cradle-cardinality-1': '1 (Required, single)',
'cradle-cardinality-label': 'Cardinality:',
'cradle-cardinality-opt-multi': '0..* / * (Optional, multiple)',
'cradle-cardinality-opt-single': '0..1 / ? (Optional, single)',
'cradle-cardinality-req-multi': '1..* / + (Required, multiple)',
'cradle-change-form': 'Change schema',
'cradle-change-schema': 'Change schema',
'cradle-citoid-loading': 'Fetching metadata (Citoid)...',
'cradle-citoid-success': 'Metadata loaded!',
'cradle-confirm-proceed': 'Do you want to proceed anyway?',
'cradle-constraint-citation': 'Statements should have at least one reference.',
'cradle-constraint-distinct': 'Distinct values constraint.',
'cradle-constraint-format': 'Format constraint',
'cradle-constraint-inverse': 'Inverse property constraint.',
'cradle-constraint-mandatory': 'Mandatory value constraint: A value for this property should be provided.',
'cradle-constraint-mandatory-alert': 'Property $1 ($2) has a Wikidata mandatory value constraint.',
'cradle-constraint-single': 'Single value constraint: Only one value is allowed for this property.',
'cradle-constraint-type': 'Type constraint: Ensure value matches the required entity type.',
'cradle-constraints-title': 'Wikidata constraints ($1)',
'cradle-coord-lat-placeholder': 'e.g. 8.76 or 8°45\'36"N',
'cradle-coord-lon-placeholder': 'e.g. -75.88 or 75°53\'8"W',
'cradle-coord-placeholder': 'e.g. 8°45\'36"N, 75°53\'8"W or 8.76, -75.88',
'cradle-coord-precision': 'Precision: $1',
'cradle-copy-shex': 'Copy ShEx',
'cradle-create-custom-schema-desc': 'Search for an existing EntitySchema (e.g. E10, Human) to load its claims and create a new item.',
'cradle-create-entityschema-btn': 'Publish EntitySchema on Wikidata',
'cradle-create-item': 'Create item',
'cradle-create-schema': 'Design new schema',
'cradle-create-shex-designer': 'Design / Create new EntitySchema (ShEx)',
'cradle-create-success': 'Item $1 successfully created! Redirecting...',
'cradle-create-summary': 'New item created with [[Wikidata:Cradle-gadget|Cradle-gadget]] (Template: $1)',
'cradle-create-tab': 'Create new item',
'cradle-credits': 'Created by $1 & $2. Based on $3 by $4.',
'cradle-custom-schemas': 'My custom schemas (stored in user space)',
'cradle-default-edit-summary': 'Update EntitySchema via Cradle',
'cradle-default-val-placeholder': 'default QID/string',
'cradle-delete-schema-confirm': 'Are you sure you want to delete the schema "$1"?',
'cradle-designer-custom-desc': 'Design a new schema from scratch or by importing properties from an existing item to publish it as an EntitySchema (ShEx).',
'cradle-detected-schemas': 'Detected schemas for this item:',
'cradle-direct-api-disabled-notice': 'Direct API creation is currently disabled. Use Special:NewEntitySchema to create your schema.',
'cradle-edit-schema-desc': 'Search for an existing EntitySchema (e.g. E10, Human) to edit its statements or ShEx code.',
'cradle-edit-summary': 'Updated statements with [[Wikidata:Cradle-gadget|Cradle-gadget]] ([[EntitySchema:$1]])',
'cradle-edit-summary-label': 'Summary:',
'cradle-edit-summary-placeholder': 'Edit summary (e.g. Added statements)...',
'cradle-edit-tab': 'Edit item',
'cradle-editing-schema-title': 'Editing EntitySchema: $1',
'cradle-editor': 'Cradle Editor',
'cradle-editor-unsaved-warning': 'You have unsaved changes in this schema. Are you sure you want to leave?',
'cradle-enter-schema-title': 'Enter or select an EntitySchema to edit this item:',
'cradle-error-at-least-one-language': 'There must be at least one language.',
'cradle-export-shex': 'Export ShEx (EntitySchema)',
'cradle-feedback-btn': 'Feedback & bug reports',
'cradle-feedback-desc': 'Have a suggestion, improvement, or found a bug in Cradle? Your report will be published as a new discussion topic on Wikidata talk:Cradle-gadget.',
'cradle-feedback-error': 'Failed to post feedback: $1',
'cradle-feedback-include-diagnostics': 'Include diagnostic details (Cradle version, browser, skin, page)',
'cradle-feedback-message-label': 'Detailed description:',
'cradle-feedback-message-placeholder': 'Describe your feedback or how to reproduce the issue in detail...',
'cradle-feedback-message-required': 'Please enter a description or message.',
'cradle-feedback-open-talk-btn': 'Open talk page',
'cradle-feedback-subject-label': 'Subject:',
'cradle-feedback-subject-placeholder': 'Brief summary of your suggestion or bug...',
'cradle-feedback-subject-required': 'Please enter a subject.',
'cradle-feedback-submit-btn': 'Publish',
'cradle-feedback-submitting': 'Publishing to talk page...',
'cradle-feedback-success': 'Feedback successfully posted to Wikidata talk:Cradle-gadget!',
'cradle-feedback-summary': 'New feedback via Cradle gadget',
'cradle-feedback-title': 'Suggestions and bug reports',
'cradle-feedback-type-bug': 'Bug report',
'cradle-feedback-type-congratulations': 'Congratulations',
'cradle-feedback-type-label': 'Type:',
'cradle-feedback-type-question': 'Question / general comment',
'cradle-feedback-type-suggestion': 'Suggestion / feature request',
'cradle-fetching-wikidata-recoin': 'Querying Wikidata and Recoin API...',
'cradle-hardselect-label': 'Fixed options (Hardselect)',
'cradle-hardselect-placeholder': 'hardselect QIDs (comma-separated, e.g. Q5,Q6)',
'cradle-import-from-item': 'Import from item',
'cradle-importer-p106-available-badge': 'No previous schema',
'cradle-importer-p106-no-schema': 'No previous schema detected for this occupation (Ideal for new specialized schema).',
'cradle-importer-p106-schema-exists': 'Existing schema detected for this occupation ($1). Review existing schema to avoid duplicates.',
'cradle-importer-select-occupation': 'Select occupation:',
'cradle-importer-sort-alphabetical': 'Alphabetical (A → Z)',
'cradle-importer-sort-label': 'Sort properties:',
'cradle-importer-sort-pid': 'Property ID (P1 → P...)',
'cradle-importer-sort-recoin': 'Recoin frequency (highest first)',
'cradle-importer-target-mode-label': 'Schema target type:',
'cradle-importer-target-p106': 'Occupation specialization (P106)',
'cradle-importer-target-p31': 'General class (P31)',
'cradle-label-required': 'New item label is required!',
'cradle-link-p12861-checkbox': 'Link schema to associated class ($1) via P12861 upon creation',
'cradle-link-p12861-derivation-skip': 'P12861 will not be added to the target class because this schema is a derivation.',
'cradle-link-p12861-summary': 'Add EntitySchema $1 (P12861) via Cradle',
'cradle-load-and-edit-schema': 'Load schema for editing',
'cradle-load-item-btn': 'Load item',
'cradle-load-schema': 'Load schema',
'cradle-load-schema-error': 'Error loading schema',
'cradle-loading-item': 'Loading...',
'cradle-loading-schema': 'Loading schema $1...',
'cradle-loading-templates': 'Loading templates from Wikidata:Cradle...',
'cradle-login-required-schema': 'Log in to create custom schemas.',
'cradle-mandatory-error': 'Property $1 ($2) is mandatory!',
'cradle-method-predefined': 'Use a predefined Cradle form',
'cradle-method-schema': 'Use an EntitySchema ID (ShEx)',
'cradle-missing-optional-prop': 'Optional schema property',
'cradle-missing-required-prop': 'Required by schema (missing)',
'cradle-mode-code': 'Code mode (ShEx)',
'cradle-mode-visual': 'Visual mode (GUI)',
'cradle-monolingual-text-placeholder': 'Text in language...',
'cradle-native-schema-title': 'EntitySchema compliance',
'cradle-new-item-aliases': 'Aliases (pipe-separated |, e.g. Marie Curie | Curie, Marie)...',
'cradle-new-item-desc': 'Enter item description (e.g. Polish-French physicist)...',
'cradle-new-item-identity': 'New item identity',
'cradle-new-item-identity-desc': 'Provide the label and description for the new Wikidata item.',
'cradle-new-item-label': 'Enter item label (e.g. Marie Curie)...',
'cradle-no-changes': 'No changes detected!',
'cradle-no-custom-schemas': 'You have no custom schemas yet.',
'cradle-no-results': 'No schemas found.',
'cradle-open-created-schema': 'View EntitySchema ($1)',
'cradle-open-newentityschema': 'Go to Special:NewEntitySchema',
'cradle-or-enter-schema': 'Or enter another EntitySchema ID:',
'cradle-orgroup-label': 'Alternative group (OR):',
'cradle-preset-none': 'No predefined values',
'cradle-prop-invalid-id': 'Invalid property ID (e.g. P17)!',
'cradle-prop-placeholder': 'e.g. P17',
'cradle-prop-search-placeholder': 'Search property by name or PID (e.g. P17, country)',
'cradle-properties-list': 'Form properties list:',
'cradle-publish-shex-failed': 'Failed to publish EntitySchema: $1',
'cradle-publish-shex-success': 'EntitySchema $1 published successfully on Wikidata!',
'cradle-publishing-shex': 'Publishing EntitySchema to Wikidata...',
'cradle-qualifiers': 'Qualifiers',
'cradle-rank': 'Rank',
'cradle-rank-deprecated': 'Deprecated',
'cradle-rank-normal': 'Normal',
'cradle-rank-preferred': 'Preferred',
'cradle-ref-url-placeholder': 'Enter URL, DOI, ISBN or PMID...',
'cradle-references': 'References',
'cradle-remove-qualifier': 'Remove qualifier',
'cradle-remove-reference': 'Remove reference',
'cradle-required-checkbox': 'Required',
'cradle-save-changes': 'Save changes',
'cradle-save-error': 'Error saving item: $1',
'cradle-save-schema': 'Save schema',
'cradle-save-schema-failed': 'Failed to save schema: $1',
'cradle-save-schema-success': 'EntitySchema $1 updated successfully on Wikidata!',
'cradle-save-success': 'Claims successfully updated! Reloading...',
'cradle-saving-schema': 'Saving changes to EntitySchema...',
'cradle-schema-aliases-placeholder': 'Schema aliases (pipe-separated |, e.g. stadium | arena)...',
'cradle-schema-deleted': 'Schema deleted successfully.',
'cradle-schema-desc': 'Description',
'cradle-schema-desc-placeholder': 'Schema description (e.g. Schema for football stadiums)...',
'cradle-schema-designer': 'Cradle Schema Designer',
'cradle-schema-edit-loss-warning': 'Switching to Visual mode will update properties from the ShEx code. Proceed?',
'cradle-schema-exists-custom': 'A custom schema already exists for $1: "$2".',
'cradle-schema-exists-matched': 'An existing EntitySchema was found for $1: $2 ($3).',
'cradle-schema-exists-notice': 'Schema already exists',
'cradle-schema-exists-p12861': 'An EntitySchema is already linked to $1 ($2) via P12861: $3.',
'cradle-schema-form-not-found': 'Special:NewEntitySchema form was not found. Check your account permissions.',
'cradle-schema-linked-p12861-failed': 'Could not link P12861 to $1: $2',
'cradle-schema-linked-p12861-notice': 'Property P12861 successfully added to $1',
'cradle-schema-linked-p12861-success': 'EntitySchema $1 linked to $2 via P12861!',
'cradle-schema-load-form-failed': 'Could not load Special:NewEntitySchema.',
'cradle-schema-not-found': 'Could not find the schema on the page!',
'cradle-schema-placeholder': 'Search EntitySchema by name or ID (e.g. E10, Human)...',
'cradle-schema-prop-required': 'You must add at least one property to the schema!',
'cradle-schema-saved': 'Schema saved successfully.',
'cradle-schema-search-placeholder': 'Search EntitySchema by name or ID (e.g. E10, Human)...',
'cradle-schema-target-item-label': 'Associated class/item',
'cradle-schema-target-item-placeholder': 'e.g. Q483110 (Stadium) or Q5 (Human)',
'cradle-schema-title': 'Schema title',
'cradle-schema-title-required': 'Schema title is required!',
'cradle-search-btn': 'Search',
'cradle-search-community': 'Search community schemas',
'cradle-search-placeholder': 'Search item...',
'cradle-search-placeholder-community': 'Search user schemas...',
'cradle-search-results': 'Search Results:',
'cradle-search-value-placeholder': 'Search QID to add...',
'cradle-searching': 'Searching...',
'cradle-select-all': 'Select all',
'cradle-select-p31-class': 'Select associated class (P31) for this schema:',
'cradle-select-predefined': '-- Select a predefined form --',
'cradle-select-props-to-import': 'Select properties to import:',
'cradle-set-as-base-schema-btn': 'Set $1 as base schema for derivation',
'cradle-shex-copied-auto': 'All ShEx code selected and copied to clipboard!',
'cradle-shex-invalid': 'Invalid ShEx syntax:',
'cradle-shex-preview': 'Generated ShEx (EntitySchema)',
'cradle-shex-syntax-invalid': 'Invalid ShEx syntax: $1',
'cradle-shex-syntax-valid': 'Valid ShEx syntax',
'cradle-shex-valid': 'Valid ShEx syntax for Wikidata',
'cradle-sidebar-create-schema': 'Create a new schema',
'cradle-sidebar-edit-schema': 'Edit a schema',
'cradle-sidebar-feedback': 'Feedback & bug reports',
'cradle-sidebar-header': 'Schemas',
'cradle-sidebar-random-schema': 'Random schema',
'cradle-sidebar-recent-schemas': 'Recent changes',
'cradle-softselect-label': 'Free suggestions (Softselect)',
'cradle-softselect-placeholder': 'softselect QIDs (comma-separated, e.g. Q5,Q6)',
'cradle-special-title': 'Cradle - Wikidata Schema Editor',
'cradle-subshape-classes-hint': 'Allowed classes (wdt:P31) for internal sub-schema:',
'cradle-subshape-external-id-label': 'External EntitySchema ID:',
'cradle-subshape-external-id-placeholder': 'e.g. E10 or E10#country',
'cradle-subshape-mode-external': 'External EntitySchema (IMPORT E...)',
'cradle-subshape-mode-internal': 'Internal in this schema (@<SubShape>)',
'cradle-subshape-mode-label': 'Sub-schema source:',
'cradle-subshape-name-label': 'Sub-schema name:',
'cradle-subshape-name-placeholder': 'Sub-schema name (e.g. country or ConservationStatus)',
'cradle-subtitle': 'Modify entity claims using schemas',
'cradle-summary-create-update-schema': 'Created/Updated Cradle schema: $1',
'cradle-tab-create-item': 'Create items',
'cradle-tab-design-schema': 'Design schemas',
'cradle-tab-edit-schema': 'Edit schemas',
'cradle-tab-edit-schema-badge': 'Experimental',
'cradle-tab-predefined': 'Predefined form',
'cradle-tab-shex': 'EntitySchema (ShEx)',
'cradle-use-base-schema-checkbox': 'Set $1 as base schema for this derivation',
'cradle-user-menu-btn': 'Create new item with Cradle',
'cradle-val-err-coords': 'Invalid coordinates (-90 to 90 lat, -180 to 180 lon)',
'cradle-val-err-max': 'At most $1 {{PLURAL:$1|value|values}} allowed',
'cradle-val-err-min': 'Needs at least $1 {{PLURAL:$1|value|values}}',
'cradle-val-err-num': 'Invalid number: $1',
'cradle-val-err-qid': 'Invalid QID: $1',
'cradle-val-missing': 'Missing!',
'cradle-val-optional-missing': 'Optional (Not set)',
'cradle-val-optional-present': 'Optional (Present)',
'cradle-val-present': 'Present',
'cradle-validate-shex-btn': 'Validate syntax',
'cradle-validation-error': 'Please fix the following validation errors:\n\n',
'cradle-validation-summary': 'Validation result for $1: $2 of $3 required {{PLURAL:$3|property|properties}} and $4 of $5 optional {{PLURAL:$5|property|properties}} present.',
'cradle-validation-tab': 'Validation',
'cradle-validation-title': 'Schema validation status',
'cradle-valtype-datetime': 'Date / time (xsd:dateTime)',
'cradle-valtype-decimal': 'Number / quantity (xsd:decimal)',
'cradle-valtype-geo': 'Coordinates (geo:wktLiteral)',
'cradle-valtype-label': 'Value type:',
'cradle-valtype-langstring': 'Monolingual text (rdf:langString)',
'cradle-valtype-qid': 'Wikidata item (QID)',
'cradle-valtype-string': 'Free text (xsd:string)',
'cradle-valtype-subshape': 'Sub-schema (@<SubShape>)',
'cradle-view-on-map': 'View on map'
};
// Load local English fallbacks first
mw.messages.set(fallbackMessages);
function loadCleanMessages(langMap) {
if (!langMap || typeof langMap !== 'object') return;
let clean = {};
for (let k in langMap) {
if (k !== '@metadata') clean[k] = langMap[k];
}
mw.messages.set(clean);
}
// English users need 0 network requests (embedded fallbackMessages are already loaded)
if (userLang === 'en') {
proceedInit();
return;
}
let baseLang = (userLang && userLang.includes('-')) ? userLang.split('-')[0] : null;
function fetchFallbackCatalog() {
let unifiedUrl = mw.util.wikiScript('index') + '?title=User:Danielyepezgarces/Gadget-cradle/i18n.json&action=raw&ctype=application/json';
$.getJSON(unifiedUrl).then(function(catalog) {
if (catalog) {
if (catalog[userLang]) loadCleanMessages(catalog[userLang]);
else if (baseLang && catalog[baseLang]) loadCleanMessages(catalog[baseLang]);
}
proceedInit();
}).catch(function(err) {
console.warn("[Cradle] Could not load i18n catalog, using local fallbacks:", err);
applyLocalSpanishFallback();
});
}
// Optimized on-demand i18n loader: fetch ONLY user's language subpage (~15 KB instead of full catalog)
let subpageUrl = mw.util.wikiScript('index') + '?title=User:Danielyepezgarces/Gadget-cradle/i18n/' + encodeURIComponent(userLang) + '.json&action=raw&ctype=application/json';
$.getJSON(subpageUrl).then(function(langData) {
if (langData) {
loadCleanMessages(langData);
}
proceedInit();
}).catch(function() {
if (baseLang) {
let baseUrl = mw.util.wikiScript('index') + '?title=User:Danielyepezgarces/Gadget-cradle/i18n/' + encodeURIComponent(baseLang) + '.json&action=raw&ctype=application/json';
$.getJSON(baseUrl).then(function(baseData) {
if (baseData) {
loadCleanMessages(baseData);
}
proceedInit();
}).catch(function() {
fetchFallbackCatalog();
});
} else {
fetchFallbackCatalog();
}
});
// Fallback for Spanish interface users
function applyLocalSpanishFallback() {
if (userLang === 'es' || baseLang === 'es') {
mw.messages.set({
'cradle-add-language': 'Añadir otro idioma',
'cradle-add-prop-btn': 'Añadir',
'cradle-add-property': 'Añadir propiedad',
'cradle-add-qualifier': 'Añadir cualificador',
'cradle-add-ref-property': 'Añadir propiedad a referencia',
'cradle-add-reference': 'Añadir referencia',
'cradle-add-value': 'Añadir valor',
'cradle-auto-cite': 'Autocompletar vía Citoid',
'cradle-back': 'Volver',
'cradle-base-schema-label': 'Esquema base / Derivación (IMPORT)',
'cradle-base-schema-notice': 'Esquema base existente detectado ($1). Puedes crear una derivación especializada (ej. Bombero derivado de Humano).',
'cradle-base-schema-placeholder': 'ej. E10 (Humano) o E519',
'cradle-btn-delete': 'Eliminar',
'cradle-btn-edit': 'Editar',
'cradle-btn-edit-with-cradle': 'Editar con Cradle',
'cradle-btn-load': 'Cargar',
'cradle-cancel': 'Cancelar',
'cradle-cardinality-1': '1 (Obligatorio, único)',
'cradle-cardinality-label': 'Cardinalidad:',
'cradle-cardinality-opt-multi': '0..* / * (Opcional, múltiple)',
'cradle-cardinality-opt-single': '0..1 / ? (Opcional, único)',
'cradle-cardinality-req-multi': '1..* / + (Obligatorio, múltiple)',
'cradle-change-form': 'Cambiar esquema',
'cradle-change-schema': 'Cambiar esquema',
'cradle-citoid-loading': 'Obteniendo metadatos (Citoid)...',
'cradle-citoid-success': '¡Metadatos cargados!',
'cradle-confirm-proceed': '¿Deseas continuar de todos modos?',
'cradle-constraint-citation': 'Las declaraciones deben tener al menos una referencia.',
'cradle-constraint-distinct': 'Restricción de valores distintos.',
'cradle-constraint-format': 'Restricción de formato',
'cradle-constraint-inverse': 'Restricción de propiedad inversa.',
'cradle-constraint-mandatory': 'Restricción de valor obligatorio: Se debe proporcionar un valor para esta propiedad.',
'cradle-constraint-mandatory-alert': 'La propiedad $1 ($2) tiene una restricción de valor obligatorio en Wikidata.',
'cradle-constraint-single': 'Restricción de valor único: Solo se permite un único valor para esta propiedad.',
'cradle-constraint-type': 'Restricción de tipo de entidad: Verifique que el valor sea del tipo de entidad requerido.',
'cradle-constraints-title': 'Restricciones de Wikidata ($1)',
'cradle-coord-lat-placeholder': 'ej. 8.76 u 8°45\'36"N',
'cradle-coord-lon-placeholder': 'ej. -75.88 o 75°53\'8"W',
'cradle-coord-placeholder': 'ej. 8°45\'36"N, 75°53\'8"W u 8.76, -75.88',
'cradle-coord-precision': 'Precisión: $1',
'cradle-copy-shex': 'Copiar ShEx',
'cradle-create-custom-schema-desc': 'Busca un EntitySchema existente (ej. E10, Humano) para cargar sus declaraciones y crear un nuevo elemento.',
'cradle-create-entityschema-btn': 'Publicar EntitySchema en Wikidata',
'cradle-create-item': 'Crear elemento',
'cradle-create-schema': 'Diseñar nuevo esquema',
'cradle-create-shex-designer': 'Diseñar / Crear nuevo EntitySchema (ShEx)',
'cradle-create-success': '¡Elemento $1 creado con éxito! Redirigiendo...',
'cradle-create-summary': 'Nuevo elemento creado con [[Wikidata:Cradle-gadget|Cradle-gadget]] (Plantilla: $1)',
'cradle-create-tab': 'Crear nuevo',
'cradle-credits': 'Creado por $1 y $2. Basado en $3 de $4.',
'cradle-custom-schemas': 'Mis esquemas personalizados',
'cradle-default-edit-summary': 'Actualización de EntitySchema vía Cradle',
'cradle-default-val-placeholder': 'valor/QID por defecto',
'cradle-delete-schema-confirm': '¿Estás seguro de que deseas eliminar el esquema "$1"?',
'cradle-designer-custom-desc': 'Diseña un nuevo esquema desde cero o importando propiedades de un elemento existente para publicarlo en Wikidata como un EntitySchema (ShEx).',
'cradle-detected-schemas': 'Esquemas detectados para este elemento:',
'cradle-direct-api-disabled-notice': 'La publicación directa por API está deshabilitada temporalmente. Usa Special:NewEntitySchema para crear tu esquema.',
'cradle-edit-schema-desc': 'Busca un EntitySchema existente (ej. E10, Humano) para editar sus declaraciones o código ShEx.',
'cradle-edit-summary': 'Declaraciones actualizadas con [[Wikidata:Cradle-gadget|Cradle-gadget]] ([[EntitySchema:$1]])',
'cradle-edit-summary-label': 'Resumen:',
'cradle-edit-summary-placeholder': 'Resumen de edición (ej. Declaraciones añadidas)...',
'cradle-edit-tab': 'Editar elemento',
'cradle-editing-schema-title': 'Editando EntitySchema: $1',
'cradle-editor': 'Editor Cradle',
'cradle-editor-unsaved-warning': 'Tienes cambios no guardados en este esquema. ¿Seguro que deseas salir?',
'cradle-enter-schema-title': 'Introduce o selecciona un EntitySchema para editar este elemento:',
'cradle-error-at-least-one-language': 'Debe haber al menos un idioma.',
'cradle-export-shex': 'Exportar ShEx (EntitySchema)',
'cradle-feedback-btn': 'Sugerencias y reporte de errores',
'cradle-feedback-desc': '¿Tienes una sugerencia, mejora o encontraste un error en Cradle? Tu mensaje se publicará como un nuevo tema de discusión en Wikidata talk:Cradle-gadget.',
'cradle-feedback-error': 'Error al publicar en la página de discusión: $1',
'cradle-feedback-include-diagnostics': 'Incluir información técnica de diagnóstico (versión de Cradle, navegador, apariencia, página)',
'cradle-feedback-message-label': 'Descripción detallada:',
'cradle-feedback-message-placeholder': 'Describe tu sugerencia detalladamente o los pasos para reproducir el error...',
'cradle-feedback-message-required': 'Por favor, introduce una descripción o mensaje.',
'cradle-feedback-open-talk-btn': 'Abrir página de discusión',
'cradle-feedback-subject-label': 'Asunto:',
'cradle-feedback-subject-placeholder': 'Resumen breve de tu sugerencia o error...',
'cradle-feedback-subject-required': 'Por favor, introduce un asunto.',
'cradle-feedback-submit-btn': 'Publicar',
'cradle-feedback-submitting': 'Publicando en la página de discusión...',
'cradle-feedback-success': '¡Mensaje publicado con éxito en Wikidata talk:Cradle-gadget!',
'cradle-feedback-summary': 'Nuevo mensaje vía Cradle gadget',
'cradle-feedback-title': 'Sugerencias y reporte de errores',
'cradle-feedback-type-bug': 'Reporte de error (Bug)',
'cradle-feedback-type-congratulations': 'Felicitaciones',
'cradle-feedback-type-label': 'Tipo:',
'cradle-feedback-type-question': 'Pregunta / Comentario general',
'cradle-feedback-type-suggestion': 'Sugerencia / Nueva función',
'cradle-fetching-wikidata-recoin': 'Consultando Wikidata y Recoin API...',
'cradle-hardselect-label': 'Opciones fijas (Hardselect)',
'cradle-hardselect-placeholder': 'QIDs predefinidos (separados por coma, ej. Q5,Q6)',
'cradle-import-from-item': 'Importar desde elemento',
'cradle-importer-p106-available-badge': 'Sin esquema previo',
'cradle-importer-p106-no-schema': 'Sin esquema previo para esta ocupación (Ideal para crear un nuevo esquema derivado).',
'cradle-importer-p106-schema-exists': 'Se detectó un esquema existente para esta ocupación ($1). Revisa el esquema existente para evitar duplicados.',
'cradle-importer-select-occupation': 'Selecciona la ocupación:',
'cradle-importer-sort-alphabetical': 'Alfabético (A → Z)',
'cradle-importer-sort-label': 'Ordenar propiedades:',
'cradle-importer-sort-pid': 'Identificador (P1 → P...)',
'cradle-importer-sort-recoin': 'Frecuencia Recoin (mayor a menor)',
'cradle-importer-target-mode-label': 'Tipo de objetivo para el esquema:',
'cradle-importer-target-p106': 'Especialización por ocupación (P106)',
'cradle-importer-target-p31': 'Clase general (P31)',
'cradle-label-required': '¡La etiqueta del nuevo elemento es obligatoria!',
'cradle-link-p12861-checkbox': 'Vincular esquema a la clase asociada ($1) mediante P12861 al publicar',
'cradle-link-p12861-derivation-skip': 'No se añadirá P12861 a la clase asociada porque este esquema es una derivación.',
'cradle-link-p12861-summary': 'Añadir EntitySchema $1 (P12861) mediante Cradle',
'cradle-load-and-edit-schema': 'Cargar esquema para editar',
'cradle-load-item-btn': 'Cargar elemento',
'cradle-load-schema': 'Cargar esquema',
'cradle-load-schema-error': 'Error al cargar o renderizar el esquema',
'cradle-loading-item': 'Cargando...',
'cradle-loading-schema': 'Cargando el esquema $1...',
'cradle-loading-templates': 'Cargando plantillas desde Wikidata:Cradle...',
'cradle-login-required-schema': 'Inicie sesión para crear esquemas personalizados.',
'cradle-mandatory-error': '¡La propiedad $1 ($2) es obligatoria!',
'cradle-method-predefined': 'Usar un formulario predefinido de Cradle',
'cradle-method-schema': 'Usar un ID de EntitySchema (ShEx)',
'cradle-missing-optional-prop': 'Propiedad opcional del esquema',
'cradle-missing-required-prop': 'Requerida por esquema (faltante)',
'cradle-mode-code': 'Modo código (ShEx)',
'cradle-mode-visual': 'Modo visual (GUI)',
'cradle-monolingual-text-placeholder': 'Texto en idioma...',
'cradle-native-schema-title': 'Cumplimiento de EntitySchema',
'cradle-new-item-aliases': 'Alias (separados por plecas |, ej. Marie Curie | Curie, Marie)...',
'cradle-new-item-desc': 'Introduce la descripción del elemento (ej. física polaca-francesa)...',
'cradle-new-item-identity': 'Identidad del nuevo elemento',
'cradle-new-item-identity-desc': 'Proporciona la etiqueta y descripción para el nuevo elemento de Wikidata.',
'cradle-new-item-label': 'Introduce la etiqueta del elemento (ej. Marie Curie)...',
'cradle-no-changes': '¡No se detectaron cambios!',
'cradle-no-custom-schemas': 'Aún no tienes esquemas personalizados creados.',
'cradle-no-results': 'No se encontraron esquemas.',
'cradle-open-created-schema': 'Ver EntitySchema ($1)',
'cradle-open-newentityschema': 'Ir a Special:NewEntitySchema',
'cradle-or-enter-schema': 'O introduce otro ID de EntitySchema:',
'cradle-orgroup-label': 'Grupo alternativo (OR):',
'cradle-preset-none': 'Sin valores predefinidos',
'cradle-prop-invalid-id': '¡ID de propiedad inválido (ej. P17)!',
'cradle-prop-placeholder': 'ej. P17',
'cradle-prop-search-placeholder': 'Buscar propiedad por nombre o PID (ej. P17, país)',
'cradle-properties-list': 'Lista de propiedades del formulario:',
'cradle-publish-shex-failed': 'Error al publicar EntitySchema: $1',
'cradle-publish-shex-success': '¡EntitySchema $1 publicado con éxito en Wikidata!',
'cradle-publishing-shex': 'Publicando EntitySchema en Wikidata...',
'cradle-qualifiers': 'Cualificadores',
'cradle-rank': 'Rango',
'cradle-rank-deprecated': 'En desuso',
'cradle-rank-normal': 'Normal',
'cradle-rank-preferred': 'Preferido',
'cradle-ref-url-placeholder': 'Ingresar URL, DOI, ISBN o PMID...',
'cradle-references': 'Referencias',
'cradle-remove-qualifier': 'Eliminar cualificador',
'cradle-remove-reference': 'Eliminar referencia',
'cradle-required-checkbox': 'Obligatorio',
'cradle-save-changes': 'Guardar cambios',
'cradle-save-error': 'Error al guardar el elemento: $1',
'cradle-save-schema': 'Guardar esquema',
'cradle-save-schema-failed': 'Error al guardar el esquema: $1',
'cradle-save-schema-success': '¡EntitySchema $1 actualizado con éxito en Wikidata!',
'cradle-save-success': '¡Declaraciones actualizadas con éxito! Recargando...',
'cradle-saving-schema': 'Guardando cambios en el EntitySchema...',
'cradle-schema-aliases-placeholder': 'Alias del esquema separados por plecas (ej. estadio | cancha)...',
'cradle-schema-deleted': 'Esquema eliminado correctamente.',
'cradle-schema-desc': 'Descripción',
'cradle-schema-desc-placeholder': 'Descripción del esquema (ej. Esquema para estadios de fútbol)...',
'cradle-schema-designer': 'Diseñador de esquemas de Cradle',
'cradle-schema-edit-loss-warning': 'Cambiar al modo visual actualizará las propiedades a partir del código ShEx. ¿Deseas continuar?',
'cradle-schema-exists-custom': 'Ya existe un esquema personalizado para $1: «$2».',
'cradle-schema-exists-matched': 'Se encontró un EntitySchema existente para $1: $2 ($3).',
'cradle-schema-exists-notice': 'El esquema ya existe',
'cradle-schema-exists-p12861': 'Ya hay un EntitySchema vinculado a $1 ($2) mediante P12861: $3.',
'cradle-schema-form-not-found': 'No se encontró el formulario de Special:NewEntitySchema. Comprueba los permisos de tu cuenta.',
'cradle-schema-linked-p12861-failed': 'No se pudo vincular P12861 a $1: $2',
'cradle-schema-linked-p12861-notice': 'Propiedad P12861 añadida exitosamente a $1',
'cradle-schema-linked-p12861-success': '¡EntitySchema $1 vinculado a $2 mediante P12861!',
'cradle-schema-load-form-failed': 'No se pudo cargar Special:NewEntitySchema.',
'cradle-schema-not-found': '¡No se pudo encontrar el esquema en la página!',
'cradle-schema-placeholder': 'Buscar EntitySchema por nombre o ID (ej. E10, Humano)...',
'cradle-schema-prop-required': '¡Debe añadir al menos una propiedad al esquema!',
'cradle-schema-saved': 'Esquema guardado correctamente.',
'cradle-schema-search-placeholder': 'Buscar EntitySchema por nombre o ID (ej. E10, Humano)...',
'cradle-schema-target-item-label': 'Elemento asociado',
'cradle-schema-target-item-placeholder': 'Ej: Q483110 (Estadio) o Q5 (Humano)',
'cradle-schema-title': 'Título del esquema',
'cradle-schema-title-required': '¡El título del esquema es requerido!',
'cradle-search-btn': 'Buscar',
'cradle-search-community': 'Buscar esquemas de otros usuarios',
'cradle-search-placeholder': 'Buscar elemento...',
'cradle-search-placeholder-community': 'Buscar esquemas de usuarios...',
'cradle-search-results': 'Resultados de búsqueda:',
'cradle-search-value-placeholder': 'Buscar QID de valor para añadir...',
'cradle-searching': 'Buscando...',
'cradle-select-all': 'Seleccionar todas',
'cradle-select-p31-class': 'Seleccione la clase asociada (P31) para este esquema:',
'cradle-select-predefined': '-- Selecciona un formulario predefinido --',
'cradle-select-props-to-import': 'Selecciona las propiedades a importar:',
'cradle-set-as-base-schema-btn': 'Establecer $1 como esquema base para derivación',
'cradle-shex-copied-auto': '¡Todo el código ShEx fue seleccionado y copiado al portapapeles!',
'cradle-shex-invalid': 'Sintaxis ShEx no válida:',
'cradle-shex-preview': 'Código ShEx generado (EntitySchema)',
'cradle-shex-syntax-invalid': 'Sintaxis ShEx inválida: $1',
'cradle-shex-syntax-valid': 'Sintaxis ShEx válida',
'cradle-shex-valid': 'Sintaxis ShEx válida para Wikidata',
'cradle-sidebar-create-schema': 'Crear un esquema nuevo',
'cradle-sidebar-edit-schema': 'Editar un esquema',
'cradle-sidebar-feedback': 'Sugerencias y errores',
'cradle-sidebar-header': 'Esquemas',
'cradle-sidebar-random-schema': 'Esquema aleatorio',
'cradle-sidebar-recent-schemas': 'Cambios recientes',
'cradle-softselect-label': 'Sugerencias libres (Softselect)',
'cradle-softselect-placeholder': 'sugerencias de QIDs (separados por coma, ej. Q5,Q6)',
'cradle-special-title': 'Cradle - Wikidata Schema Editor',
'cradle-subshape-classes-hint': 'Clases permitidas (wdt:P31) para el sub-esquema interno:',
'cradle-subshape-external-id-label': 'ID del EntitySchema externo:',
'cradle-subshape-external-id-placeholder': 'ej. E10 o E10#country',
'cradle-subshape-mode-external': 'EntitySchema externo (IMPORT E...)',
'cradle-subshape-mode-internal': 'Interno en este esquema (@<SubForma>)',
'cradle-subshape-mode-label': 'Origen del sub-esquema:',
'cradle-subshape-name-label': 'Nombre del sub-esquema:',
'cradle-subshape-name-placeholder': 'Nombre del sub-esquema (ej. country o EstadoConservacion)',
'cradle-subtitle': 'Modificar declaraciones utilizando esquemas',
'cradle-summary-create-update-schema': 'Creado/Actualizado esquema de Cradle: $1',
'cradle-tab-create-item': 'Crear elementos',
'cradle-tab-design-schema': 'Diseñar esquemas',
'cradle-tab-edit-schema': 'Editar esquemas',
'cradle-tab-edit-schema-badge': 'Experimental',
'cradle-tab-predefined': 'Formulario predefinido',
'cradle-tab-shex': 'EntitySchema (ShEx)',
'cradle-use-base-schema-checkbox': 'Establecer $1 como esquema base para esta derivación',
'cradle-user-menu-btn': 'Crear elemento nuevo con Cradle',
'cradle-val-err-coords': 'Coordenadas geográficas inválidas (-90 a 90 lat, -180 a 180 lon)',
'cradle-val-err-max': 'Se {{PLURAL:$1|permite como máximo $1 valor|permiten como máximo $1 valores}}',
'cradle-val-err-min': 'Requiere al menos $1 {{PLURAL:$1|valor|valores}}',
'cradle-val-err-num': 'Número no válido: $1',
'cradle-val-err-qid': 'QID no válido: $1',
'cradle-val-missing': '¡Falta!',
'cradle-val-optional-missing': 'Opcional (Sin establecer)',
'cradle-val-optional-present': 'Opcional (Presente)',
'cradle-val-present': 'Presente',
'cradle-validate-shex-btn': 'Validar sintaxis',
'cradle-validation-error': 'Por favor, corrige los siguientes errores de validación:\n\n',
'cradle-validation-summary': 'Resultado de la validación para $1: $2 de $3 {{PLURAL:$3|propiedad requerida|propiedades requeridas}} y $4 de $5 {{PLURAL:$5|propiedad opcional|propiedades opcionales}} presentes.',
'cradle-validation-tab': 'Validación',
'cradle-validation-title': 'Estado de validación de esquema',
'cradle-valtype-datetime': 'Fecha / Tiempo (xsd:dateTime)',
'cradle-valtype-decimal': 'Número / Medida (xsd:decimal)',
'cradle-valtype-geo': 'Coordenadas (geo:wktLiteral)',
'cradle-valtype-label': 'Tipo de valor:',
'cradle-valtype-langstring': 'Texto en idioma (rdf:langString)',
'cradle-valtype-qid': 'Elemento Wikidata (QID)',
'cradle-valtype-string': 'Texto libre (xsd:string)',
'cradle-valtype-subshape': 'Sub-esquema (@<SubForma>)',
'cradle-view-on-map': 'Ver en mapa'
});
}
proceedInit();
}
}
/**
* Completes script initialization.
*/
function proceedInit() {
fetchSortedProperties();
// Add Toolbox portlet link in the sidebar on all pages
let cradleTbLink = mw.util.addPortletLink(
'p-tb',
mw.util.getUrl('Special:Cradle') + '#create',
'Cradle',
't-cradle',
'Create items using Cradle templates or schemas'
);
if (cradleTbLink) {
$(cradleTbLink).find('a').addBack('a').on('click', function(e) {
mw.storage.set('cradle-active-tab', 'create');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'create';
renderCreateOptionsSelector();
}
});
}
// Add dedicated 'Esquemas' section to Wikidata sidebar
setupSidebarSchemasSection();
if (isSpecialCradle) {
setupSpecialPage();
} else if (isItemPage) {
createHeadingButton();
// Scan for schemas if on an item page (uses caching/on-demand loader)
schemasLoadedPromise = getEntityData().then(data => {
return findAssociatedSchemas(data);
}).then(schemas => {
detectedSchemas = schemas;
logDebug("[Cradle] Detected EntitySchemas:", detectedSchemas);
return schemas;
}).catch(err => {
logError("[Cradle] Error loading claims/schemas:", err);
return [];
});
}
}
/**
* Adds a dedicated "Esquemas" section to the Wikidata sidebar matching Wikibase Lexeme portlet structure.
*/
function setupSidebarSchemasSection() {
if ($('#p-cradle-schemas').length || $('#p-cradle-schemas-mobile').length) return;
let sectionHeader = mw.msg('cradle-sidebar-header') || 'Esquemas';
let createText = mw.msg('cradle-sidebar-create-schema') || 'Crear un esquema nuevo';
let editText = mw.msg('cradle-sidebar-edit-schema') || 'Editar un esquema';
let recentText = mw.msg('cradle-sidebar-recent-schemas') || 'Cambios recientes';
let randomText = mw.msg('cradle-sidebar-random-schema') || 'Esquema aleatorio';
let feedbackText = mw.msg('cradle-sidebar-feedback') || 'Sugerencias y errores';
let createUrl = mw.util.getUrl('Special:Cradle') + '#design';
let editUrl = mw.util.getUrl('Special:Cradle') + '#edit';
let recentUrl = mw.util.getUrl('Special:RecentChanges', { namespace: 640 });
let randomUrl = mw.util.getUrl('Special:Random/EntitySchema');
let feedbackUrl = mw.util.getUrl('Wikidata_talk:Cradle-gadget');
let currentSkin = mw.config.get('skin') || '';
let isMinerva = currentSkin === 'minerva' || $('body').hasClass('skin-minerva') || $('#mw-mf-page-left').length > 0;
// ── 1. Minerva Neue (MobileFrontend) Support ──
if (isMinerva) {
let injectMinervaLinks = function() {
if ($('#p-cradle-schemas').length) return;
let $container = $('#mw-mf-page-left');
if (!$container.length) return;
let $cradleUl = $('<ul>')
.attr('id', 'p-cradle-schemas')
.addClass('toggle-list__list');
let createMobileItem = function(id, href, text, iconClass, targetTab) {
let $li = $('<li>').addClass('toggle-list-item').attr('id', id);
let $a = $('<a>').addClass('toggle-list-item__anchor')
.attr({
'href': href,
'data-mw-interface': '1'
});
let $icon = $('<span>').addClass('minerva-icon ' + iconClass);
let $label = $('<span>').addClass('toggle-list-item__label').text(text);
if (targetTab) {
$a.on('click', function(e) {
mw.storage.set('cradle-active-tab', targetTab);
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = targetTab;
// Smoothly close Minerva drawer
$('#main-menu-input').prop('checked', false);
renderCreateOptionsSelector();
}
});
}
$a.append($icon).append($label);
$li.append($a);
return $li;
};
let $mCradle = createMobileItem('n-cradle-home-m', mw.util.getUrl('Special:Cradle') + '#create', 'Cradle', 'minerva-icon--specialPages', 'create');
let $mCreate = createMobileItem('n-cradle-newschema-m', createUrl, createText, 'minerva-icon--articleRedirect', 'design');
let $mEdit = createMobileItem('n-cradle-editschema-m', editUrl, editText, 'minerva-icon--edit', 'edit');
let $mRecent = createMobileItem('n-cradle-recentchanges-schemas-m', recentUrl, recentText, 'minerva-icon--recentChanges', false);
let $mRandom = createMobileItem('n-cradle-randomschema-m', randomUrl, randomText, 'minerva-icon--die', false);
let $mFeedback = createMobileItem('n-cradle-feedback-m', feedbackUrl, feedbackText, 'minerva-icon--speechBubbles', false);
$mFeedback.find('a').on('click', function(e) {
e.preventDefault();
$('#main-menu-input').prop('checked', false);
openFeedbackModal();
});
$cradleUl.append($mCradle).append($mCreate).append($mEdit).append($mRecent).append($mRandom).append($mFeedback);
if ($('#p-interaction').length) {
$cradleUl.insertAfter('#p-interaction');
} else if ($('#p-navigation').length) {
$cradleUl.insertAfter('#p-navigation');
} else {
$container.children('ul').last().after($cradleUl);
}
};
injectMinervaLinks();
mw.hook('mobileFrontend.mainMenu').add(injectMinervaLinks);
return;
}
// ── 2. Desktop Skins via native MediaWiki mw.util.addPortlet API ──
let beforeSelector = '#p-wikibase-lexeme-lexicographical-data, #p-tb, #p-navigation, #p-interaction';
let portletAdded = false;
if (typeof mw.util.addPortlet === 'function') {
try {
let targetNext = $(beforeSelector).first()[0];
let p = mw.util.addPortlet('p-cradle-schemas', sectionHeader, targetNext);
if (p) {
portletAdded = true;
let $p = $(p);
$p.addClass('vector-menu');
$p.children('div, label, h3').first().addClass('vector-menu-heading').text(sectionHeader);
$p.children('div').last().addClass('vector-menu-content');
$p.find('ul').addClass('vector-menu-content-list');
let createLink = mw.util.addPortletLink('p-cradle-schemas', createUrl, createText, 'n-cradle-newschema');
if (createLink) {
$(createLink).find('a').addBack('a').on('click', function(e) {
mw.storage.set('cradle-active-tab', 'design');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'design';
renderCreateOptionsSelector();
}
});
}
let editLink = mw.util.addPortletLink('p-cradle-schemas', editUrl, editText, 'n-cradle-editschema');
if (editLink) {
$(editLink).find('a').addBack('a').on('click', function(e) {
mw.storage.set('cradle-active-tab', 'edit');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'edit';
renderCreateOptionsSelector();
}
});
}
mw.util.addPortletLink('p-cradle-schemas', recentUrl, recentText, 'n-cradle-recentchanges-schemas');
mw.util.addPortletLink('p-cradle-schemas', randomUrl, randomText, 'n-cradle-randomschema');
let feedbackLink = mw.util.addPortletLink('p-cradle-schemas', feedbackUrl, feedbackText, 'n-cradle-feedback');
if (feedbackLink) {
$(feedbackLink).find('a').addBack('a').on('click', function(e) {
e.preventDefault();
openFeedbackModal();
});
}
}
} catch (err) {
logDebug("[Cradle] mw.util.addPortlet error, fallback to manual DOM:", err);
}
}
// ── 3. Fallback: Manual DOM injection tailored for Monobook, Vector 2022, Timeless & Vector 2010 ──
if (!portletAdded) {
let isMonobook = currentSkin === 'monobook' || $('body').hasClass('skin-monobook') || $('#column-one').length > 0;
let $sidebar = isMonobook
? $('#column-one').first()
: $('#vector-main-menu, .vector-main-menu, #mw-panel, #mw-site-navigation, #p-navigation, .vector-main-menu-content, #mw-navigation').first();
if (!$sidebar.length) return;
let $portlet, $heading, $body, $ul;
if (isMonobook) {
// Monobook native structure: <div class="portlet"><h5>...</h5><div class="pBody"><ul>...
$portlet = $('<div>')
.addClass('portlet mw-portlet mw-portlet-cradle-schemas')
.attr({ 'id': 'p-cradle-schemas', 'role': 'navigation' });
$heading = $('<h5>')
.attr('id', 'p-cradle-schemas-label')
.text(sectionHeader);
$body = $('<div>').addClass('pBody mw-portlet-body');
$ul = $('<ul>');
} else if (currentSkin === 'vector-2022' || $('body').hasClass('skin-vector-2022') || $('.vector-main-menu').length > 0) {
// Vector 2022 native structure: <div class="vector-menu"><div class="vector-menu-heading">...</div><div class="vector-menu-content"><ul>...
$portlet = $('<div>')
.addClass('vector-menu mw-portlet mw-portlet-cradle-schemas')
.attr({
'id': 'p-cradle-schemas',
'role': 'navigation',
'aria-labelledby': 'p-cradle-schemas-label'
});
$heading = $('<div>')
.addClass('vector-menu-heading')
.attr('id', 'p-cradle-schemas-label')
.text(sectionHeader);
$body = $('<div>').addClass('vector-menu-content');
$ul = $('<ul>').addClass('vector-menu-content-list');
} else {
// Vector 2010 / Timeless native structure
$portlet = $('<nav>')
.addClass('vector-menu vector-menu-portal portal mw-portlet mw-portlet-cradle-schemas')
.attr({
'id': 'p-cradle-schemas',
'role': 'navigation',
'aria-labelledby': 'p-cradle-schemas-label'
});
$heading = $('<h3>')
.addClass('vector-menu-heading mw-portlet-heading')
.attr('id', 'p-cradle-schemas-label')
.append($('<span>').text(sectionHeader));
$body = $('<div>').addClass('vector-menu-content mw-portlet-body body');
$ul = $('<ul>').addClass('vector-menu-content-list');
}
let $liCreate = $('<li>').attr('id', 'n-cradle-newschema').addClass('mw-list-item')
.append($('<a>').attr('href', createUrl).append($('<span>').text(createText)).on('click', function(e) {
mw.storage.set('cradle-active-tab', 'design');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'design';
renderCreateOptionsSelector();
}
}));
let $liEdit = $('<li>').attr('id', 'n-cradle-editschema').addClass('mw-list-item')
.append($('<a>').attr('href', editUrl).append($('<span>').text(editText)).on('click', function(e) {
mw.storage.set('cradle-active-tab', 'edit');
if (isSpecialCradle) {
e.preventDefault();
window.location.hash = 'edit';
renderCreateOptionsSelector();
}
}));
let $liRecent = $('<li>').attr('id', 'n-cradle-recentchanges-schemas').addClass('mw-list-item')
.append($('<a>').attr('href', recentUrl).append($('<span>').text(recentText)));
let $liRandom = $('<li>').attr('id', 'n-cradle-randomschema').addClass('mw-list-item')
.append($('<a>').attr('href', randomUrl).append($('<span>').text(randomText)));
let $liFeedback = $('<li>').attr('id', 'n-cradle-feedback').addClass('mw-list-item')
.append($('<a>').attr('href', feedbackUrl).append($('<span>').text(feedbackText)).on('click', function(e) {
e.preventDefault();
openFeedbackModal();
}));
$ul.append($liCreate).append($liEdit).append($liRecent).append($liRandom).append($liFeedback);
$body.append($ul);
$portlet.append($heading).append($body);
if ($('#p-wikibase-lexeme-lexicographical-data').length) {
$portlet.insertBefore('#p-wikibase-lexeme-lexicographical-data');
} else if ($('#p-tb').length) {
$portlet.insertBefore('#p-tb');
} else if ($('#p-navigation').length) {
$portlet.insertAfter('#p-navigation');
} else {
$sidebar.append($portlet);
}
}
}
/**
* Set up Special:Cradle full page view.
*/
function setupSpecialPage() {
activeMode = 'create';
// Update browser document title
let specialTitle = mw.msg('cradle-special-title') || 'Cradle - Wikidata Schema Editor';
document.title = specialTitle;
// Set main heading
let $heading = $('#firstHeading');
if ($heading.length) {
$heading.text(specialTitle);
}
// Empty default content area
let $contentArea = $('#mw-content-text');
if ($contentArea.length === 0) return;
$contentArea.empty();
// Add structural HTML container
let $container = $('<div>').addClass('cradle-fullpage-container');
let $navTabs = $('<div>').attr('id', 'cradle-nav-tabs');
let $content = $('<div>').attr('id', 'cradle-content-area');
let $footer = $('<div>').addClass('cradle-footer').attr('id', 'cradle-footer-area').css({
'margin-top': '20px',
'border-radius': '2px',
'border': '1px solid var(--border-color-base, #a2a9b1)'
});
$container.append($navTabs).append($content).append($footer);
$contentArea.append($container);
// Listen to URL hash changes on Special:Cradle to switch tabs seamlessly
$(window).on('hashchange', function() {
renderCreateOptionsSelector();
});
// Remove early hiding styles so the newly rendered content and heading are displayed cleanly
let $earlyStyle = $('#cradle-early-hide-style');
if ($earlyStyle.length) {
$earlyStyle.remove();
}
renderCreateOptionsSelector();
}
/**
* Creates the "Editar con Cradle" button inside the main heading.
*/
function createHeadingButton() {
let $heading = $('#firstHeading');
if (!$heading.length) return;
// Prevent adding duplicate buttons
if ($('#cradle-heading-edit-btn').length) return;
let $editBtn = $('<button>')
.attr('id', 'cradle-heading-edit-btn')
.addClass('cradle-edit-heading-btn')
.text(mw.msg('cradle-btn-edit-with-cradle'))
.on('click', openEditor);
// Adjust margin-right dynamically if mw-indicators is present and populated
let $indicators = $('.mw-indicators');
if ($indicators.length && $indicators.children().length > 0) {
let indicatorsWidth = $indicators.outerWidth() || 0;
if (indicatorsWidth > 0) {
$editBtn.css('margin-right', (indicatorsWidth + 16) + 'px');
} else {
// Fallback margin if width not yet computed
$editBtn.css('margin-right', '48px');
}
}
$heading.append($editBtn);
}
/**
* Fetch the entity data from Wikidata Action API.
*/
function loadEntityData(id) {
return new Promise((resolve, reject) => {
let api = new mw.Api();
api.get({
action: 'wbgetentities',
ids: id,
format: 'json'
}).done(function(res) {
if (res && res.entities && res.entities[id]) {
resolve(res.entities[id]);
} else {
reject(new Error("Unable to load entity data"));
}
}).fail(function(err) {
reject(err);
});
});
}
/**
* Searches class properties (P12861) on P31, P279, and P106 claims of the entity.
*/
function findAssociatedSchemas(data) {
let schemas = [];
// Direct schema on this item
if (data.claims && data.claims[P12861]) {
data.claims[P12861].forEach(claim => {
let sId = parseEntitySchemaID(claim.mainsnak?.datavalue);
if (sId && !schemas.includes(sId)) {
schemas.push(sId);
}
});
}
// Check instance of (P31), subclass of (P279), and occupation (P106)
let classesToCheck = [];
[P31, P279, P106].forEach(prop => {
if (data.claims && data.claims[prop]) {
data.claims[prop].forEach(claim => {
if (claim.mainsnak && claim.mainsnak.datavalue && claim.mainsnak.datavalue.value) {
let classId = claim.mainsnak.datavalue.value.id;
if (classId && !classesToCheck.includes(classId)) {
classesToCheck.push(classId);
}
}
});
}
});
if (classesToCheck.length === 0) {
return Promise.resolve(schemas);
}
return new Promise((resolve) => {
let api = new mw.Api();
api.get({
action: 'wbgetentities',
ids: classesToCheck.join('|'),
props: 'claims',
format: 'json'
}).done(function(res) {
if (res && res.entities) {
Object.keys(res.entities).forEach(qid => {
let cls = res.entities[qid];
if (cls.claims && cls.claims[P12861]) {
cls.claims[P12861].forEach(claim => {
let schemaId = parseEntitySchemaID(claim.mainsnak?.datavalue);
if (schemaId && !schemas.includes(schemaId)) {
schemas.push(schemaId);
}
});
}
});
}
resolve(schemas);
}).fail(function(err) {
logError("[Cradle] findAssociatedSchemas request failed:", err);
resolve(schemas);
});
});
}
/**
* Opens the Sidebar Drawer editor.
*/
function openEditor() {
userWantsToChangeSchema = false;
if ($('.cradle-drawer').length === 0) {
createDrawerUI();
}
$('.cradle-drawer-overlay').addClass('open');
$('.cradle-drawer').addClass('open');
renderActiveView();
}
/**
* Closes the Sidebar Drawer editor.
*/
function closeEditor() {
$('.cradle-drawer').removeClass('open');
$('.cradle-drawer-overlay').removeClass('open');
// Reset state so that next open reloads clean data
schemaProperties = {};
propertyMetadata = {};
softselectLabels = {};
formState = {};
activeSchema = null;
activeTemplate = null;
}
/**
* Instantiates the Drawer HTML in the document body.
*/
function createDrawerUI() {
let $overlay = $('<div>').addClass('cradle-drawer-overlay');
let $drawer = $('<div>').addClass('cradle-drawer');
let $header = $('<div>').addClass('cradle-header');
let $titleArea = $('<div>').addClass('cradle-title-area');
$titleArea.append($('<h2>').addClass('cradle-title').text(mw.msg('cradle-editor')));
// Render tabs
let $tabs = $('<div>').addClass('cradle-tabs');
if (isItemPage) {
$tabs.append($('<div>').addClass('cradle-tab').attr('data-mode', 'edit').text(mw.msg('cradle-edit-tab')));
}
$tabs.append($('<div>').addClass('cradle-tab').attr('data-mode', 'create').text(mw.msg('cradle-create-tab')));
$titleArea.append($tabs);
let $closeBtn = $('<button>')
.addClass('cradle-close-btn')
.html(ICONS.close)
.on('click', closeEditor);
$header.append($titleArea).append($closeBtn);
let $navTabs = $('<div>').attr('id', 'cradle-nav-tabs');
let $content = $('<div>').addClass('cradle-content').attr('id', 'cradle-content-area');
let $footer = $('<div>').addClass('cradle-footer').attr('id', 'cradle-footer-area');
$drawer.append($header).append($navTabs).append($content).append($footer);
$overlay.on('click', closeEditor);
$drawer.on('click', function(e) { e.stopPropagation(); });
$('body').append($overlay).append($drawer);
// Bind tab events
$drawer.find('.cradle-tab').on('click', function() {
let mode = $(this).attr('data-mode');
if (mode === 'create') {
// Redirect directly to Special:Cradle#create instead of rendering inside drawer
location.href = mw.util.getUrl('Special:Cradle') + '#create';
return;
}
activeMode = mode;
$drawer.find('.cradle-tab').removeClass('active');
$(this).addClass('active');
renderActiveView();
});
// Set initial active tab
$drawer.find(`.cradle-tab[data-mode="${activeMode}"]`).addClass('active');
}
/**
* Renders either the Edit View or Create View based on activeMode.
*/
function renderActiveView() {
// If a schema or template is already active/loaded, just re-render the view
if (Object.keys(schemaProperties).length > 0) {
renderForm();
return;
}
activeSchema = null;
activeTemplate = null;
if (activeMode === 'edit') {
if (schemasLoadedPromise && !userWantsToChangeSchema) {
// Show loader spinner while waiting for class schemas scan to complete
let $content = $('#cradle-content-area').empty();
$content.append($('<div>').css({'text-align': 'center', 'margin-top': '40px'})
.append($('<div>').addClass('cradle-spinner').css({'border-top-color': 'var(--border-color-progressive, #36c)', 'width': '30px', 'height': '30px'}))
.append($('<p>').text('Checking associated schemas...'))
);
schemasLoadedPromise.then(schemas => {
if (schemas.length > 0 && !userWantsToChangeSchema) {
loadAndDisplaySchema(schemas[0]);
} else {
renderEditSchemaSelector();
}
});
} else {
renderEditSchemaSelector();
}
} else {
renderCreateOptionsSelector();
}
}
/**
* Render schema selector for Edit mode.
*/
function renderEditSchemaSelector() {
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
let $box = $('<div>').addClass('cradle-selector-box');
if (detectedSchemas.length > 0) {
$box.append($('<p>').css({'margin-top': '0', 'font-weight': 'bold'}).text(mw.msg('cradle-detected-schemas')));
let $btnGroup = $('<div>').css({'display': 'flex', 'flex-wrap': 'wrap', 'gap': '8px', 'margin-bottom': '16px'});
detectedSchemas.forEach(schemaId => {
let $btn = $('<button>')
.addClass('cradle-btn-secondary')
.css({'padding': '6px 12px'})
.text(schemaId)
.on('click', function() {
userWantsToChangeSchema = false;
loadAndDisplaySchema(schemaId);
});
$btnGroup.append($btn);
});
$box.append($btnGroup);
$box.append($('<p>').css({'font-weight': 'bold', 'margin-top': '12px'}).text(mw.msg('cradle-or-enter-schema')));
} else {
$box.append($('<p>').css({'margin-top': '0', 'font-weight': 'bold'}).text(mw.msg('cradle-enter-schema-title')));
}
let $manualInput = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-schema-placeholder'));
let $loadBtn = $('<button>')
.addClass('cradle-btn-secondary')
.text(mw.msg('cradle-load-schema'))
.on('click', function() {
let schemaId = $manualInput.val().trim().toUpperCase();
if (schemaId) {
if (!schemaId.startsWith('E')) {
schemaId = 'E' + schemaId.replace(/\D/g, '');
}
userWantsToChangeSchema = false;
loadAndDisplaySchema(schemaId);
}
});
let $inputGroup = $('<div>').css({'display': 'flex', 'gap': '8px', 'margin-top': '8px'});
$manualInput.css({'flex': '1'});
$inputGroup.append($manualInput).append($loadBtn);
$box.append($inputGroup);
attachEntitySchemaAutocompleter($inputGroup, $manualInput, function(schemaId) {
userWantsToChangeSchema = false;
loadAndDisplaySchema(schemaId);
});
$content.append($box);
}
/**
* Updates or renders the persistent top-level navigation tabs (#create, #design, #edit).
* These tabs remain present across form rendering, schema designer, and schema editor views.
*/
function updateNavigationTabs(activeTab) {
// Only show tabs if on Special:Cradle or if activeMode is create
if (!isSpecialCradle && activeMode === 'edit') {
$('#cradle-nav-tabs').empty().hide();
return;
}
let $nav = $('#cradle-nav-tabs');
if (!$nav.length) {
let $content = $('#cradle-content-area');
if ($content.length) {
$nav = $('<div>').attr('id', 'cradle-nav-tabs');
$content.before($nav);
} else {
return;
}
}
$nav.show().empty();
let tabs = [
{ id: 'create', label: mw.msg('cradle-tab-create-item') || 'Crear elementos' },
{ id: 'design', label: mw.msg('cradle-tab-design-schema') || 'Diseñar esquemas' },
{ id: 'edit', label: (mw.msg('cradle-tab-edit-schema') || 'Editar esquemas'), badge: mw.msg('cradle-tab-edit-schema-badge') || 'Experimental' }
];
let $tabsHeader = $('<div>').addClass('cradle-select-tabs');
tabs.forEach(tab => {
let $tab = $('<button>')
.attr('type', 'button')
.addClass('cradle-select-tab')
.text(tab.label);
if (tab.badge) {
$tab.append($('<span>').addClass('cradle-tab-badge').text(tab.badge));
}
if (activeTab === tab.id) {
$tab.addClass('active');
}
$tab.on('click', function() {
mw.storage.set('cradle-active-tab', tab.id);
let newHash = '#' + tab.id;
if (history.pushState) {
history.pushState(null, null, window.location.pathname + window.location.search + newHash);
} else {
window.location.hash = newHash;
}
// Reset active form/schema selection state so clicking a tab always returns to that tab's selector
schemaProperties = {};
propertyMetadata = {};
softselectLabels = {};
formState = {};
activeSchema = null;
activeTemplate = null;
userWantsToChangeSchema = false;
renderCreateOptionsSelector();
});
$tabsHeader.append($tab);
});
$nav.append($tabsHeader);
}
/**
* Renders selection panel with 3 tabs: 'Crear elementos', 'Diseñar esquemas', and 'Editar esquemas (Experimental)'.
*/
function renderCreateOptionsSelector() {
let hash = window.location.hash.toLowerCase();
let search = window.location.search.toLowerCase();
let activeTab = null;
if (hash.startsWith('#edit') || search.includes('tab=edit')) {
activeTab = 'edit';
} else if (hash.startsWith('#design') || search.includes('tab=design')) {
activeTab = 'design';
} else if (hash.startsWith('#create') || search.includes('tab=create')) {
activeTab = 'create';
} else {
activeTab = mw.storage.get('cradle-active-tab');
}
if (activeTab !== 'create' && activeTab !== 'design' && activeTab !== 'edit') {
activeTab = 'create';
}
if (isSpecialCradle && (!window.location.hash || window.location.hash === '#')) {
let targetHash = '#' + activeTab;
if (history.replaceState) {
history.replaceState(null, null, window.location.pathname + window.location.search + targetHash);
} else {
window.location.hash = targetHash;
}
}
updateNavigationTabs(activeTab);
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
if (activeTab === 'create') {
// Tab 1: Load Existing EntitySchema (ShEx) to create an item
let $loadBox = $('<div>').addClass('cradle-selector-box');
$loadBox.append($('<h4>').css({'margin': '0 0 6px 0', 'font-size': '14px', 'color': '#202122'})
.text(mw.msg('cradle-method-schema')));
$loadBox.append($('<p>').css({'margin': '0 0 12px 0', 'font-size': '12px', 'color': '#54595d'})
.text(mw.msg('cradle-create-custom-schema-desc') || 'Busca un EntitySchema existente (ej. E10, Humano) para cargar sus declaraciones y crear un nuevo elemento.'));
let $schemaInput = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-schema-placeholder'));
let $schemaBtn = $('<button>')
.addClass('cradle-btn-secondary')
.text(mw.msg('cradle-load-schema'))
.on('click', function() {
let schemaId = $schemaInput.val().trim().toUpperCase();
if (schemaId) {
if (!schemaId.startsWith('E')) {
schemaId = 'E' + schemaId.replace(/\D/g, '');
}
loadAndDisplaySchema(schemaId);
}
});
let $group = $('<div>').css({'display': 'flex', 'gap': '8px'});
$schemaInput.css({'flex': '1'});
$group.append($schemaInput).append($schemaBtn);
$loadBox.append($group);
attachEntitySchemaAutocompleter($group, $schemaInput, function(schemaId) {
loadAndDisplaySchema(schemaId);
});
$content.append($loadBox);
} else if (activeTab === 'design') {
// Tab 2: Design New EntitySchema (ShEx)
let $designBox = $('<div>').addClass('cradle-selector-box');
$designBox.append($('<h4>').css({'margin': '0 0 6px 0', 'font-size': '14px', 'color': '#202122'})
.text(mw.msg('cradle-schema-designer')));
$designBox.append($('<p>').css({'margin': '0 0 14px 0', 'font-size': '12px', 'color': '#54595d'})
.text(mw.msg('cradle-designer-custom-desc') || 'Diseña un nuevo esquema desde cero o importando propiedades de un elemento existente para publicarlo en Wikidata como un EntitySchema (ShEx).'));
let $createDesignerBtn = $('<button>')
.addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({
'width': '100%',
'display': 'inline-flex',
'align-items': 'center',
'justify-content': 'center',
'gap': '6px',
'min-height': '38px',
'font-weight': 'bold',
'font-size': '14px',
'box-sizing': 'border-box'
})
.html(ICONS.plus + ' <span>' + (mw.msg('cradle-create-shex-designer') || 'Diseñar / Crear nuevo EntitySchema (ShEx)') + '</span>')
.on('click', function() {
renderSchemaDesigner();
});
$designBox.append($createDesignerBtn);
$content.append($designBox);
} else if (activeTab === 'edit') {
// Tab 3: Edit Existing EntitySchema (Experimental)
let $editBox = $('<div>').addClass('cradle-selector-box');
$editBox.append($('<h4>').css({'margin': '0 0 6px 0', 'font-size': '14px', 'color': '#202122'})
.text((mw.msg('cradle-tab-edit-schema') || 'Editar esquemas') + ' (' + (mw.msg('cradle-tab-edit-schema-badge') || 'Experimental') + ')'));
$editBox.append($('<p>').css({'margin': '0 0 12px 0', 'font-size': '12px', 'color': '#54595d'})
.text(mw.msg('cradle-edit-schema-desc') || 'Busca un EntitySchema existente (ej. E10, Humano) para editar sus declaraciones o código ShEx.'));
// Check if schema was specified in query or hash (e.g. ?schema=E10 or #edit?id=E10 or #edit/E10)
let prefillId = '';
let qMatch = window.location.search.match(/[?&](?:schema|id)=(E\d+)/i) ||
window.location.hash.match(/[#&?/](E\d+)/i);
if (qMatch) {
prefillId = qMatch[1].toUpperCase();
}
let $schemaInput = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-schema-placeholder'))
.val(prefillId);
let $schemaBtn = $('<button>')
.addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.text(mw.msg('cradle-load-and-edit-schema') || 'Cargar esquema para editar')
.on('click', function() {
let schemaId = $schemaInput.val().trim().toUpperCase();
if (schemaId) {
if (!schemaId.startsWith('E')) {
schemaId = 'E' + schemaId.replace(/\D/g, '');
}
loadSchemaForEditing(schemaId);
}
});
let $group = $('<div>').css({'display': 'flex', 'gap': '8px'});
$schemaInput.css({'flex': '1'});
$group.append($schemaInput).append($schemaBtn);
$editBox.append($group);
attachEntitySchemaAutocompleter($group, $schemaInput, function(schemaId) {
loadSchemaForEditing(schemaId);
});
$content.append($editBox);
if (prefillId && !userWantsToChangeSchema) {
loadSchemaForEditing(prefillId);
}
}
}
/**
* Parse the wikitext on Wikidata:Cradle to build predefined form presets.
*/
function parseCradleWikitext(wikitext) {
let forms = {};
let lines = wikitext.split('\n');
let currentForm = null;
lines.forEach(line => {
line = line.trim();
if (!line) return;
// Match == Form Title ==
let titleMatch = line.match(/^==\s*(.+?)\s*==$/);
if (titleMatch) {
let title = titleMatch[1];
currentForm = {
title: title,
labels: {},
props: {}
};
forms[title.toLowerCase().replace(/ /g, '_')] = currentForm;
return;
}
if (!currentForm) return;
// Match language label translations: :de:Antike Töpfer...
let langMatch = line.match(/^:([a-z-]+):(.+)$/);
if (langMatch) {
currentForm.labels[langMatch[1]] = langMatch[2].trim();
return;
}
// Match property line: ;P31:hardselect:Q5|mandatory
let propMatch = line.match(/^;\s*(P\d+)(?::(.*))?$/);
if (propMatch) {
let pid = propMatch[1];
let rest = propMatch[2] || '';
let propConfig = {
id: pid,
mandatory: false,
hardselect: [],
softselect: [],
defaultValue: ''
};
let parts = rest.split('|');
parts.forEach(part => {
part = part.trim();
if (!part) return;
if (part === 'mandatory') {
propConfig.mandatory = true;
} else {
let optMatch = part.match(/^([a-z]+):(.+)$/i);
if (optMatch) {
let key = optMatch[1].toLowerCase();
let val = optMatch[2];
if (key === 'hardselect') {
propConfig.hardselect = val.split(',').map(s => s.trim());
} else if (key === 'softselect') {
propConfig.softselect = val.split(',').map(s => s.trim());
} else if (key === 'default') {
propConfig.defaultValue = val.trim();
}
}
}
});
currentForm.props[pid] = propConfig;
}
});
return forms;
}
/**
* Loads wikitext of Wikidata:Cradle.
*/
function loadCradleWikitext() {
let api = new mw.Api();
return api.get({
action: 'query',
prop: 'revisions',
titles: 'Wikidata:Cradle',
rvslots: 'main',
rvprop: 'content',
format: 'json'
}).then(res => {
let pages = res.query.pages;
let pageId = Object.keys(pages)[0];
if (pageId === "-1") {
throw new Error("Wikidata:Cradle page not found");
}
return pages[pageId].revisions[0].slots.main['*'];
});
}
/**
* Loads a predefined form preset from Wikidata:Cradle and displays it.
*/
function loadAndDisplayTemplate(key) {
updateNavigationTabs('create');
let $content = $('#cradle-content-area').empty();
$content.append($('<div>').css({'text-align': 'center', 'margin-top': '40px'})
.append($('<div>').addClass('cradle-spinner').css({'border-top-color': 'var(--border-color-progressive, #36c)'}))
.append($('<p>').text(`Loading form template...`))
);
updateDrawerFooter(false);
let t = cradleTemplates[key];
activeTemplate = t;
let propIds = Object.keys(t.props);
let softselectQids = [];
propIds.forEach(pid => {
let pDef = t.props[pid];
softselectQids = softselectQids.concat(pDef.hardselect).concat(pDef.softselect);
if (pDef.defaultValue && pDef.defaultValue.startsWith('Q')) {
softselectQids.push(pDef.defaultValue);
}
});
getEntityData().then(() => {
return Promise.all([
loadPropertiesMetadata(propIds),
loadItemLabels(softselectQids)
]);
}).then(results => {
propertyMetadata = results[0];
softselectLabels = results[1];
// Map cradle format to parser properties
schemaProperties = {};
propIds.forEach(pid => {
let pDef = t.props[pid];
schemaProperties[pid] = {
id: pid,
min: pDef.mandatory ? 1 : 0,
max: Infinity,
mandatory: pDef.mandatory,
softselect: pDef.hardselect.length > 0 ? pDef.hardselect : pDef.softselect,
defaultValue: pDef.defaultValue
};
});
initializeFormState();
renderForm();
}).catch(err => {
console.error(err);
$content.empty().append($('<div>').addClass('cradle-selector-box').css('border-color', 'var(--color-destructive, #d33)')
.append($('<p>').css({'color': 'var(--color-destructive, #d33)', 'font-weight': 'bold'}).text('Error loading template'))
.append($('<button>').addClass('cradle-btn-secondary').text('Back').on('click', renderActiveView))
);
});
}
/**
* Retrieves or fetches entity data on-demand, resolving race conditions.
*/
function getEntityData() {
if (!isItemPage) return Promise.resolve(null);
if (entityData) return Promise.resolve(entityData);
if (entityDataPromise) return entityDataPromise;
entityDataPromise = loadEntityData(entityId).then(data => {
entityData = data;
return entityData;
});
return entityDataPromise;
}
/**
* Loads the EntitySchema page content, parses it, fetches metadata and renders the form.
*/
function loadAndDisplaySchema(schemaId) {
updateNavigationTabs('create');
activeSchema = { id: schemaId, label: schemaId };
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
$content.append($('<div>').css({'text-align': 'center', 'margin-top': '40px'})
.append($('<div>').addClass('cradle-spinner').css({'border-top-color': 'var(--border-color-progressive, #36c)', 'width': '30px', 'height': '30px'}))
.append($('<p>').text(mw.msg('cradle-loading-schema', schemaId)))
);
getEntityData().then(() => {
return fetchSchemaWithImports(schemaId);
}).then(schema => {
activeSchema = schema;
if (true) {
$('.cradle-subtitle').text(`Schema: ${schema.label} (${schema.id})`);
}
// Parse properties in the ShEx schema (including imported external EntitySchemas)
schemaProperties = parseShEx(schema.schemaText, schema.importedSchemas);
let propIds = Object.keys(schemaProperties);
if (propIds.length === 0) {
throw new Error("No properties found in this schema");
}
// Extract all QIDs (both hardselect and softselect) from all parsed properties
let qidsToFetch = [];
propIds.forEach(pid => {
let p = schemaProperties[pid];
if (p.hardselect) {
if (Array.isArray(p.hardselect)) qidsToFetch = qidsToFetch.concat(p.hardselect);
else if (typeof p.hardselect === 'string') qidsToFetch = qidsToFetch.concat(p.hardselect.split(','));
}
if (p.softselect) {
if (Array.isArray(p.softselect)) qidsToFetch = qidsToFetch.concat(p.softselect);
else if (typeof p.softselect === 'string') qidsToFetch = qidsToFetch.concat(p.softselect.split(','));
}
});
qidsToFetch = [...new Set(qidsToFetch.map(q => (q || '').trim()).filter(id => /^Q\d+$/i.test(id)))];
// Fetch property metadata and Q-item labels in parallel
return Promise.all([
loadPropertiesMetadata(propIds),
loadItemLabels(qidsToFetch)
]);
}).then(results => {
propertyMetadata = results[0] || {};
softselectLabels = results[1] || {};
initializeFormState();
renderForm();
}).catch(err => {
console.error(err);
$content.empty().append($('<div>').addClass('cradle-selector-box').css('border-color', 'var(--color-destructive, #d33)')
.append($('<p>').css({'color': 'var(--color-destructive, #d33)', 'font-weight': 'bold'}).text('Error loading schema'))
.append($('<p>').text(err.message || 'Unknown error occurred'))
.append($('<button>').addClass('cradle-btn-secondary').text('Back').on('click', renderActiveView))
);
});
}
/**
* Fetch EntitySchema from the MediaWiki API.
*/
function fetchSchema(schemaId) {
let api = new mw.Api();
return api.get({
action: 'query',
prop: 'revisions',
titles: 'EntitySchema:' + schemaId,
rvslots: 'main',
rvprop: 'content',
format: 'json'
}).then(res => {
let pages = res.query.pages;
let pageId = Object.keys(pages)[0];
if (pageId === "-1") {
throw new Error(`Schema ${schemaId} does not exist`);
}
let rawContent = pages[pageId].revisions[0].slots.main['*'];
try {
let parsed = JSON.parse(rawContent);
return {
id: schemaId,
label: (parsed.labels && (parsed.labels[mw.config.get('wgUserLanguage')] || parsed.labels['en'])) || schemaId,
schemaText: parsed.schemaText
};
} catch (e) {
return {
id: schemaId,
label: schemaId,
schemaText: rawContent
};
}
});
}
/**
* Extracts external EntitySchema IDs (e.g. ['E10', 'E519']) referenced via ShEx IMPORT directives.
*/
function extractImportIdsFromShEx(shexText) {
if (!shexText) return [];
let cleaned = stripShExComments(shexText);
let importIds = [];
let importRegex = /IMPORT\s+<([^>]+)>/gi;
let m;
while ((m = importRegex.exec(cleaned)) !== null) {
let url = m[1] || '';
let eMatch = url.match(/(?:EntitySchemaText\/|EntitySchema:|entity\/)(E\d+)\b/i) || url.match(/\b(E\d+)$/i);
if (eMatch) {
let eid = eMatch[1].toUpperCase();
if (!importIds.includes(eid)) {
importIds.push(eid);
}
}
}
return importIds;
}
/**
* Fetches an EntitySchema along with any external EntitySchemas referenced via ShEx IMPORT directives.
* Prevents circular import loops per ShEx 2.1 Section 5.6.
*/
function fetchSchemaWithImports(schemaId, visited) {
visited = visited || new Set();
let cleanRootId = String(schemaId || '').trim().toUpperCase();
if (!cleanRootId.startsWith('E')) {
cleanRootId = 'E' + cleanRootId.replace(/\D/g, '');
}
visited.add(cleanRootId);
return fetchSchema(cleanRootId).then(mainSchema => {
let importIds = extractImportIdsFromShEx(mainSchema.schemaText).filter(id => !visited.has(id));
if (importIds.length === 0) {
mainSchema.importedSchemas = {};
return mainSchema;
}
importIds.forEach(id => visited.add(id));
let promises = importIds.map(id =>
fetchSchemaWithImports(id, visited).catch(err => {
logError('[Cradle] Could not load imported schema ' + id + ':', err);
return null;
})
);
return Promise.all(promises).then(results => {
let importedMap = {};
results.forEach(imp => {
if (imp && imp.id) {
importedMap[imp.id.toUpperCase()] = imp;
if (imp.importedSchemas) {
Object.assign(importedMap, imp.importedSchemas);
}
}
});
mainSchema.importedSchemas = importedMap;
return mainSchema;
});
});
}
/**
* Escapes regex special characters in a string.
*/
function escapeRegex(str) {
return String(str).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
/**
* Strips ShEx comments (#...) while preserving # inside IRIs (<...>) and string literals.
*/
function stripShExComments(text) {
if (!text) return '';
let lines = text.split('\n');
return lines.map(line => {
let inIRI = false;
let inQuotes = false;
let quoteChar = '';
let clean = '';
for (let i = 0; i < line.length; i++) {
let c = line[i];
if (!inQuotes && c === '<') {
inIRI = true;
} else if (!inQuotes && inIRI && c === '>') {
inIRI = false;
} else if (!inIRI && (c === '"' || c === "'")) {
if (!inQuotes) {
inQuotes = true;
quoteChar = c;
} else if (quoteChar === c) {
inQuotes = false;
}
} else if (!inIRI && !inQuotes && c === '#') {
break;
}
clean += c;
}
return clean;
}).join('\n');
}
/**
* Extracts inner content of a shape block matching <shapeName> { ... } while respecting nested braces.
*/
function extractShapeContent(text, shapeName) {
let res = extractShape(text, shapeName);
return res ? res.content : text;
}
/**
* Robust shape extractor that identifies shape definitions (<shapeName> [@<Base> AND] [EXTRA ...] { ... })
* without confusing them with assignments (start = @<shapeName>) or inline shape references.
*/
function extractShape(text, shapeName) {
if (!shapeName) return { content: text, extraPids: [], baseShapeRefs: [] };
let cleanShape = String(shapeName).replace(/^[<@:]+|[>]+$/g, '').trim();
let pattern = new RegExp('(?:<' + escapeRegex(cleanShape) + '>|:' + escapeRegex(cleanShape) + '|\\b' + escapeRegex(cleanShape) + ')\\s*([^{};=\n]*?)\\{', 'i');
let match = pattern.exec(text);
if (!match) return { content: text, extraPids: [], baseShapeRefs: [] };
let braceStart = text.indexOf('{', match.index);
let depth = 0;
let endIdx = -1;
for (let i = braceStart; i < text.length; i++) {
if (text[i] === '{') depth++;
else if (text[i] === '}') {
depth--;
if (depth === 0) {
endIdx = i;
break;
}
}
}
let content = endIdx !== -1 ? text.substring(braceStart + 1, endIdx) : text.substring(braceStart + 1);
let modifierStr = match[1] || '';
let extraPids = [];
let extraSection = modifierStr.replace(/@<\s*[^>]+\s*>|@[A-Za-z0-9_:-]+/g, '');
if (/\bEXTRA\b/i.test(extraSection)) {
let pids = extraSection.match(/P\d+/gi) || [];
extraPids = pids.map(p => p.toUpperCase());
}
let baseShapeRefs = (modifierStr.match(/@<\s*([^>]+)\s*>|@([A-Za-z0-9_:-]+)/g) || [])
.map(r => r.replace(/^[@<:]+|[>]+$/g, '').trim())
.filter(Boolean);
return { content: content, extraPids: extraPids, baseShapeRefs: baseShapeRefs };
}
/**
* Discovers all shape definitions (<shape> ... { ... } and <shape> EXTERNAL) in a cleaned ShEx string.
*/
function discoverShapesInShEx(cleaned, sourceSchemaId) {
let shapeHeaderRegex = /(?:<([A-Za-z0-9_:-]+)>|:([A-Za-z0-9_:-]+)|\b(?!start\b|PREFIX\b|BASE\b|IMPORT\b|EXTRA\b|CLOSED\b|EXTERNAL\b)([A-Za-z0-9_:-]+))\s*([^{};=\n]*?)\{/gi;
let match;
let shapes = [];
let shapesMap = {};
while ((match = shapeHeaderRegex.exec(cleaned)) !== null) {
let name = match[1] || match[2] || match[3];
if (!name) continue;
let modifierStr = match[4] || '';
let braceStart = cleaned.indexOf('{', match.index);
let depth = 0;
let endIdx = -1;
for (let i = braceStart; i < cleaned.length; i++) {
if (cleaned[i] === '{') depth++;
else if (cleaned[i] === '}') {
depth--;
if (depth === 0) {
endIdx = i;
break;
}
}
}
let content = endIdx !== -1 ? cleaned.substring(braceStart + 1, endIdx) : cleaned.substring(braceStart + 1);
let extraSection = modifierStr.replace(/@<\s*[^>]+\s*>|@[A-Za-z0-9_:-]+/g, '');
let extraPids = /\bEXTRA\b/i.test(extraSection)
? (extraSection.match(/P\d+/gi) || []).map(p => p.toUpperCase())
: [];
let baseShapeRefs = (modifierStr.match(/@<\s*([^>]+)\s*>|@([A-Za-z0-9_:-]+)/g) || [])
.map(r => r.replace(/^[@<:]+|[>]+$/g, '').trim())
.filter(Boolean);
let shapeObj = {
name: name,
extraPids: extraPids,
baseShapeRefs: baseShapeRefs,
content: content,
startIndex: match.index,
isExternal: false,
sourceSchemaId: sourceSchemaId || null
};
shapes.push(shapeObj);
shapesMap[name.toLowerCase()] = shapeObj;
if (endIdx !== -1) {
shapeHeaderRegex.lastIndex = endIdx + 1;
}
}
// Also detect <Shape> EXTERNAL declarations per ShEx 2.1 Section 6 Rule [9]
let externalDeclRegex = /(?:<([A-Za-z0-9_:-]+)>|:([A-Za-z0-9_:-]+))\s+EXTERNAL\b/gi;
let extMatch;
while ((extMatch = externalDeclRegex.exec(cleaned)) !== null) {
let extName = extMatch[1] || extMatch[2];
if (extName && !shapesMap[extName.toLowerCase()]) {
let extObj = {
name: extName,
extraPids: [],
baseShapeRefs: [],
content: '',
startIndex: extMatch.index,
isExternal: true,
sourceSchemaId: sourceSchemaId || null
};
shapes.push(extObj);
shapesMap[extName.toLowerCase()] = extObj;
}
}
let startMatch = cleaned.match(/start\s*=\s*@<\s*(.+?)\s*>/i) || cleaned.match(/start\s*=\s*@?([A-Za-z0-9_:-]+)/i);
let startShapeName = startMatch ? (startMatch[1] || startMatch[2]).replace(/^[<@:]+|[>]+$/g, '').trim() : null;
let targetShape = null;
if (startShapeName && shapesMap[startShapeName.toLowerCase()]) {
targetShape = shapesMap[startShapeName.toLowerCase()];
} else if (shapes.length > 0) {
let referenced = new Set();
shapes.forEach(s => {
let refs = s.content.match(/@<\s*([^>]+)\s*>/g) || [];
refs.forEach(r => referenced.add(r.replace(/[@<>]/g, '').toLowerCase()));
});
let unreferenced = shapes.filter(s => !referenced.has(s.name.toLowerCase()) && !s.isExternal);
targetShape = unreferenced.length > 0 ? unreferenced[0] : shapes[0];
}
return {
shapes: shapes,
shapesMap: shapesMap,
startShapeName: startShapeName || (targetShape ? targetShape.name : null),
targetShape: targetShape
};
}
/**
* A robust ShEx schema parser supporting root shapes, internal sub-shapes, external IMPORT schemas,
* shape conjunctions (@<Base> AND), triple expression inclusions (&<Base>), multiline blocks, and cardinalities.
*/
function parseShEx(shexText, importedSchemas) {
if (!shexText) return {};
// 0. Extract inline comment hints for external sub-schema origins (# externalSubShape: @<name> from EntitySchema:E10)
let externalSubShapeHints = {};
let hintRegex = /#\s*externalSubShape:\s*@?<([^>]+)>\s*from\s*(?:EntitySchema:)?(E\d+)/gi;
let hm;
while ((hm = hintRegex.exec(shexText)) !== null) {
externalSubShapeHints[hm[1].trim().toLowerCase()] = hm[2].trim().toUpperCase();
}
// 1. Remove comments (#...) while preserving IRIs
let cleaned = stripShExComments(shexText);
let importIds = extractImportIdsFromShEx(shexText);
let defaultImportId = importIds.length > 0 ? importIds[0] : '';
// 2. Discover local shapes and external imported shapes
let localDiscovered = discoverShapesInShEx(cleaned, null);
let shapesMap = localDiscovered.shapesMap;
let targetShape = localDiscovered.targetShape;
let externalShapesMap = {};
if (importedSchemas && typeof importedSchemas === 'object') {
Object.keys(importedSchemas).forEach(eId => {
let imp = importedSchemas[eId];
if (!imp || !imp.schemaText) return;
let impCleaned = stripShExComments(imp.schemaText);
let impDisc = discoverShapesInShEx(impCleaned, eId.toUpperCase());
Object.keys(impDisc.shapesMap).forEach(k => {
let sObj = impDisc.shapesMap[k];
if (!externalShapesMap[k]) {
externalShapesMap[k] = sObj;
}
externalShapesMap[(eId + '#' + k).toLowerCase()] = sObj;
});
if (impDisc.targetShape) {
externalShapesMap[eId.toLowerCase()] = impDisc.targetShape;
}
});
}
function parseShapeProps(shapeObj, visitedShapes) {
visitedShapes = visitedShapes || new Set();
if (!shapeObj) return {};
let shapeKey = ((shapeObj.sourceSchemaId || 'local') + ':' + shapeObj.name).toLowerCase();
if (visitedShapes.has(shapeKey)) return {};
visitedShapes.add(shapeKey);
let props = {};
// Resolve inherited properties from @<BaseShape> AND in header or &<BaseShape> in body
let includeMatches = (shapeObj.content.match(/&<\s*([^>]+)\s*>|&([A-Za-z0-9_:-]+)/g) || [])
.map(r => r.replace(/^[&<:]+|[>]+$/g, '').trim())
.filter(Boolean);
let allBaseRefs = (shapeObj.baseShapeRefs || []).concat(includeMatches);
allBaseRefs.forEach(baseRef => {
let refLower = baseRef.toLowerCase();
let baseShapeObj = shapesMap[refLower] || externalShapesMap[refLower] || (defaultImportId ? externalShapesMap[defaultImportId.toLowerCase()] : null);
if (baseShapeObj && !baseShapeObj.isExternal) {
let inheritedProps = parseShapeProps(baseShapeObj, visitedShapes);
Object.assign(props, inheritedProps);
}
});
let shapeExtraPids = shapeObj.extraPids || [];
let statementBlocks = shapeObj.content.split(';');
statementBlocks.forEach(rawBlock => {
let block = rawBlock.trim();
if (!block) return;
// Match main statement property (p:P123, wdt:P123, or inner ps:P123)
let mainPropMatch = block.match(/(?:wdt|p):(P\d+)/i) || block.match(/(?:ps|pq|psn|psv|pxt):(P\d+)/i);
if (!mainPropMatch) return;
let pid = mainPropMatch[1].toUpperCase();
let mandatory = false;
let min = 0;
let max = 1;
let cardinality = '1';
if (block.includes('+')) {
min = 1;
mandatory = true;
max = Infinity;
cardinality = '+';
} else if (block.includes('*')) {
min = 0;
max = Infinity;
mandatory = false;
cardinality = '*';
} else if (block.includes('?')) {
min = 0;
max = 1;
mandatory = false;
cardinality = '?';
} else {
let cardMatch = block.match(/\{\s*(\d+)\s*(?:,\s*(\d+)?)?\s*\}/);
if (cardMatch) {
min = parseInt(cardMatch[1]);
max = cardMatch[2] ? parseInt(cardMatch[2]) : min;
mandatory = min > 0;
cardinality = min > 1 ? '+' : (max === 1 ? '1' : '+');
} else {
min = 1;
max = 1;
mandatory = true;
cardinality = '1';
}
}
if (shapeExtraPids.includes(pid) || shapeExtraPids.includes('ALL')) {
max = Infinity;
if (cardinality === '1') cardinality = '+';
else if (cardinality === '?') cardinality = '*';
}
// Extract Value Type, Sub-Shape name/source, and Value sets (hardselect / softselect)
let valueType = 'IRI';
let subShapeName = '';
let subShapeMode = 'internal';
let subShapeExternalId = '';
let hardselect = [];
let softselect = [];
let langTags = (block.match(/@([a-z]{2,3}(?:-[a-z0-9]+)?)/gi) || []).map(t => t.substring(1).toLowerCase());
let hasLangTags = langTags.length > 0 || /@~/i.test(block);
if (/xsd:string/i.test(block)) valueType = 'xsd:string';
else if (/rdf:langString/i.test(block) || hasLangTags || KNOWN_MONOLINGUAL_PROPERTIES.includes(pid)) valueType = 'rdf:langString';
else if (/xsd:dateTime/i.test(block)) valueType = 'xsd:dateTime';
else if (/xsd:decimal/i.test(block) || /xsd:integer/i.test(block)) valueType = 'xsd:decimal';
else if (/geo:wktLiteral/i.test(block) || KNOWN_COORDINATE_PROPERTIES.includes(pid)) valueType = 'geo:wktLiteral';
else {
let subShapeMatch = block.match(/@<\s*([^>]+)\s*>/i) || block.match(/@([A-Za-z0-9_:-]+)/i);
if (subShapeMatch) {
valueType = 'subshape';
let rawSubRef = (subShapeMatch[1] || '').replace(/^[<@:]+|[>]+$/g, '').trim();
subShapeName = rawSubRef;
let explicitExtMatch = rawSubRef.match(/^(E\d+)(?:#(.+))?$/i);
let subLower = rawSubRef.toLowerCase();
let localSub = shapesMap[subLower];
let extSub = externalShapesMap[subLower];
if (explicitExtMatch) {
subShapeMode = 'external';
subShapeExternalId = explicitExtMatch[1].toUpperCase();
if (explicitExtMatch[2]) {
subShapeName = explicitExtMatch[2];
}
} else if (externalSubShapeHints[subLower]) {
subShapeMode = 'external';
subShapeExternalId = externalSubShapeHints[subLower];
} else if (localSub && !localSub.isExternal) {
subShapeMode = 'internal';
} else if (extSub) {
subShapeMode = 'external';
subShapeExternalId = extSub.sourceSchemaId || defaultImportId;
} else if ((localSub && localSub.isExternal) || (!localSub && defaultImportId)) {
subShapeMode = 'external';
subShapeExternalId = defaultImportId;
}
let resolvedSubObj = (localSub && !localSub.isExternal) ? localSub : (extSub || (subShapeExternalId ? externalShapesMap[subShapeExternalId.toLowerCase()] : null));
if (resolvedSubObj && resolvedSubObj.content) {
let subQids = resolvedSubObj.content.match(/(?:wd:|Q)(Q\d+)/gi) || [];
subQids.forEach(q => {
let cleanQ = q.replace(/wd:/i, '').toUpperCase();
if (!softselect.includes(cleanQ)) softselect.push(cleanQ);
});
}
} else {
let bracketMatch = block.match(/\[([^\]]+)\]/);
if (bracketMatch) {
let bQids = bracketMatch[1].match(/(?:wd:|Q)(Q\d+)/gi) || [];
bQids.forEach(q => {
let cleanQ = q.replace(/wd:/i, '').toUpperCase();
if (!hardselect.includes(cleanQ)) hardselect.push(cleanQ);
});
}
let otherQids = block.match(/(?:wd:|Q)(Q\d+)/gi) || [];
otherQids.forEach(q => {
let cleanQ = q.replace(/wd:/i, '').toUpperCase();
if (!hardselect.includes(cleanQ) && !softselect.includes(cleanQ)) {
softselect.push(cleanQ);
}
});
valueType = 'IRI';
}
}
if (!props[pid] || mandatory || shapeObj === targetShape) {
props[pid] = {
id: pid,
min: min,
max: max,
mandatory: mandatory,
cardinality: cardinality,
valueType: valueType,
hasLangTags: hasLangTags,
langTags: langTags,
subShapeName: subShapeName,
subShapeMode: subShapeMode,
subShapeExternalId: subShapeExternalId,
hardselect: hardselect,
softselect: softselect.length > 0 ? softselect : hardselect
};
}
});
return props;
}
if (targetShape) {
return parseShapeProps(targetShape, new Set());
}
return parseShapeProps({ name: 'root', content: cleaned, extraPids: [], baseShapeRefs: [] }, new Set());
}
/**
* Parses property constraints from Wikidata claims (P2302).
*/
function parsePropertyConstraints(claims) {
let constraints = [];
if (!claims || !claims.P2302) return constraints;
claims.P2302.forEach(claim => {
if (claim.mainsnak && claim.mainsnak.snaktype === 'value' && claim.mainsnak.datavalue && claim.mainsnak.datavalue.value) {
let constraintQid = claim.mainsnak.datavalue.value.id;
let cInfo = { qid: constraintQid, text: '' };
if (constraintQid === 'Q21503250') {
cInfo.text = mw.msg('cradle-constraint-mandatory');
cInfo.isMandatory = true;
} else if (constraintQid === 'Q21510865') {
cInfo.text = mw.msg('cradle-constraint-single');
cInfo.isSingle = true;
if (claim.qualifiers && (claim.qualifiers.P2309 || claim.qualifiers.P2303 || claim.qualifiers.P2308)) {
cInfo.hasScopeQualifier = true;
}
} else if (constraintQid === 'Q21503252') {
cInfo.text = mw.msg('cradle-constraint-type');
cInfo.isType = true;
} else if (constraintQid === 'Q21502404') {
let regexVal = '';
if (claim.qualifiers && claim.qualifiers.P1793 && claim.qualifiers.P1793[0] && claim.qualifiers.P1793[0].datavalue) {
regexVal = claim.qualifiers.P1793[0].datavalue.value;
}
cInfo.text = mw.msg('cradle-constraint-format') + (regexVal ? ` (${regexVal})` : '');
cInfo.regex = regexVal;
} else if (constraintQid === 'Q21510851') {
cInfo.text = mw.msg('cradle-constraint-inverse');
cInfo.isInverse = true;
} else if (constraintQid === 'Q21510862') {
cInfo.text = mw.msg('cradle-constraint-distinct');
cInfo.isDistinct = true;
} else if (constraintQid === 'Q54554025') {
cInfo.text = mw.msg('cradle-constraint-citation');
cInfo.isCitationNeeded = true;
} else if (constraintQid === 'Q21510855') {
let allowedValues = [];
if (claim.qualifiers && claim.qualifiers.P2305) {
claim.qualifiers.P2305.forEach(q => {
if (q.datavalue && q.datavalue.value && q.datavalue.value.id) {
allowedValues.push(q.datavalue.value.id);
}
});
}
cInfo.text = 'One-of constraint';
cInfo.allowedValues = allowedValues;
}
if (cInfo.text) {
constraints.push(cInfo);
}
}
});
return constraints;
}
/**
* Fetches property metadata.
*/
/**
* Fetches property metadata in chunks of 50 to comply with MediaWiki Action API limits.
*/
function loadPropertiesMetadata(propIds) {
propIds = [...new Set(propIds)].filter(id => /^P\d+$/i.test(id));
if (propIds.length === 0) return Promise.resolve({});
logDebug("[Cradle] Loading properties metadata for:", propIds);
let chunks = [];
for (let i = 0; i < propIds.length; i += 50) {
chunks.push(propIds.slice(i, i + 50));
}
let userLang = mw.config.get('wgUserLanguage') || 'en';
let api = new mw.Api();
let promises = chunks.map(chunk => {
return api.get({
action: 'wbgetentities',
ids: chunk.join('|'),
props: 'info|labels|descriptions|datatype|claims',
languages: userLang + '|en',
format: 'json'
}).then(function(res) {
let metadata = {};
if (res && res.entities) {
Object.keys(res.entities).forEach(pid => {
let ent = res.entities[pid];
let label = pid;
if (ent.labels) {
label = (ent.labels[userLang] && ent.labels[userLang].value) ||
(ent.labels['en'] && ent.labels['en'].value) ||
pid;
}
let desc = "";
let p2559Texts = [];
if (ent.claims && ent.claims.P2559) {
ent.claims.P2559.forEach(claim => {
if (claim.mainsnak &&
claim.mainsnak.snaktype === 'value' &&
claim.mainsnak.datavalue &&
claim.mainsnak.datavalue.value) {
let val = claim.mainsnak.datavalue.value;
if (val.text && val.language) {
p2559Texts.push({
text: val.text,
language: val.language
});
}
}
});
}
// 1. Try P2559 in user interface language
let targetUsage = p2559Texts.find(t => t.language === userLang);
if (targetUsage) {
desc = targetUsage.text;
} else {
// 2. Try P2559 in English
let enUsage = p2559Texts.find(t => t.language === 'en');
if (enUsage) {
desc = enUsage.text;
} else {
// 3. Try standard description in user interface language
if (ent.descriptions && ent.descriptions[userLang]) {
desc = ent.descriptions[userLang].value;
} else if (ent.descriptions && ent.descriptions['en']) {
// 4. Try standard description in English
desc = ent.descriptions['en'].value;
}
}
}
metadata[pid] = {
id: pid,
label: label,
description: desc,
datatype: ent.datatype,
constraints: parsePropertyConstraints(ent.claims)
};
});
}
return metadata;
}).catch(function(err) {
logError("[Cradle] loadPropertiesMetadata chunk failed:", err);
return {};
});
});
return Promise.all(promises).then(results => {
let merged = {};
results.forEach(m => Object.assign(merged, m));
logDebug("[Cradle] Loaded properties metadata:", merged);
return merged;
});
}
/**
* Fetch labels for specific QIDs in chunks of 50.
*/
function loadItemLabels(qids) {
qids = [...new Set(qids)].filter(id => /^Q\d+$/i.test(id));
if (qids.length === 0) return Promise.resolve({});
logDebug("[Cradle] Loading item labels for:", qids);
let chunks = [];
for (let i = 0; i < qids.length; i += 50) {
chunks.push(qids.slice(i, i + 50));
}
let userLang = mw.config.get('wgUserLanguage') || 'en';
let api = new mw.Api();
let promises = chunks.map(chunk => {
return api.get({
action: 'wbgetentities',
ids: chunk.join('|'),
props: 'labels',
languages: userLang + '|en',
format: 'json'
}).then(function(res) {
let labels = {};
if (res && res.entities) {
Object.keys(res.entities).forEach(qid => {
let ent = res.entities[qid];
let label = qid;
if (ent.labels) {
label = (ent.labels[userLang] && ent.labels[userLang].value) ||
(ent.labels['en'] && ent.labels['en'].value) ||
qid;
}
labels[qid] = label;
});
}
return labels;
}).catch(function(err) {
logError("[Cradle] loadItemLabels chunk failed:", err);
return {};
});
});
return Promise.all(promises).then(results => {
let merged = {};
results.forEach(lbls => Object.assign(merged, lbls));
logDebug("[Cradle] Loaded labels map:", merged);
return merged;
});
}
/**
* Fetch labels AND descriptions for specific QIDs in chunks of 50.
*/
function loadItemDetails(qids) {
qids = [...new Set(qids)].filter(id => /^Q\d+$/i.test(id));
if (qids.length === 0) return Promise.resolve({});
let chunks = [];
for (let i = 0; i < qids.length; i += 50) {
chunks.push(qids.slice(i, i + 50));
}
let userLang = mw.config.get('wgUserLanguage') || 'en';
let api = new mw.Api();
let promises = chunks.map(chunk => {
return api.get({
action: 'wbgetentities',
ids: chunk.join('|'),
props: 'labels|descriptions',
languages: userLang + '|en',
format: 'json'
}).then(function(res) {
let details = {};
if (res && res.entities) {
Object.keys(res.entities).forEach(qid => {
let ent = res.entities[qid];
let label = qid;
let desc = '';
if (ent.labels) {
label = (ent.labels[userLang] && ent.labels[userLang].value) ||
(ent.labels['en'] && ent.labels['en'].value) ||
qid;
}
if (ent.descriptions) {
desc = (ent.descriptions[userLang] && ent.descriptions[userLang].value) ||
(ent.descriptions['en'] && ent.descriptions['en'].value) ||
'';
}
details[qid] = { label: label, description: desc };
});
}
return details;
}).catch(function() {
return {};
});
});
return Promise.all(promises).then(results => {
let merged = {};
results.forEach(d => Object.assign(merged, d));
return merged;
});
}
/**
* Determines effective datatype from property metadata, schema definition, row sample value, or built-in fallback.
*/
function inferDatatype(propDef, meta, pid, sampleValue) {
if (meta && meta.datatype) return meta.datatype;
if (sampleValue && typeof sampleValue === 'object') {
if ('latitude' in sampleValue || 'longitude' in sampleValue) return 'globe-coordinate';
if ('language' in sampleValue || 'text' in sampleValue) return 'monolingualtext';
if ('time' in sampleValue) return 'time';
if ('amount' in sampleValue) return 'quantity';
}
if (pid) {
let uPid = pid.toUpperCase();
if (KNOWN_COORDINATE_PROPERTIES.includes(uPid)) return 'globe-coordinate';
if (KNOWN_MONOLINGUAL_PROPERTIES.includes(uPid)) return 'monolingualtext';
}
if (propDef) {
let vt = propDef.valueType;
if (vt === 'rdf:langString' || propDef.hasLangTags) return 'monolingualtext';
if (vt === 'geo:wktLiteral') return 'globe-coordinate';
if (vt === 'xsd:dateTime') return 'time';
if (vt === 'xsd:decimal' || vt === 'xsd:integer') return 'quantity';
if (vt === 'xsd:string') return 'string';
if (vt === 'subshape') return 'wikibase-item';
if (propDef.hardselect && propDef.hardselect.length > 0) return 'wikibase-item';
if (propDef.softselect && propDef.softselect.length > 0) return 'wikibase-item';
}
return 'string';
}
/**
* Formats decimal coordinate to sexagesimal DMS notation (e.g. 8°45'36.0"N).
*/
function formatDecimalToDMS(val, isLat) {
let num = parseFloat(val);
if (isNaN(num)) return '';
let dir = isLat ? (num >= 0 ? 'N' : 'S') : (num >= 0 ? 'E' : 'W');
let abs = Math.abs(num);
let deg = Math.floor(abs);
let minFloat = (abs - deg) * 60;
let min = Math.floor(minFloat);
let sec = (minFloat - min) * 60;
sec = Math.round(sec * 10) / 10;
if (sec >= 60) {
sec = 0;
min++;
}
if (min >= 60) {
min = 0;
deg++;
}
return `${deg}°${min}'${sec.toFixed(1).replace(/\.0$/, '')}"${dir}`;
}
/**
* Formats latitude and longitude pair into human-readable DMS string.
*/
function formatCoordinates(lat, lon) {
let latStr = formatDecimalToDMS(lat, true);
let lonStr = formatDecimalToDMS(lon, false);
if (!latStr || !lonStr) return '';
return `${latStr}, ${lonStr}`;
}
/**
* Formats precision value into human-readable label (e.g. ±1″, ±1′, ±1°, ±0.0001°).
*/
function formatPrecisionLabel(prec) {
if (!prec || isNaN(prec)) return '±1″';
if (prec <= 1 / 36000) return '±0.1″';
if (prec <= 1 / 3600) return '±1″';
if (prec <= 1 / 60) return '±1′';
if (prec >= 1) return `±${Math.round(prec)}°`;
let str = String(prec);
if (str.includes('e-')) {
str = prec.toFixed(6).replace(/0+$/, '');
}
return `±${str}°`;
}
/**
* Parses a single DMS or decimal component (e.g. 8°45'36"N or 8.76° or -75.88).
*/
function parseSingleDMS(s) {
if (!s) return null;
s = s.trim();
let dirMatch = s.match(/[NSEW]/i);
let dir = dirMatch ? dirMatch[0].toUpperCase() : null;
let clean = s.replace(/[NSEW]/gi, '').trim();
// Plain decimal number (with or without degree symbol)
let decOnly = clean.replace(/°/g, '').trim();
if (/^[+-]?\d+(?:\.\d+)?$/.test(decOnly)) {
let val = parseFloat(decOnly);
if (dir === 'S' || dir === 'W') val = -Math.abs(val);
else if (dir === 'N' || dir === 'E') val = Math.abs(val);
let decMatch = decOnly.match(/\.(\d+)/);
let decCount = decMatch ? decMatch[1].length : 0;
let precision = decCount > 0 ? Math.pow(10, -decCount) : 1;
return { value: val, precision: precision, dir: dir };
}
// DMS format: 8° 45' 36" or 8d 45m 36s or 8 45 36
let parts = clean.match(/([+-]?\d+(?:\.\d+)?)[°d\s]+(?:(\d+(?:\.\d+)?)['′m\s]+)?(?:(\d+(?:\.\d+)?)["″s\s]*)?/);
if (!parts) return null;
let deg = parseFloat(parts[1]) || 0;
let min = parseFloat(parts[2]) || 0;
let sec = parseFloat(parts[3]) || 0;
let precision = 1;
if (parts[3] !== undefined) {
precision = parts[3].includes('.') ? 1 / 36000 : 1 / 3600;
} else if (parts[2] !== undefined) {
precision = 1 / 60;
}
let sign = deg < 0 ? -1 : 1;
let val = (Math.abs(deg) + min / 60 + sec / 3600) * sign;
if (dir === 'S' || dir === 'W') val = -Math.abs(val);
else if (dir === 'N' || dir === 'E') val = Math.abs(val);
return { value: val, precision: precision, dir: dir };
}
/**
* Parses a complete coordinate input string in any Wikibase-accepted format (single input field).
*/
function parseCoordinateInput(str) {
if (!str || typeof str !== 'string') return null;
let s = str.trim();
if (!s) return null;
let lat = null, lon = null, precision = 0.0001;
// Strategy 1: Check if comma/semicolon/slash separated
let sepMatch = s.match(/[,;\/]/);
if (sepMatch) {
let parts = s.split(/[,;\/]+/).map(p => p.trim()).filter(Boolean);
if (parts.length >= 2) {
let p1 = parseSingleDMS(parts[0]);
let p2 = parseSingleDMS(parts[1]);
if (p1 && p2) {
if ((p1.dir === 'E' || p1.dir === 'W') && (p2.dir === 'N' || p2.dir === 'S')) {
lat = p2.value;
lon = p1.value;
} else {
lat = p1.value;
lon = p2.value;
}
precision = Math.min(p1.precision, p2.precision);
}
}
} else {
// Strategy 2: Two directional components separated by space: "8°45'36"N 75°53'8"W"
let dirParts = s.match(/([+-]?\d+[^NSEW]*[NSEW])/gi);
if (dirParts && dirParts.length === 2) {
let p1 = parseSingleDMS(dirParts[0]);
let p2 = parseSingleDMS(dirParts[1]);
if (p1 && p2) {
if ((p1.dir === 'E' || p1.dir === 'W') && (p2.dir === 'N' || p2.dir === 'S')) {
lat = p2.value;
lon = p1.value;
} else {
lat = p1.value;
lon = p2.value;
}
precision = Math.min(p1.precision, p2.precision);
}
} else {
// Strategy 3: Two numbers separated by space: "8.76 -75.88"
let numParts = s.split(/\s+/);
if (numParts.length === 2) {
let p1 = parseSingleDMS(numParts[0]);
let p2 = parseSingleDMS(numParts[1]);
if (p1 && p2) {
lat = p1.value;
lon = p2.value;
precision = Math.min(p1.precision, p2.precision);
}
}
}
}
if (lat === null || lon === null || isNaN(lat) || isNaN(lon)) return null;
if (lat < -90 || lat > 90 || lon < -180 || lon > 180) return null;
return { latitude: lat, longitude: lon, precision: precision };
}
/**
* Populates formState by mapping current entity claims to the parsed schema properties.
*/
function initializeFormState() {
formState = {};
Object.keys(schemaProperties).forEach(pid => {
let propDef = schemaProperties[pid];
let meta = propertyMetadata[pid] || {};
let sampleClaim = (isItemPage && entityData && entityData.claims && entityData.claims[pid] && entityData.claims[pid][0]);
let sampleVal = sampleClaim && sampleClaim.mainsnak && sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.value;
let claimDatatype = sampleClaim && sampleClaim.mainsnak && (sampleClaim.mainsnak.datatype || (sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.type));
if (claimDatatype === 'globecoordinate') claimDatatype = 'globe-coordinate';
let effectiveDatatype = claimDatatype || inferDatatype(propDef, meta, pid, sampleVal);
formState[pid] = [];
// Map existing claims on the entity (if on an item page)
if (isItemPage && entityData && entityData.claims && entityData.claims[pid]) {
entityData.claims[pid].forEach(claim => {
if (claim.mainsnak) {
let snak = claim.mainsnak;
let snaktype = snak.snaktype || 'value';
let value = '';
if (snaktype === 'value' && snak.datavalue) {
value = parseClaimValue(snak.datavalue);
} else if (snaktype === 'somevalue' || snaktype === 'novalue') {
value = snaktype;
}
let rowDt = snak.datatype || (snak.datavalue && snak.datavalue.type) || effectiveDatatype;
if (rowDt === 'globecoordinate') rowDt = 'globe-coordinate';
if (snaktype === 'value' || snaktype === 'somevalue' || snaktype === 'novalue') {
formState[pid].push({
id: Math.random().toString(36).substring(2, 9),
guid: claim.id,
value: value,
snaktype: snaktype,
datatype: rowDt,
rank: claim.rank || 'normal',
references: claim.references || [],
qualifiers: claim.qualifiers || {},
isDeleted: false
});
}
}
});
}
// Set defaults or blank rows in create mode
if (formState[pid].length === 0) {
let initVal = '';
if (activeMode === 'create' && propDef.defaultValue) {
initVal = propDef.defaultValue;
}
if (propDef.mandatory || initVal !== '') {
let newRow = createNewRowState(effectiveDatatype);
if (initVal !== '') newRow.value = initVal;
formState[pid].push(newRow);
}
} else if (formState[pid].length > 1) {
// If item already has multiple claims, allow adding/removing values
propDef.max = Infinity;
}
});
}
const MONTH_NAMES_ES = ['', 'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'];
const MONTH_NAMES_EN = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
function getMonthName(monthNum, lang, style) {
if (monthNum < 1 || monthNum > 12) return String(monthNum);
let monthStyle = style || 'short';
try {
let d = new Date(2000, monthNum - 1, 15);
let userLang = lang || mw.config.get('wgUserLanguage') || 'es';
let monthName = new Intl.DateTimeFormat(userLang, { month: monthStyle }).format(d);
return monthName;
} catch(e) {
let isEs = (lang || '').startsWith('es');
return isEs ? MONTH_NAMES_ES[monthNum] : MONTH_NAMES_EN[monthNum];
}
}
function formatWikibaseDate(isoTime, precision) {
if (!isoTime) return '';
let isNegative = isoTime.startsWith('-');
let clean = isoTime.replace(/^[+-]/, '').replace(/T.*$/, '');
let parts = clean.split('-');
let yearNum = parseInt(parts[0], 10) || 0;
let monthNum = parseInt(parts[1], 10) || 0;
let dayNum = parseInt(parts[2], 10) || 0;
let userLang = mw.config.get('wgUserLanguage') || 'es';
let isEs = userLang.startsWith('es');
let signStr = isNegative ? ' BCE' : '';
if (precision <= 9 || monthNum === 0) {
return (isNegative ? '-' : '') + yearNum + signStr;
}
let monthName = getMonthName(monthNum, userLang, 'short');
let monthNameLong = getMonthName(monthNum, userLang, 'long');
if (precision === 10 || dayNum === 0) {
return isEs ? `${monthNameLong} de ${yearNum}${signStr}` : `${monthNameLong} ${yearNum}${signStr}`;
}
return isEs ? `${dayNum} de ${monthName} de ${yearNum}${signStr}` : `${dayNum} ${monthName} ${yearNum}${signStr}`;
}
function parseNaturalDate(inputStr) {
let str = String(inputStr || '').trim();
if (!str) return null;
let isNegative = false;
if (str.startsWith('-')) {
isNegative = true;
str = str.substring(1);
} else if (str.startsWith('+')) {
str = str.substring(1);
}
str = str.replace(/T.*$/, '').replace(/,/g, ' ').replace(/\bde\b/gi, ' ').replace(/\bof\b/gi, ' ').trim();
str = str.replace(/\s+/g, ' ');
let monthMap = {
'january': 1, 'jan': 1, 'february': 2, 'feb': 2, 'march': 3, 'mar': 3,
'april': 4, 'apr': 4, 'may': 5, 'june': 6, 'jun': 6, 'july': 7, 'jul': 7,
'august': 8, 'aug': 8, 'september': 9, 'sep': 9, 'sept': 9,
'october': 10, 'oct': 10, 'november': 11, 'nov': 11, 'december': 12, 'dec': 12,
'enero': 1, 'ene': 1, 'febrero': 2, 'feb': 2, 'marzo': 3, 'abril': 4, 'abr': 4,
'mayo': 5, 'junio': 6, 'jun': 6, 'julio': 7, 'jul': 7, 'agosto': 8, 'ago': 8,
'septiembre': 9, 'setiembre': 9, 'octubre': 10, 'oct': 10, 'noviembre': 11, 'nov': 11, 'diciembre': 12, 'dic': 12
};
let userLang = mw.config.get('wgUserLanguage') || 'es';
for (let m = 1; m <= 12; m++) {
try {
let d = new Date(2000, m - 1, 15);
let longName = new Intl.DateTimeFormat(userLang, { month: 'long' }).format(d).toLowerCase();
let shortName = new Intl.DateTimeFormat(userLang, { month: 'short' }).format(d).toLowerCase().replace(/\./g, '');
monthMap[longName] = m;
monthMap[shortName] = m;
} catch(e) {}
}
let tokens = str.split(/[\s/\.\-]+/);
let day = 0;
let month = 0;
let year = 0;
let precision = 9;
let numTokens = [];
tokens.forEach(t => {
let lower = t.toLowerCase();
if (monthMap[lower]) {
month = monthMap[lower];
} else if (/^\d+$/.test(t)) {
numTokens.push(parseInt(t, 10));
}
});
if (month > 0) {
if (numTokens.length === 1) {
year = numTokens[0];
precision = 10;
} else if (numTokens.length >= 2) {
if (numTokens[0] > 31) {
year = numTokens[0];
day = numTokens[1];
} else if (numTokens[1] > 31) {
day = numTokens[0];
year = numTokens[1];
} else {
day = numTokens[0];
year = numTokens[1];
}
precision = 11;
}
} else {
if (numTokens.length === 1) {
year = numTokens[0];
precision = 9;
} else if (numTokens.length === 2) {
if (numTokens[0] > 31) {
year = numTokens[0];
month = numTokens[1];
} else {
month = numTokens[0];
year = numTokens[1];
}
precision = 10;
} else if (numTokens.length >= 3) {
if (numTokens[0] > 31) {
year = numTokens[0];
month = numTokens[1];
day = numTokens[2];
} else if (numTokens[2] > 31) {
day = numTokens[0];
month = numTokens[1];
year = numTokens[2];
} else {
day = numTokens[0];
month = numTokens[1];
year = numTokens[2];
}
precision = 11;
}
}
if (year <= 0) return null;
let yearStr = String(year).padStart(4, '0');
let monthStr = (month > 0) ? String(month).padStart(2, '0') : '00';
let dayStr = (day > 0) ? String(day).padStart(2, '0') : '00';
let isoTime = (isNegative ? '-' : '+') + yearStr + '-' + monthStr + '-' + dayStr + 'T00:00:00Z';
return {
type: 'time',
value: {
time: isoTime,
timezone: 0,
before: 0,
after: 0,
precision: precision,
calendarmodel: 'http://www.wikidata.org/entity/Q1985727'
}
};
}
/**
* Extracts values from Wikibase datavalue object based on type.
*/
function parseClaimValue(datavalue) {
let t = datavalue.type;
let val = datavalue.value;
if (t === 'wikibase-entityid') {
return val.id;
} else if (t === 'string') {
return val;
} else if (t === 'monolingualtext') {
return { text: val.text, language: val.language };
} else if (t === 'globecoordinate') {
return {
latitude: val.latitude !== undefined && val.latitude !== null ? val.latitude : '',
longitude: val.longitude !== undefined && val.longitude !== null ? val.longitude : '',
altitude: val.altitude !== undefined ? val.altitude : null,
precision: val.precision || 0.0001,
globe: val.globe || 'http://www.wikidata.org/entity/Q2'
};
} else if (t === 'quantity') {
let amt = val.amount;
if (amt.startsWith('+')) amt = amt.substring(1);
return amt;
} else if (t === 'time') {
return formatWikibaseDate(val.time, val.precision);
}
return JSON.stringify(val);
}
/**
* Creates standard structure for a new input row.
*/
function createNewRowState(datatype) {
let defaultValue = '';
if (datatype === 'monolingualtext') {
defaultValue = { text: '', language: mw.config.get('wgUserLanguage') || 'en' };
} else if (datatype === 'globe-coordinate' || datatype === 'globecoordinate') {
defaultValue = { latitude: '', longitude: '', altitude: null, precision: 0.0001, globe: 'http://www.wikidata.org/entity/Q2' };
}
return {
id: Math.random().toString(36).substring(2, 9),
guid: null,
value: defaultValue,
datatype: datatype,
rank: 'normal',
references: [],
qualifiers: {},
isDeleted: false
};
}
/**
* Renders the schema validation results view.
*/
/**
* Runs schema validation on the current formState.
*/
function validateFormState() {
let results = {
properties: {},
totalRequired: 0,
presentRequired: 0,
totalOptional: 0,
presentOptional: 0
};
Object.keys(schemaProperties).forEach(pid => {
let propDef = schemaProperties[pid];
let meta = propertyMetadata[pid] || {};
let sampleClaim = (isItemPage && entityData && entityData.claims && entityData.claims[pid] && entityData.claims[pid][0]);
let sampleVal = sampleClaim && sampleClaim.mainsnak && sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.value;
let claimDatatype = sampleClaim && sampleClaim.mainsnak && (sampleClaim.mainsnak.datatype || (sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.type));
if (claimDatatype === 'globecoordinate') claimDatatype = 'globe-coordinate';
let datatype = claimDatatype || inferDatatype(propDef, meta, pid, sampleVal);
let min = propDef.min !== undefined ? propDef.min : 0;
let max = propDef.max !== undefined ? propDef.max : '*';
// Get active claims (including somevalue & novalue statements)
let claims = formState[pid] || [];
let activeClaims = claims.filter(c => !c.isDeleted && (
c.snaktype === 'somevalue' ||
c.snaktype === 'novalue' ||
c.value === 'somevalue' ||
c.value === 'novalue' ||
!isEmptyValue(c.value, c.datatype || datatype)
));
let isPresent = (activeClaims.length > 0);
// Validation checks
let errors = [];
// 1. Cardinality checks
if (activeClaims.length < min) {
errors.push(mw.msg('cradle-val-err-min', min));
}
if (max !== '*' && max !== Infinity && activeClaims.length > max) {
errors.push(mw.msg('cradle-val-err-max', max));
}
// 2. Format checks (skip for somevalue/novalue claims)
activeClaims.forEach(claim => {
let val = claim.value;
if (claim.snaktype === 'somevalue' || claim.snaktype === 'novalue' || val === 'somevalue' || val === 'novalue') {
return;
}
let dt = claim.datatype || datatype;
if (dt === 'wikibase-item') {
if (typeof val === 'string' && !/^[qQ]\d+$/.test(val.trim())) {
errors.push(mw.msg('cradle-val-err-qid', val));
}
} else if (dt === 'quantity') {
if (typeof val === 'string' && isNaN(Number(val.trim()))) {
errors.push(mw.msg('cradle-val-err-num', val));
}
} else if (dt === 'globe-coordinate' || dt === 'globecoordinate' || (typeof val === 'object' && val && ('latitude' in val || 'longitude' in val))) {
let lat = NaN, lon = NaN;
if (typeof val === 'object' && val) {
lat = parseFloat(val.latitude);
lon = parseFloat(val.longitude);
} else if (typeof val === 'string') {
let parsed = parseCoordinateInput(val);
if (parsed) {
lat = parsed.latitude;
lon = parsed.longitude;
}
}
if (isNaN(lat) || isNaN(lon) || lat < -90 || lat > 90 || lon < -180 || lon > 180) {
errors.push(mw.msg('cradle-val-err-coords'));
}
}
});
let isValid = (errors.length === 0);
let isRequired = (min >= 1);
if (isRequired) {
results.totalRequired++;
if (isValid && isPresent) {
results.presentRequired++;
}
} else {
results.totalOptional++;
if (isValid && isPresent) {
results.presentOptional++;
}
}
let itemClass = "";
let badgeText = "";
let statusText = "";
let badgeHtml = "";
if (isRequired) {
if (isPresent && isValid) {
itemClass = "valid";
badgeHtml = ICONS.check;
statusText = mw.msg('cradle-val-present');
} else {
itemClass = "invalid";
badgeHtml = ICONS.close;
statusText = errors.length > 0 ? errors.join(', ') : mw.msg('cradle-val-missing');
}
} else {
if (isPresent) {
if (isValid) {
itemClass = "optional-present";
badgeHtml = ICONS.info;
statusText = mw.msg('cradle-val-optional-present');
} else {
itemClass = "invalid";
badgeHtml = ICONS.close;
statusText = errors.join(', ');
}
} else {
itemClass = "optional-missing";
badgeHtml = ICONS.alert;
statusText = mw.msg('cradle-val-optional-missing');
}
}
results.properties[pid] = {
isValid: isValid,
isPresent: isPresent,
isRequired: isRequired,
errors: errors,
itemClass: itemClass,
badgeHtml: badgeHtml,
statusText: statusText
};
});
return results;
}
/**
* Evaluates statement-level Wikibase Quality Constraints (wbqc) taking into account claim ranks (preferred/deprecated).
*/
function evaluateRowConstraints(pid, row, allRows) {
if (row.isDeleted || row.rank === 'deprecated') return { violations: [], suggestions: [] };
let meta = propertyMetadata[pid];
if (!meta) return { violations: [], suggestions: [] };
let violations = [];
let suggestions = [];
let isEmpty = isEmptyValue(row.value, row.datatype);
let activeRows = allRows.filter(r => !r.isDeleted && r.rank !== 'deprecated');
let preferredRows = activeRows.filter(r => r.rank === 'preferred');
// 1. References / citation-needed -> Suggestion (Only if P2302 has Q54554025 citation-needed constraint)
let EXEMPT_CITATION_DATATYPES = ['commonsMedia', 'url', 'external-id', 'geo-shape', 'tabular-data', 'math', 'musical-notation'];
let hasCitationConstraint = meta.constraints && meta.constraints.some(c => c.isCitationNeeded || c.qid === 'Q54554025');
if (hasCitationConstraint && !isEmpty && (!row.references || row.references.length === 0) && !EXEMPT_CITATION_DATATYPES.includes(row.datatype)) {
suggestions.push({
type: 'suggestion',
name: 'citation-needed constraint',
message: `Statements for <a title="Property:${pid}" href="/wiki/Property:${pid}">${meta.label}</a> should have at least one reference.`,
helpUrl: 'https://www.wikidata.org/wiki/Special:MyLanguage/Help:Property_constraints_portal/Q54554025',
talkUrl: `//www.wikidata.org/wiki/Property_talk:${pid}`
});
}
// 2. Property constraints from P2302 claims
let propDef = schemaProperties[pid] || {};
let isSchemaSingle = (propDef.max === 1);
if (meta.constraints && meta.constraints.length > 0) {
meta.constraints.forEach(c => {
// Single-value constraint (Q21510865): Only if schema limits to 1 or no scope qualifiers exist
if (c.isSingle && (isSchemaSingle || !c.hasScopeQualifier) && activeRows.length > 1 && preferredRows.length !== 1) {
violations.push({
type: 'warning',
name: 'single-value constraint',
message: `Only one value is allowed for property <a title="Property:${pid}" href="/wiki/Property:${pid}">${meta.label}</a> (or set preferred rank on one value).`,
helpUrl: 'https://www.wikidata.org/wiki/Special:MyLanguage/Help:Property_constraints_portal/Q21510865',
talkUrl: `//www.wikidata.org/wiki/Property_talk:${pid}`
});
}
if (c.regex && !isEmpty && typeof row.value === 'string') {
try {
let reg = new RegExp(c.regex);
if (!reg.test(row.value)) {
violations.push({
type: 'violation',
name: 'format constraint',
message: `Value "${row.value}" does not match required format pattern (${c.regex}).`,
helpUrl: 'https://www.wikidata.org/wiki/Special:MyLanguage/Help:Property_constraints_portal/Q21502404',
talkUrl: `//www.wikidata.org/wiki/Property_talk:${pid}`
});
}
} catch (e) {}
}
if (c.qid === 'Q21503252') {
suggestions.push({
type: 'suggestion',
name: 'type constraint',
message: `Ensure value for <a title="Property:${pid}" href="/wiki/Property:${pid}">${meta.label}</a> matches required entity type.`,
helpUrl: 'https://www.wikidata.org/wiki/Special:MyLanguage/Help:Property_constraints_portal/Q21503252',
talkUrl: `//www.wikidata.org/wiki/Property_talk:${pid}`
});
}
});
}
return { violations, suggestions };
}
/**
* Updates card borders, badges, and validation summary in real-time.
*/
function liveUpdateValidation() {
let val = validateFormState();
if (Object.keys(schemaProperties).length === 0) return;
// 1. Update summary box
let summaryText = mw.msg('cradle-validation-summary',
activeSchema ? activeSchema.id : 'Template',
val.presentRequired,
val.totalRequired,
val.presentOptional,
val.totalOptional
);
let allRequiredSatisfied = (val.presentRequired === val.totalRequired);
$('#cradle-validation-summary-box')
.css({
'background-color': allRequiredSatisfied ? 'rgba(0, 175, 137, 0.08)' : 'rgba(211, 51, 51, 0.05)',
'border-color': allRequiredSatisfied ? 'var(--color-success, #00af89)' : 'var(--color-destructive, #d33)',
'color': allRequiredSatisfied ? 'var(--color-success, #00af89)' : 'var(--color-destructive, #d33)'
})
.text(summaryText);
// 2. Update each card & row indicators
Object.keys(val.properties).forEach(pid => {
let propVal = val.properties[pid];
let $card = $(`#cradle-card-${pid}`);
if (!$card.length) return;
$card.removeClass('valid invalid optional-present optional-missing')
.addClass(propVal.itemClass);
$card.find('.cradle-card-validation-badge').html(propVal.badgeHtml);
// Update live Wikibase Quality Constraint (wbqc) statement indicators
let rows = formState[pid] || [];
rows.forEach(row => {
let $indicators = $(`#cradle-indicators-${row.id}`);
if (!$indicators.length) return;
$indicators.empty();
let { violations, suggestions } = evaluateRowConstraints(pid, row, rows);
let hasViolations = violations.length > 0;
let hasSuggestions = suggestions.length > 0;
if (hasViolations || hasSuggestions) {
let primaryType = hasViolations ? 'warning' : 'suggestion';
let iconClass = hasViolations ? 'oo-ui-icon-alert' : 'oo-ui-icon-suggestion-constraint-violation';
let titleText = hasViolations ? 'There are some issues with this statement.' : 'There are some suggestions for improving this statement.';
let $btn = $('<span>')
.addClass(`wbqc-reports-button wikibase-snakview-indicator wbqc-constraint-${primaryType} oo-ui-widget oo-ui-widget-enabled oo-ui-buttonElement oo-ui-buttonElement-frameless oo-ui-buttonElement-size-medium oo-ui-iconElement oo-ui-buttonWidget oo-ui-popupButtonWidget`)
.html(`<a class="oo-ui-buttonElement-button" role="button" title="${titleText}"><span class="oo-ui-iconElement-icon ${iconClass}"></span></a>`);
$indicators.append($btn);
$btn.off('click.wbqc').on('click.wbqc', function(e) {
e.stopPropagation();
$('.cradle-wbqc-popup').remove();
let headerTitle = hasViolations ? 'Issues' : 'Suggestions';
let $popup = $('<div>').addClass('oo-ui-widget oo-ui-widget-enabled oo-ui-popupWidget oo-ui-popupWidget-anchored cradle-wbqc-popup')
.css({
'position': 'absolute',
'z-index': '99999',
'background': '#ffffff',
'border': '1px solid #c8ccd1',
'border-radius': '2px',
'box-shadow': '0 2px 8px rgba(0,0,0,0.15)',
'width': '330px',
'padding': '12px',
'font-size': '0.85rem'
});
let $head = $('<div>').addClass('oo-ui-popupWidget-head').css({
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center',
'border-bottom': '1px solid #eaecf0',
'padding-bottom': '6px',
'margin-bottom': '8px'
}).html(`<strong>${headerTitle}</strong> <a class="cradle-popup-close" style="cursor:pointer; font-weight:bold; color:#54595d; text-decoration:none;">✕</a>`);
$head.find('.cradle-popup-close').on('click', function() { $popup.remove(); });
let $body = $('<div>').addClass('wbqc-reports-all');
// Render Violations / Issues section
if (hasViolations) {
violations.forEach(rep => {
let $reportBox = $('<div>').addClass(`wbqc-reports-status-${rep.type} wbqc-report`).css({'margin-bottom': '8px'});
let $heading = $('<h4>').addClass('wbqc-report-heading').css({'margin': '0 0 4px 0', 'font-size': '0.85rem'})
.html(`<a href="${rep.helpUrl}" target="_blank">${rep.name}</a> <small class="wbqc-report-heading-links"><a class="wbqc-constraint-type-help" title="Help page" href="${rep.helpUrl}" target="_blank">Help</a> <a class="wbqc-constraint-discuss" title="Discussion page" href="${rep.talkUrl}" target="_blank">Discuss</a></small>`);
let $msg = $('<p>').css({'margin': '0', 'font-size': '0.8rem', 'color': '#202122'}).html(rep.message);
$reportBox.append($heading).append($msg);
$body.append($reportBox);
});
}
// Render Suggestions section
if (hasSuggestions) {
suggestions.forEach(rep => {
let $reportBox = $('<div>').addClass(`wbqc-reports-status-${rep.type} wbqc-report`).css({'margin-bottom': '8px'});
let $heading = $('<h4>').addClass('wbqc-report-heading').css({'margin': '0 0 4px 0', 'font-size': '0.85rem'})
.html(`<a href="${rep.helpUrl}" target="_blank">${rep.name}</a> <small class="wbqc-report-heading-links"><a class="wbqc-constraint-type-help" title="Help page" href="${rep.helpUrl}" target="_blank">Help</a> <a class="wbqc-constraint-discuss" title="Discussion page" href="${rep.talkUrl}" target="_blank">Discuss</a></small>`);
let $msg = $('<p>').css({'margin': '0', 'font-size': '0.8rem', 'color': '#202122'}).html(rep.message);
$reportBox.append($heading).append($msg);
$body.append($reportBox);
});
}
$popup.append($head).append($body);
let buttonOffset = $btn.offset();
let popupWidth = 330;
let windowWidth = $(window).width();
let leftPos = buttonOffset.left - popupWidth + 30;
if (leftPos + popupWidth > windowWidth - 15) {
leftPos = windowWidth - popupWidth - 15;
}
leftPos = Math.max(10, leftPos);
$popup.css({
'top': (buttonOffset.top + $btn.outerHeight() + 4) + 'px',
'left': leftPos + 'px'
});
$('body').append($popup);
});
}
});
});
}
/**
* Opens the feedback and bug report modal dialog to post directly to Wikidata_talk:Cradle-gadget.
*/
function openFeedbackModal() {
if ($('#cradle-feedback-modal-overlay').length) return;
let $overlay = $('<div>').attr('id', 'cradle-feedback-modal-overlay').css({
'position': 'fixed',
'top': 0,
'left': 0,
'width': '100%',
'height': '100%',
'background': 'rgba(0, 0, 0, 0.5)',
'z-index': 10002,
'display': 'flex',
'align-items': 'center',
'justify-content': 'center',
'padding': '16px',
'box-sizing': 'border-box'
});
let $modal = $('<div>').attr('id', 'cradle-feedback-modal').css({
'background': 'var(--background-color-base, #ffffff)',
'color': 'var(--color-base, #202122)',
'border-radius': '4px',
'box-shadow': '0 4px 16px rgba(0, 0, 0, 0.25)',
'width': '100%',
'max-width': '580px',
'max-height': '90vh',
'display': 'flex',
'flex-direction': 'column',
'border': '1px solid var(--border-color-base, #c8ccd1)',
'box-sizing': 'border-box'
});
// Header
let $header = $('<div>').css({
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center',
'padding': '14px 18px',
'border-bottom': '1px solid var(--border-color-base, #c8ccd1)'
});
let $title = $('<h3>').css({
'margin': 0,
'font-size': '16px',
'font-weight': 'bold',
'display': 'inline-flex',
'align-items': 'center',
'gap': '8px'
}).html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-title') + '</span>');
let $closeBtn = $('<button>').addClass('cradle-close-btn').html(ICONS.close).on('click', function() {
$overlay.remove();
});
$header.append($title).append($closeBtn);
// Body
let $body = $('<div>').css({
'padding': '18px',
'overflow-y': 'auto',
'display': 'flex',
'flex-direction': 'column',
'gap': '14px'
});
let $desc = $('<p>').css({
'margin': 0,
'font-size': '13px',
'color': 'var(--color-subtle, #54595d)',
'line-height': '1.4'
}).text(mw.msg('cradle-feedback-desc'));
$body.append($desc);
// Type selection dropdown
let $typeBox = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px'});
$typeBox.append($('<label>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-feedback-type-label') || 'Tipo:'));
let $typeSelect = $('<select>').addClass('cdx-select cradle-input').css({
'width': '100%',
'box-sizing': 'border-box',
'height': '36px',
'cursor': 'pointer'
});
let types = [
{ id: 'suggestion', label: mw.msg('cradle-feedback-type-suggestion') || 'Sugerencia / Nueva función' },
{ id: 'bug', label: mw.msg('cradle-feedback-type-bug') || 'Reporte de error (Bug)' },
{ id: 'congratulations', label: mw.msg('cradle-feedback-type-congratulations') || 'Felicitaciones' },
{ id: 'question', label: mw.msg('cradle-feedback-type-question') || 'Pregunta / Comentario general' }
];
types.forEach(t => {
$typeSelect.append($('<option>').val(t.id).text(t.label));
});
$typeBox.append($typeSelect);
$body.append($typeBox);
// Subject input
let $subjectBox = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px'});
$subjectBox.append($('<label>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-feedback-subject-label')));
let $subjectInput = $('<input>').addClass('cradle-input').attr({
'type': 'text',
'placeholder': mw.msg('cradle-feedback-subject-placeholder')
}).css({'width': '100%', 'box-sizing': 'border-box'});
$subjectBox.append($subjectInput);
$body.append($subjectBox);
// Message textarea
let $msgBox = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px'});
$msgBox.append($('<label>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-feedback-message-label')));
let $msgInput = $('<textarea>').addClass('cradle-input').attr({
'rows': '5',
'placeholder': mw.msg('cradle-feedback-message-placeholder')
}).css({'width': '100%', 'box-sizing': 'border-box', 'resize': 'vertical'});
$msgBox.append($msgInput);
$body.append($msgBox);
// Checkbox: diagnostic info
let $diagLabel = $('<label>').css({'display': 'flex', 'align-items': 'center', 'gap': '8px', 'font-size': '12px', 'cursor': 'pointer'});
let $diagCheck = $('<input>').attr({'type': 'checkbox', 'checked': 'checked'});
$diagLabel.append($diagCheck).append($('<span>').text(mw.msg('cradle-feedback-include-diagnostics')));
$body.append($diagLabel);
// Error banner area
let $errorBox = $('<div>').css({'color': 'var(--color-destructive, #d33)', 'font-size': '13px', 'display': 'none'});
$body.append($errorBox);
// Footer
let $modalFooter = $('<div>').css({
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center',
'padding': '14px 18px',
'border-top': '1px solid var(--border-color-base, #c8ccd1)',
'background': 'var(--background-color-interactive-subtle, #f8f9fa)',
'border-radius': '0 0 4px 4px',
'gap': '8px',
'flex-wrap': 'wrap'
});
let $openTalkBtn = $('<a>').attr({
'href': mw.util.getUrl('Wikidata_talk:Cradle-gadget') + '?action=edit§ion=new',
'target': '_blank'
}).addClass('cdx-button cdx-button--weight-quiet')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '4px', 'font-size': '12px', 'text-decoration': 'none'})
.html(ICONS.external + ' <span>' + mw.msg('cradle-feedback-open-talk-btn') + '</span>');
let $actionsRight = $('<div>').css({'display': 'flex', 'gap': '8px'});
let $cancelBtn = $('<button>').attr('type', 'button').addClass('cradle-btn-secondary').text(mw.msg('cradle-cancel')).on('click', function() {
$overlay.remove();
});
let $submitBtn = $('<button>').attr('type', 'button')
.addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-weight': 'bold'})
.html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-submit-btn') + '</span>');
$submitBtn.on('click', function() {
let subject = $subjectInput.val().trim();
let message = $msgInput.val().trim();
if (!subject) {
$errorBox.text(mw.msg('cradle-feedback-subject-required')).show();
$subjectInput.focus();
return;
}
if (!message) {
$errorBox.text(mw.msg('cradle-feedback-message-required')).show();
$msgInput.focus();
return;
}
$errorBox.hide();
$submitBtn.prop('disabled', true).text(mw.msg('cradle-feedback-submitting'));
let selectedTypeId = $typeSelect.val();
let typeObj = types.find(t => t.id === selectedTypeId) || types[0];
let sectionTitle = '[' + typeObj.label + '] ' + subject;
let fullText = message;
if ($diagCheck.is(':checked')) {
let currentSkin = mw.config.get('skin') || 'unknown';
let curPage = mw.config.get('wgPageName') || 'unknown';
let curLang = mw.config.get('wgUserLanguage') || 'unknown';
fullText += '\n\n; Diagnostic Info:\n' +
'* \'\'\'Cradle version:\'\'\' v' + CRADLE_VERSION + '\n' +
'* \'\'\'Page:\'\'\' [[' + curPage + ']]\n' +
'* \'\'\'Skin:\'\'\' ' + currentSkin + '\n' +
'* \'\'\'User Language:\'\'\' ' + curLang + '\n' +
'* \'\'\'Active Mode / Tab:\'\'\' ' + (activeMode || 'create') + ' / ' + (mw.storage.get('cradle-active-tab') || 'create') + '\n' +
'* \'\'\'User Agent:\'\'\' <nowiki>' + navigator.userAgent + '</nowiki>';
}
fullText += '\n\n[[User:Danielyepezgarces|Danielyepezgarces]] ([[User talk:Danielyepezgarces|talk]]) 16:02, 9 November 2026 (UTC)';
let api = new mw.Api();
api.postWithToken('csrf', {
action: 'edit',
title: 'Wikidata talk:Cradle-gadget',
section: 'new',
sectiontitle: sectionTitle,
text: fullText,
summary: '/* ' + sectionTitle + ' */ ' + mw.msg('cradle-feedback-summary')
}).then(function(res) {
$overlay.remove();
let talkUrl = mw.util.getUrl('Wikidata talk:Cradle-gadget');
mw.notify(
$('<span>').html(mw.msg('cradle-feedback-success') + ' <a href="' + talkUrl + '" target="_blank">' + mw.msg('cradle-feedback-open-talk-btn') + '</a>'),
{ type: 'success', autoHide: true }
);
}).catch(function(errCode, errObj) {
$submitBtn.prop('disabled', false).html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-submit-btn') + '</span>');
let errText = (errObj && errObj.error && errObj.error.info) ? errObj.error.info : errCode;
$errorBox.text(mw.msg('cradle-feedback-error', errText)).show();
});
});
$actionsRight.append($cancelBtn).append($submitBtn);
$modalFooter.append($openTalkBtn).append($actionsRight);
$modal.append($header).append($body).append($modalFooter);
$overlay.append($modal);
$overlay.on('click', function(e) {
if (e.target === $overlay[0]) {
$overlay.remove();
}
});
$('body').append($overlay);
$subjectInput.focus();
}
/**
* Updates the drawer footer area (credits and buttons).
*/
function updateDrawerFooter(showButtons) {
let $footer = $('#cradle-footer-area').empty();
if (!$footer.length) return;
if (showButtons) {
let $btnContainer = $('<div>').css({
'display': 'flex',
'gap': '12px',
'width': '100%',
'margin-bottom': '8px'
});
let $saveBtn = $('<button>')
.addClass('cradle-btn-primary')
.text(activeMode === 'edit' ? mw.msg('cradle-save-changes') : mw.msg('cradle-create-item'))
.on('click', saveForm);
let $cancelBtn = $('<button>')
.addClass('cradle-btn-secondary')
.text(mw.msg('cradle-cancel'))
.on('click', function() {
if (isSpecialCradle) {
renderCreateOptionsSelector();
} else {
closeEditor();
}
});
$btnContainer.append($cancelBtn).append($saveBtn);
$footer.append($btnContainer);
}
if (true) {
let danielLink = '<a href="' + mw.util.getUrl('User:Danielyepezgarces') + '" target="_blank">Daniel Yepez Garces</a>';
let ismaelLink = '<a href="' + mw.util.getUrl('User:Olea') + '" target="_blank">Ismael Olea</a>';
let cradleLink = '<a href="https://cradle.toolforge.org/" target="_blank">Cradle</a>';
let magnusLink = '<a href="https://meta.wikimedia.org/wiki/User:Magnus_Manske" target="_blank">Magnus Manske</a>';
let $credits = $('<p>')
.css({
'font-size': '0.72rem',
'color': 'var(--color-subtle, #54595d)',
'margin': '4px auto 0 auto',
'text-align': 'center',
'width': '100%',
'line-height': '1.3'
})
.html(mw.msg('cradle-credits', danielLink, ismaelLink, cradleLink, magnusLink) + ` <span style="font-weight:bold; color:#72777d; margin-left:4px;">v${CRADLE_VERSION}</span>`);
let $feedbackBtn = $('<button>').attr('type', 'button')
.addClass('cdx-button cdx-button--weight-quiet')
.css({
'margin': '4px auto 0 auto',
'display': 'inline-flex',
'align-items': 'center',
'gap': '5px',
'font-size': '12px',
'color': 'var(--color-progressive, #36c)'
})
.html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-btn') + '</span>')
.on('click', openFeedbackModal);
let $footerCenter = $('<div>').css({'text-align': 'center', 'width': '100%'})
.append($credits)
.append($('<div>').css({'margin-top': '4px'}).append($feedbackBtn));
$footer.append($footerCenter);
}
}
/**
* Resets active state and goes back to selection menu.
*/
function changeActiveForm() {
schemaProperties = {};
propertyMetadata = {};
softselectLabels = {};
formState = {};
activeSchema = null;
activeTemplate = null;
userWantsToChangeSchema = true;
renderActiveView();
}
function renderForm() {
updateNavigationTabs('create');
let $content = $('#cradle-content-area').empty();
let propIds = sortPropertyIDs(Object.keys(schemaProperties));
// Render back button
let $headerPanel = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '16px'});
$headerPanel.append($('<button>').addClass('cradle-btn-secondary').html(ICONS.back + ' <span>' + mw.msg('cradle-change-form') + '</span>').on('click', changeActiveForm));
$content.append($headerPanel);
// Display current active schema/template title
if (activeTemplate) {
let activeTitle = activeTemplate.labels[mw.config.get('wgUserLanguage')] || activeTemplate.title;
let $formHeader = $('<div>').css({'margin-bottom': '20px', 'padding-bottom': '8px'})
.append($('<h2>').css({
'font-size': '1.25rem',
'margin': '0',
'font-weight': 'bold',
'color': 'var(--color-base, #202122)'
}).text(activeTitle));
$content.append($formHeader);
} else if (activeSchema) {
let schemaUrl = mw.util.getUrl('EntitySchema:' + activeSchema.id);
let schemaText = (activeSchema.label && activeSchema.label !== activeSchema.id)
? `${activeSchema.label} (${activeSchema.id})`
: activeSchema.id;
let $schemaLink = $('<a>')
.attr({
'href': schemaUrl,
'target': '_blank',
'title': 'EntitySchema:' + activeSchema.id
})
.css({
'color': 'var(--color-link, #36c)',
'text-decoration': 'none'
})
.text(schemaText)
.hover(
function() { $(this).css('text-decoration', 'underline'); },
function() { $(this).css('text-decoration', 'none'); }
);
let $h2 = $('<h2>').css({
'font-size': '1.25rem',
'margin': '0',
'font-weight': 'bold',
'color': 'var(--color-base, #202122)'
}).append($schemaLink);
$content.append($('<div>').css({'margin-bottom': '20px', 'padding-bottom': '8px'}).append($h2));
}
// Live validation summary banner at the top of the form
let $summaryBox = $('<div>')
.attr('id', 'cradle-validation-summary-box')
.css({
'padding': '12px 16px',
'border-radius': '2px',
'margin-bottom': '16px',
'font-size': '0.9rem',
'font-weight': 'bold',
'border': '1px solid transparent',
'transition': 'all 0.2s ease'
});
$content.append($summaryBox);
// For Create Mode: Render Multilingual Identity Card (allowing 1 or more languages)
if (activeMode === 'create') {
let $metaCard = $('<div>').addClass('cradle-field-card').addClass('mandatory');
let $title = $('<h3>').addClass('cradle-field-title').text(mw.msg('cradle-new-item-identity'));
$title.append($('<span>').addClass('cradle-field-required-marker').text(' *'));
$metaCard.append($title);
$metaCard.append($('<p>').addClass('cradle-field-description').text(mw.msg('cradle-new-item-identity-desc')));
let $langRowsContainer = $('<div>').attr('id', 'cradle-lang-rows-container').css({
'display': 'flex',
'flex-direction': 'column',
'gap': '8px',
'margin-bottom': '8px'
});
function createLanguageRow(defaultLang) {
let $row = $('<div>').addClass('cradle-identity-lang-row').css({
'display': 'flex',
'flex-direction': 'row',
'gap': '8px',
'align-items': 'center'
});
// 1. Language search input
let $langWrapper = $('<div>').css({'flex': '0 0 95px', 'position': 'relative'});
let $langInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-lang-input')
.attr({
'type': 'text',
'placeholder': 'Lang'
})
.css({'width': '100%'})
.val(defaultLang || mw.config.get('wgUserLanguage') || 'en');
setupLanguageAutocomplete($langInput);
$langWrapper.append($langInput);
// 2. Label input
let $labelInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-label-input')
.attr({
'type': 'text',
'placeholder': mw.msg('cradle-new-item-label')
})
.css({'flex': '1', 'min-width': '130px'});
// 3. Description input
let $descInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-desc-input')
.attr({
'type': 'text',
'placeholder': mw.msg('cradle-new-item-desc')
})
.css({'flex': '1.4', 'min-width': '150px'});
// 4. Aliases input
let $aliasesInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-aliases-input')
.attr({
'type': 'text',
'placeholder': mw.msg('cradle-new-item-aliases')
})
.css({'flex': '1', 'min-width': '130px'});
// Remove button for secondary languages
let $removeBtn = $('<button>')
.addClass('cradle-btn-delete')
.html(ICONS.close)
.attr('title', 'Eliminar idioma')
.css({'height': '36px', 'width': '36px', 'padding': '0', 'flex-shrink': '0'})
.on('click', function() {
if ($langRowsContainer.children().length > 1) {
$row.remove();
} else {
mw.notify(mw.msg('cradle-error-at-least-one-language'), { type: 'warn' });
}
});
$row.append($langWrapper).append($labelInput).append($descInput).append($aliasesInput).append($removeBtn);
return $row;
}
$langRowsContainer.append(createLanguageRow(mw.config.get('wgUserLanguage') || 'es'));
let $addLangBtn = $('<button>')
.addClass('cdx-button cdx-button--weight-quiet')
.css({'color': '#36c', 'font-size': '0.85rem', 'padding': '4px 8px'})
.html(ICONS.plus + ' <span>' + mw.msg('cradle-add-language') + '</span>')
.on('click', function(e) {
e.preventDefault();
let nextLang = $langRowsContainer.children().length === 1 ? (mw.config.get('wgUserLanguage') === 'es' ? 'en' : 'es') : '';
$langRowsContainer.append(createLanguageRow(nextLang));
});
$metaCard.append($langRowsContainer).append($addLangBtn);
$content.append($metaCard);
}
// Render properties
propIds.forEach(pid => {
let propDef = schemaProperties[pid];
let meta = propertyMetadata[pid] || { label: pid, description: '', datatype: 'string' };
let $card = $('<div>')
.addClass('cradle-field-card')
.attr('id', `cradle-card-${pid}`);
if (propDef.mandatory) {
$card.addClass('mandatory');
}
// Header of card
let $cardHeader = $('<div>').addClass('cradle-field-header');
let $label = $('<h3>').addClass('cradle-field-title');
// Prepend validation badge span next to title
let $badge = $('<span>').addClass('cradle-card-validation-badge').css({'margin-right': '6px', 'font-size': '1.1rem'});
$label.append($badge);
$label.append($('<a>').attr({
href: `/wiki/Property:${pid}`,
target: '_blank'
}).text(meta.label));
if (propDef.mandatory) {
$label.append($('<span>').addClass('cradle-field-required-marker').text('*'));
}
$cardHeader.append($label);
if (meta.description) {
$cardHeader.append($('<p>').addClass('cradle-field-description').text(meta.description));
}
$card.append($cardHeader);
// Container for statement input rows
let $rowsContainer = $('<div>').attr('id', `cradle-rows-${pid}`);
$card.append($rowsContainer);
// Container for action bar
let $actionsContainer = $('<div>').attr('id', `cradle-actions-${pid}`);
$card.append($actionsContainer);
$content.append($card);
renderPropertyRows(pid);
});
updateDrawerFooter(true);
liveUpdateValidation();
}
/**
* Render statement rows for a given property.
*/
function renderPropertyRows(pid) {
let $container = $(`#cradle-rows-${pid}`).empty();
let $actionsContainer = $(`#cradle-actions-${pid}`).empty();
let propDef = schemaProperties[pid];
let rows = formState[pid];
rows.forEach((row, index) => {
let $row = $('<div>')
.addClass('cradle-row')
.attr('id', `cradle-row-${row.id}`);
if (row.isDeleted) {
$row.addClass('deleted');
}
let $inputElement = createInputForDatatype(pid, row);
let $indicators = $('<div>').addClass('wikibase-snakview-indicators').attr('id', `cradle-indicators-${row.id}`).css({'margin-left': '6px', 'display': 'inline-flex'});
let $inputWithIndicators = $('<div>').css({'display': 'flex', 'align-items': 'center', 'flex': '1'}).append($inputElement).append($indicators);
$row.append($inputWithIndicators);
let $deleteBtn = $('<button>')
.addClass('cradle-btn-delete')
.html(row.isDeleted ? ICONS.undo : ICONS.trash)
.attr('title', row.isDeleted ? 'Restore Claim' : 'Delete Claim')
.on('click', function() {
toggleDeleteRow(pid, row.id);
});
$row.append($deleteBtn);
$container.append($row);
});
// Dynamic Action Bar rendering (Add row button)
let nonDeletedRows = rows.filter(r => !r.isDeleted);
let maxLimit = propDef.max;
let showAddButton = (maxLimit === '*' || maxLimit === Infinity || nonDeletedRows.length < maxLimit);
if (showAddButton) {
let $addBtn = $('<button>')
.addClass('cradle-btn-text')
.html(`${ICONS.plus} ${mw.msg('cradle-add-value')}`)
.on('click', function() {
addRow(pid);
});
$actionsContainer.append($addBtn);
}
}
/**
* Creates appropriate jQuery inputs for a datatype.
*/
function createInputForDatatype(pid, row) {
let propDef = schemaProperties[pid];
let meta = propertyMetadata[pid] || {};
let uPid = (pid || '').toUpperCase();
// 0a. Globe-coordinate datatype auto-detection & single-field input
let isCoordinate = row.datatype === 'globe-coordinate' || row.datatype === 'globecoordinate' ||
KNOWN_COORDINATE_PROPERTIES.includes(uPid) ||
(meta && (meta.datatype === 'globe-coordinate' || meta.datatype === 'globecoordinate')) ||
(propDef && propDef.valueType === 'geo:wktLiteral') ||
(row.value && typeof row.value === 'object' && ('latitude' in row.value || 'longitude' in row.value));
if (isCoordinate) {
row.datatype = 'globe-coordinate';
let $group = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px', 'width': '100%'});
let coordVal = (row.value && typeof row.value === 'object') ? row.value : {
latitude: '',
longitude: '',
altitude: null,
precision: 0.0001,
globe: 'http://www.wikidata.org/entity/Q2'
};
if (typeof row.value === 'string' && row.value.trim()) {
let parsed = parseCoordinateInput(row.value);
if (parsed) {
coordVal.latitude = parsed.latitude;
coordVal.longitude = parsed.longitude;
coordVal.precision = parsed.precision;
}
}
row.value = coordVal;
let initialText = '';
if (coordVal.latitude !== '' && coordVal.latitude !== null && coordVal.longitude !== '' && coordVal.longitude !== null && !isNaN(coordVal.latitude) && !isNaN(coordVal.longitude)) {
initialText = formatCoordinates(coordVal.latitude, coordVal.longitude);
}
let $input = $('<input>')
.addClass('cradle-input')
.attr({type: 'text', placeholder: mw.msg('cradle-coord-placeholder')})
.val(initialText);
$group.append($input);
let $previewRow = $('<div>').css({
'display': 'flex',
'align-items': 'center',
'justify-content': 'space-between',
'font-size': '0.75rem',
'color': '#54595d',
'padding': '0 2px'
});
let $dmsBadge = $('<span>').addClass('cradle-coord-dms-badge');
let $mapLink = $('<a>')
.attr({target: '_blank', rel: 'noopener noreferrer'})
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '4px', 'color': '#36c', 'text-decoration': 'none'})
.html(ICONS.mapPin + ' <span>' + mw.msg('cradle-view-on-map') + '</span>')
.hide();
$previewRow.append($dmsBadge).append($mapLink);
$group.append($previewRow);
function updateCoordUI(formatOnSuccess) {
let text = $input.val().trim();
if (!text) {
coordVal.latitude = '';
coordVal.longitude = '';
$dmsBadge.empty().hide();
$mapLink.hide();
row.value = coordVal;
liveUpdateValidation();
return;
}
let parsed = parseCoordinateInput(text);
if (parsed) {
coordVal.latitude = parsed.latitude;
coordVal.longitude = parsed.longitude;
coordVal.precision = parsed.precision || coordVal.precision || 0.0001;
let dmsText = formatCoordinates(parsed.latitude, parsed.longitude);
let precLabel = formatPrecisionLabel(coordVal.precision);
$dmsBadge.text(`${dmsText} (${precLabel})`).show();
let mapUrl = 'https://geohack.toolforge.org/geohack.php?params=' + parsed.latitude + '_N_' + parsed.longitude + '_E_globe:earth';
$mapLink.attr('href', mapUrl).show();
if (formatOnSuccess) {
$input.val(dmsText);
}
} else {
$dmsBadge.empty().hide();
$mapLink.hide();
coordVal.latitude = text;
coordVal.longitude = '';
}
row.value = coordVal;
liveUpdateValidation();
}
$input.on('input', function() {
updateCoordUI(false);
});
$input.on('blur', function() {
updateCoordUI(true);
});
if (initialText) {
let precLabel = formatPrecisionLabel(coordVal.precision);
$dmsBadge.text(`${initialText} (${precLabel})`).show();
let mapUrl = 'https://geohack.toolforge.org/geohack.php?params=' + coordVal.latitude + '_N_' + coordVal.longitude + '_E_globe:earth';
$mapLink.attr('href', mapUrl).show();
}
return $group;
}
// 0b. Monolingual text datatype auto-detection & fallback
let isMonolingual = row.datatype === 'monolingualtext' ||
KNOWN_MONOLINGUAL_PROPERTIES.includes(uPid) ||
(meta && meta.datatype === 'monolingualtext') ||
(propDef && (propDef.valueType === 'rdf:langString' || propDef.hasLangTags)) ||
(row.value && typeof row.value === 'object' && ('language' in row.value || 'text' in row.value));
if (isMonolingual) {
row.datatype = 'monolingualtext';
let $group = $('<div>').css({'display': 'flex', 'gap': '8px', 'flex': '1'});
let valObj = (row.value && typeof row.value === 'object') ? row.value : {
text: typeof row.value === 'string' ? row.value : '',
language: mw.config.get('wgUserLanguage') || 'en'
};
if (!valObj.language) valObj.language = mw.config.get('wgUserLanguage') || 'en';
if (valObj.text === undefined || valObj.text === null) valObj.text = '';
row.value = valObj;
let $langInput = $('<input>')
.addClass('cradle-input')
.addClass('cradle-lang-input')
.attr('type', 'text')
.attr('placeholder', 'Lang')
.val(valObj.language);
let $textInput = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-monolingual-text-placeholder'))
.css({'flex': '1'})
.val(valObj.text);
$group.append($langInput).append($textInput);
setupLanguageAutocomplete($langInput, function(selectedCode) {
valObj.language = selectedCode;
row.value = valObj;
liveUpdateValidation();
});
$langInput.on('input', function() {
valObj.language = $langInput.val().trim();
row.value = valObj;
liveUpdateValidation();
});
$textInput.on('input', function() {
valObj.text = $textInput.val();
row.value = valObj;
liveUpdateValidation();
});
return $group;
}
// 1. wikibase-item & wikibase-property datatype
if (row.datatype === 'wikibase-item' || row.datatype === 'wikibase-property') {
if (propDef && propDef.hardselect && propDef.hardselect.length > 0) {
let $select = $('<select>').addClass('cradle-select');
function getAllQids() {
let qidList = [...propDef.hardselect];
if (row.value && typeof row.value === 'string' && /^[QP]\d+$/i.test(row.value) && !qidList.includes(row.value)) {
qidList.push(row.value);
}
return qidList;
}
function buildOptions() {
let qidList = getAllQids();
$select.empty().append($('<option>').val('').text('-- Select --'));
qidList.forEach(qid => {
let label = softselectLabels[qid] || qid;
let text = (label && label !== qid) ? `${label} (${qid})` : qid;
$select.append($('<option>').val(qid).text(text));
});
$select.val(row.value);
}
buildOptions();
let allQids = getAllQids();
let missingQids = allQids.filter(qid => !softselectLabels[qid]);
if (missingQids.length > 0) {
loadItemLabels(missingQids).then(labels => {
Object.assign(softselectLabels, labels);
buildOptions();
});
}
$select.on('change', function() {
row.value = $select.val();
liveUpdateValidation();
});
return $select;
}
let $wrapper = $('<div>').addClass('cradle-autocomplete-wrapper').css({'flex': '1'});
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', mw.msg('cradle-search-placeholder'))
.val('');
let $dropdown = $('<ul>').addClass('cradle-autocomplete-dropdown').hide();
$wrapper.append($input).append($dropdown);
function setSelectedItemUI(id, label) {
row.value = id;
if (label && label !== id) {
$input.val(`${label} (${id})`);
} else {
$input.val(id);
}
}
if (row.value) {
loadItemLabels([row.value]).then(labels => {
if (labels[row.value]) {
setSelectedItemUI(row.value, labels[row.value]);
} else {
setSelectedItemUI(row.value, row.value);
}
});
}
let searchTimeout = null;
function showSoftselectOptions() {
let optionsList = [];
if (propDef && propDef.softselect && propDef.softselect.length > 0) {
optionsList = [...propDef.softselect];
}
if (row.value && typeof row.value === 'string' && /^[QP]\d+$/i.test(row.value) && !optionsList.includes(row.value)) {
optionsList.push(row.value);
}
// Filter out QIDs that are already selected in other non-deleted rows of the same property
let otherRows = (formState[pid] || []).filter(r => r.id !== row.id && !r.isDeleted);
let usedQids = otherRows.map(r => typeof r.value === 'string' ? r.value.trim().toUpperCase() : '').filter(v => /^[QP]\d+$/i.test(v));
optionsList = optionsList.filter(qid => !usedQids.includes(qid.toUpperCase()));
if (optionsList.length > 0) {
loadItemDetails(optionsList).then(details => {
$dropdown.empty();
optionsList.forEach(qid => {
let item = details[qid] || { label: qid, description: '' };
let $r = $('<li>').addClass('cradle-autocomplete-row').css({'padding': '6px 8px', 'cursor': 'pointer'});
let $lbl = $('<div>').addClass('cradle-autocomplete-row-label').text(item.label);
$lbl.append($('<small>').css({'color': 'var(--color-subtle, #54595d)', 'margin-left': '6px'}).text(`(${qid})`));
$r.append($lbl);
if (item.description) {
$r.append($('<div>').addClass('cradle-autocomplete-row-desc').css({'font-size': '0.75rem', 'color': 'var(--color-subtle, #54595d)'}).text(item.description));
}
$r.on('click mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
setSelectedItemUI(qid, item.label);
$dropdown.hide();
liveUpdateValidation();
});
$dropdown.append($r);
});
$dropdown.show();
});
} else {
$dropdown.empty().hide();
}
}
$input.on('focus', function() {
let currentVal = $input.val();
let cleanLabel = currentVal.replace(/\s*\([QP]\d+\)$/i, '');
$input.val(cleanLabel);
setTimeout(function() { $input.select(); }, 50);
if (!$input.val().trim() || $input.val().trim().length < 2) {
showSoftselectOptions();
}
});
$input.on('blur', function() {
if (row.value && row.value.match(/^[QP]\d+$/i)) {
loadItemLabels([row.value]).then(labels => {
let label = labels[row.value] || row.value;
if (label && label !== row.value) {
$input.val(`${label} (${row.value})`);
} else {
$input.val(row.value);
}
});
}
});
$input.on('input', function() {
let query = $input.val().trim();
if (/^[qQpP]\d+$/.test(query)) {
let id = query.toUpperCase();
row.value = id;
loadItemLabels([id]).then(labels => {
if (labels[id]) {
setSelectedItemUI(id, labels[id]);
} else {
setSelectedItemUI(id, id);
}
});
} else if (!query) {
row.value = '';
}
liveUpdateValidation();
clearTimeout(searchTimeout);
if (query.length < 2) {
showSoftselectOptions();
return;
}
searchTimeout = setTimeout(function() {
searchWikidataItems(query).then(results => {
$dropdown.empty();
if (results.length === 0) {
$dropdown.hide();
return;
}
results.forEach(res => {
let $r = $('<li>').addClass('cradle-autocomplete-row').css({'padding': '6px 8px', 'cursor': 'pointer'});
let $lbl = $('<div>').addClass('cradle-autocomplete-row-label').text(res.label || res.id);
$lbl.append($('<small>').css({'color': 'var(--color-subtle, #54595d)', 'margin-left': '6px'}).text(`(${res.id})`));
$r.append($lbl);
if (res.description) {
$r.append($('<div>').addClass('cradle-autocomplete-row-desc').css({'font-size': '0.75rem', 'color': 'var(--color-subtle, #54595d)'}).text(res.description));
}
$r.on('click mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
setSelectedItemUI(res.id, res.label || res.id);
$dropdown.hide();
liveUpdateValidation();
});
$dropdown.append($r);
});
$dropdown.show();
});
}, 300);
});
$(document).on('click.cradleItemAutocomplete', function(e) {
if (!$wrapper.is(e.target) && $wrapper.has(e.target).length === 0) {
$dropdown.hide();
}
});
return $wrapper;
}
// 2. commonsMedia datatype (e.g. P18 image, P154 logo, P94 coat of arms)
if (row.datatype === 'commonsMedia') {
let $wrapper = $('<div>').addClass('cradle-autocomplete-wrapper').css({'flex': '1'});
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', 'e.g. Example.jpg or search Commons...')
.val(row.value);
let $dropdown = $('<ul>').addClass('cradle-autocomplete-dropdown').hide();
$wrapper.append($input).append($dropdown);
let searchTimeout = null;
$input.on('input', function() {
let query = $input.val().trim();
let cleanQuery = query.replace(/^File:/i, '');
row.value = cleanQuery;
liveUpdateValidation();
clearTimeout(searchTimeout);
if (query.length < 2) {
$dropdown.hide();
return;
}
searchTimeout = setTimeout(function() {
let apiUrl = 'https://commons.wikimedia.org/w/api.php?action=query&generator=search&gsrsearch=' + encodeURIComponent(query) + '&gsrnamespace=6&prop=pageimages|info&piprop=thumbnail&pithumbsize=80&format=json&origin=*';
$.getJSON(apiUrl).done(function(res) {
$dropdown.empty();
let pages = (res && res.query && res.query.pages) ? Object.values(res.query.pages) : [];
if (pages.length === 0) {
$dropdown.hide();
return;
}
pages.sort((a, b) => (a.index || 0) - (b.index || 0));
pages.slice(0, 10).forEach(page => {
let cleanTitle = (page.title || '').replace(/^File:/i, '');
let thumbUrl = page.thumbnail ? page.thumbnail.source : null;
let $row = $('<li>').addClass('cradle-autocomplete-row').css({
'display': 'flex',
'align-items': 'center',
'flex-direction': 'row',
'gap': '10px',
'padding': '6px 8px',
'cursor': 'pointer'
});
let $thumb = $('<div>').css({
'width': '40px',
'height': '40px',
'flex-shrink': '0',
'display': 'flex',
'align-items': 'center',
'justify-content': 'center',
'background': '#f8f9fa',
'border': '1px solid #eaecf0',
'border-radius': '2px'
});
if (thumbUrl) {
$thumb.append($('<img>').attr('src', thumbUrl).css({
'max-width': '40px',
'max-height': '40px',
'object-fit': 'contain'
}));
}
$row.append($thumb);
let $nameSpan = $('<span>').addClass('cradle-autocomplete-row-label').css({
'font-size': '0.825rem',
'word-break': 'break-all',
'flex': '1'
}).text(cleanTitle);
$row.append($nameSpan);
$row.on('click mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
row.value = cleanTitle;
$input.val(cleanTitle);
$dropdown.hide();
liveUpdateValidation();
});
$dropdown.append($row);
});
$dropdown.show();
}).fail(function() {
$dropdown.hide();
});
}, 300);
});
$(document).on('click.cradleCommonsMedia', function(e) {
if (!$(e.target).closest($wrapper).length) {
$dropdown.hide();
}
});
return $wrapper;
}
// 3. quantity datatype
if (row.datatype === 'quantity') {
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'number')
.attr('placeholder', 'Number value')
.val(row.value);
$input.on('input', function() {
row.value = $input.val();
liveUpdateValidation();
});
return $input;
}
// 4. time datatype
if (row.datatype === 'time') {
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', 'YYYY-MM-DD or YYYY')
.val(row.value);
$input.on('input', function() {
row.value = $input.val();
liveUpdateValidation();
});
return $input;
}
// 5. Fallback text input (string, external-id, url, etc.)
let displayVal = row.value;
if (typeof displayVal === 'object' && displayVal !== null) {
if ('latitude' in displayVal && 'longitude' in displayVal) {
displayVal = formatCoordinates(displayVal.latitude, displayVal.longitude);
} else {
displayVal = displayVal.text || displayVal.id || displayVal.time || '';
}
}
let $input = $('<input>')
.addClass('cradle-input')
.attr('type', 'text')
.attr('placeholder', `Enter value`)
.val(displayVal || '');
$input.on('input', function() {
row.value = $input.val();
liveUpdateValidation();
});
return $input;
}
/**
* Add new blank row to property values list.
*/
function addRow(pid) {
let propDef = schemaProperties[pid] || {};
let meta = propertyMetadata[pid] || {};
let sampleClaim = (isItemPage && entityData && entityData.claims && entityData.claims[pid] && entityData.claims[pid][0]);
let sampleVal = sampleClaim && sampleClaim.mainsnak && sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.value;
let claimDatatype = sampleClaim && sampleClaim.mainsnak && (sampleClaim.mainsnak.datatype || (sampleClaim.mainsnak.datavalue && sampleClaim.mainsnak.datavalue.type));
if (claimDatatype === 'globecoordinate') claimDatatype = 'globe-coordinate';
let dt = claimDatatype || inferDatatype(propDef, meta, pid, sampleVal);
formState[pid].push(createNewRowState(dt));
renderPropertyRows(pid);
liveUpdateValidation();
}
/**
* Toggle delete state on row.
*/
function toggleDeleteRow(pid, rowId) {
let index = formState[pid].findIndex(r => r.id === rowId);
if (index === -1) return;
let row = formState[pid][index];
if (row.guid === null) {
formState[pid].splice(index, 1);
} else {
row.isDeleted = !row.isDeleted;
}
renderPropertyRows(pid);
liveUpdateValidation();
}
/**
* Search wikidata items.
*/
/**
* Search EntitySchemas by label, description, or ID.
*/
function searchEntitySchemas(term) {
logDebug("[Cradle] Searching EntitySchemas in namespace 640 for:", term);
return new Promise((resolve) => {
let api = new mw.Api();
let userLang = mw.config.get('wgUserLanguage') || 'en';
function fetchLabelsForSchemas(schemaIds, rawDescriptionsMap) {
if (!schemaIds || schemaIds.length === 0) return Promise.resolve([]);
schemaIds = [...new Set(schemaIds)].slice(0, 10);
let titlesParam = schemaIds.map(id => 'EntitySchema:' + id).join('|');
return new Promise((resResolve) => {
api.get({
action: 'query',
prop: 'revisions',
titles: titlesParam,
rvslots: 'main',
rvprop: 'content',
format: 'json'
}).done(function(queryRes) {
let finalResults = [];
let pages = (queryRes && queryRes.query && queryRes.query.pages) || {};
let schemaMap = {};
Object.keys(pages).forEach(pageId => {
let p = pages[pageId];
if (p.revisions && p.revisions[0] && p.revisions[0].slots && p.revisions[0].slots.main) {
try {
let raw = p.revisions[0].slots.main['*'];
let parsed = JSON.parse(raw);
if (parsed && parsed.id) {
schemaMap[parsed.id.toUpperCase()] = parsed;
}
} catch(e) {}
}
});
schemaIds.forEach(id => {
let parsed = schemaMap[id];
let label = id;
let desc = rawDescriptionsMap[id] || '';
if (parsed) {
if (parsed.labels) {
label = (typeof parsed.labels[userLang] === 'string' && parsed.labels[userLang]) ||
(typeof parsed.labels['en'] === 'string' && parsed.labels['en']) ||
id;
}
if (parsed.descriptions) {
desc = (typeof parsed.descriptions[userLang] === 'string' && parsed.descriptions[userLang]) ||
(typeof parsed.descriptions['en'] === 'string' && parsed.descriptions['en']) ||
desc;
}
}
finalResults.push({
id: id,
label: label,
description: desc
});
});
resResolve(finalResults);
}).fail(function() {
let fallbackResults = schemaIds.map(id => ({
id: id,
label: id,
description: rawDescriptionsMap[id] || ''
}));
resResolve(fallbackResults);
});
});
}
api.get({
action: 'opensearch',
search: term,
namespace: 640,
limit: 10,
format: 'json'
}).done(function(res) {
let schemaIds = [];
let rawDescs = {};
if (res && res[1] && res[1].length > 0) {
let titles = res[1];
let descriptions = res[2] || [];
for (let i = 0; i < titles.length; i++) {
let title = titles[i];
let match = title.match(/(E\d+)$/i);
let schemaId = match ? match[1].toUpperCase() : title.replace(/^EntitySchema:/i, '').trim();
schemaIds.push(schemaId);
rawDescs[schemaId] = descriptions[i] || '';
}
fetchLabelsForSchemas(schemaIds, rawDescs).then(resolve);
} else {
// Fallback to fulltext search in namespace 640
api.get({
action: 'query',
list: 'search',
srnamespace: 640,
srsearch: term,
srlimit: 10,
format: 'json'
}).done(function(searchRes) {
let searchList = (searchRes && searchRes.query && searchRes.query.search) || [];
let listIds = [];
let listDescs = {};
searchList.forEach(item => {
let match = item.title.match(/(E\d+)$/i);
let schemaId = match ? match[1].toUpperCase() : item.title.replace(/^EntitySchema:/i, '').trim();
let snippetClean = item.snippet ? item.snippet.replace(/<[^>]+>/g, '') : '';
listIds.push(schemaId);
listDescs[schemaId] = snippetClean;
});
fetchLabelsForSchemas(listIds, listDescs).then(resolve);
}).fail(function(err) {
logError("[Cradle] Fulltext search fallback failed:", err);
resolve([]);
});
}
}).fail(function(err) {
logError("[Cradle] EntitySchema opensearch request failed:", err);
resolve([]);
});
});
}
/**
* Attaches autocompletion dropdown for EntitySchema search inputs.
*/
function attachEntitySchemaAutocompleter($wrapper, $input, onLoadCallback) {
$wrapper.css({'position': 'relative'});
let $dropdown = $('<ul>').addClass('cradle-autocomplete-dropdown').hide();
$wrapper.append($dropdown);
let searchTimeout = null;
$input.on('input', function() {
let query = $(this).val().trim();
if (searchTimeout) clearTimeout(searchTimeout);
if (query.length < 2) {
$dropdown.empty().hide();
return;
}
searchTimeout = setTimeout(function() {
searchEntitySchemas(query).then(results => {
$dropdown.empty();
if (results.length === 0) {
$dropdown.hide();
return;
}
results.forEach(res => {
let $row = $('<li>').addClass('cradle-autocomplete-row');
let labelText = (res.label && res.label !== res.id) ? `${res.label} (${res.id})` : res.id;
$row.append($('<span>').addClass('cradle-autocomplete-row-label').text(labelText));
if (res.description) {
$row.append($('<span>').addClass('cradle-autocomplete-row-desc').text(res.description));
}
$row.on('click', function(e) {
e.stopPropagation();
$input.val(`${res.id}`);
$dropdown.hide();
if (typeof onLoadCallback === 'function') {
onLoadCallback(res.id);
}
});
$dropdown.append($row);
});
$dropdown.show();
});
}, 300);
});
$(document).on('click.cradleSchemaAutocomplete', function(e) {
if (!$wrapper.is(e.target) && $wrapper.has(e.target).length === 0) {
$dropdown.hide();
}
});
}
let cachedLanguageList = null;
let commonLanguageNames = {
'en': 'English inglés',
'es': 'Spanish español',
'fr': 'French francés',
'de': 'German alemán',
'it': 'Italian italiano',
'pt': 'Portuguese portugués',
'pt-br': 'Brazilian Portuguese portugués brasileño',
'ru': 'Russian ruso',
'zh': 'Chinese chino',
'zh-hans': 'Simplified Chinese chino simplificado',
'zh-hant': 'Traditional Chinese chino tradicional',
'ja': 'Japanese japonés',
'ko': 'Korean coreano',
'ar': 'Arabic árabe',
'hi': 'Hindi hindi',
'bn': 'Bengali bengalí',
'nl': 'Dutch holandés neerlandés',
'sv': 'Swedish sueco',
'pl': 'Polish polaco',
'uk': 'Ukrainian ucraniano',
'tr': 'Turkish turco',
'vi': 'Vietnamese vietnamita',
'ca': 'Catalan catalán',
'gl': 'Galician gallego',
'eu': 'Basque euskera vasco',
'ast': 'Asturian asturiano',
'qu': 'Quechua quechua',
'ay': 'Aymara aimara',
'gn': 'Guarani guaraní',
'eo': 'Esperanto esperanto',
'la': 'Latin latín',
'grc': 'Ancient Greek griego antiguo',
'el': 'Greek griego',
'he': 'Hebrew hebreo',
'fa': 'Persian persa',
'th': 'Thai tailandés',
'id': 'Indonesian indonesio',
'ms': 'Malay malayo',
'sw': 'Swahili suajili',
'fi': 'Finnish finlandés',
'da': 'Danish danés',
'no': 'Norwegian noruego',
'nb': 'Bokmål noruego bokmål',
'nn': 'Nynorsk noruego nynorsk',
'cs': 'Czech checo',
'hu': 'Hungarian húngaro',
'ro': 'Romanian rumano',
'bg': 'Bulgarian búlgaro',
'sr': 'Serbian serbio',
'hr': 'Croatian croata',
'sk': 'Slovak eslovaco',
'sl': 'Slovenian esloveno',
'et': 'Estonian estonio',
'lv': 'Latvian letón',
'lt': 'Lithuanian lituano'
};
function fetchSupportedLanguages() {
if (cachedLanguageList) {
return Promise.resolve(cachedLanguageList);
}
return new Promise((resolve) => {
let api = new mw.Api();
api.get({
action: 'query',
meta: 'wbcontentlanguages|languageinfo',
wbclcontext: 'monolingualtext',
wbclprop: 'code|name|autonym',
liprop: 'code|name|autonym',
formatversion: 2
}).done(function(res) {
let wbLangs = (res && res.query && res.query.wbcontentlanguages) ? res.query.wbcontentlanguages : {};
let cldrLangs = (res && res.query && res.query.languageinfo) ? res.query.languageinfo : {};
let codes = new Set([...Object.keys(wbLangs), ...Object.keys(cldrLangs)]);
if (codes.size > 0) {
cachedLanguageList = Array.from(codes).map(code => {
let wbObj = wbLangs[code] || {};
let cldrObj = cldrLangs[code] || {};
let autonym = cldrObj.autonym || wbObj.autonym || wbObj.name || code;
let name = cldrObj.name || wbObj.name || autonym;
let extra = commonLanguageNames[code] || '';
let displayName = name || autonym;
return {
code: code,
name: displayName,
searchStr: (code + ' ' + name + ' ' + autonym + ' ' + extra).toLowerCase()
};
});
cachedLanguageList.sort((a, b) => a.code.localeCompare(b.code));
resolve(cachedLanguageList);
return;
}
fallbackLangs();
}).fail(function() {
fallbackLangs();
});
function fallbackLangs() {
api.get({
action: 'query',
meta: 'siteinfo',
siprop: 'languages',
formatversion: 2
}).done(function(res) {
let langs = (res && res.query && res.query.languages) ? res.query.languages : [];
cachedLanguageList = langs.map(l => {
let code = l.code || '';
let autonym = l.name || l['*'] || code;
let extra = commonLanguageNames[code] || '';
return {
code: code,
name: autonym,
searchStr: (code + ' ' + autonym + ' ' + extra).toLowerCase()
};
});
resolve(cachedLanguageList);
}).fail(function() {
cachedLanguageList = Object.keys(commonLanguageNames).map(c => ({
code: c,
name: commonLanguageNames[c].split(' ')[0],
searchStr: (c + ' ' + commonLanguageNames[c]).toLowerCase()
}));
resolve(cachedLanguageList);
});
}
});
}
function setupLanguageAutocomplete($input, onSelect) {
let $wrapper = $('<div>').addClass('cradle-lang-autocomplete-wrapper').css({
'position': 'relative',
'flex': '0 0 110px',
'min-width': '110px',
'display': 'inline-block'
});
$input.css({'width': '100%', 'box-sizing': 'border-box'}).wrap($wrapper);
let $containerWrapper = $input.parent();
let $dropdown = $('<ul>').addClass('cradle-autocomplete-dropdown').css({
'position': 'absolute',
'top': '100%',
'left': '0',
'min-width': '220px',
'max-height': '180px',
'overflow-y': 'auto',
'z-index': '10010',
'background-color': 'var(--background-color-base, #ffffff)',
'border': '1px solid var(--border-color-base, #a2a9b1)',
'border-radius': '2px',
'box-shadow': '0 4px 12px rgba(0,0,0,0.15)',
'margin': '2px 0 0 0',
'padding': '0',
'list-style': 'none'
}).hide();
$containerWrapper.append($dropdown);
function updateDropdown() {
let q = $input.val().trim().toLowerCase();
fetchSupportedLanguages().then(langs => {
let filtered = [];
if (!q) {
filtered = langs.slice(0, 12);
} else {
filtered = langs.filter(l => l.searchStr.includes(q));
filtered.sort((a, b) => {
if (a.code === q) return -1;
if (b.code === q) return 1;
if (a.code.startsWith(q)) return -1;
if (b.code.startsWith(q)) return 1;
return 0;
});
filtered = filtered.slice(0, 15);
}
$dropdown.empty();
if (filtered.length === 0) {
$dropdown.hide();
return;
}
filtered.forEach(item => {
let $li = $('<li>').addClass('cradle-autocomplete-row').css({
'padding': '6px 10px',
'font-size': '0.8rem',
'cursor': 'pointer',
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center'
});
$li.append($('<span>').css({'font-weight': 'bold'}).text(item.name));
$li.append($('<small>').css({'color': 'var(--color-subtle, #54595d)', 'margin-left': '6px'}).text(`(${item.code})`));
$li.on('click mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
$input.val(item.code);
$dropdown.hide();
if (typeof onSelect === 'function') {
onSelect(item.code);
}
});
$dropdown.append($li);
});
$dropdown.show();
});
}
$input.on('focus input', function() {
updateDropdown();
});
$(document).on('click.cradleLangAutocomplete', function(e) {
if (!$wrapper.is(e.target) && $wrapper.has(e.target).length === 0) {
$dropdown.hide();
}
});
}
function searchWikidataItems(term) {
logDebug("[Cradle] Searching Wikidata items for:", term);
return new Promise((resolve) => {
let api = new mw.Api();
api.get({
action: 'wbsearchentities',
search: term,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'item',
format: 'json'
}).done(function(res) {
logDebug("[Cradle] Search results received:", res.search);
resolve(res.search || []);
}).fail(function(err) {
logError("[Cradle] Search API request failed:", err);
resolve([]);
});
});
}
/**
* Saves form changes back to Wikidata (either editing an item or creating a new one).
*/
function saveForm() {
let claimsPayload = {};
let hasChanges = false;
let mandatoryErrors = [];
let creationData = {
labels: {},
descriptions: {},
aliases: {},
claims: claimsPayload
};
if (activeMode === 'create') {
let primaryLabelFound = false;
$('.cradle-identity-lang-row').each(function() {
let langCode = $(this).find('.cradle-lang-input').val().trim() || 'en';
let labelVal = $(this).find('.cradle-label-input').val().trim();
let descVal = $(this).find('.cradle-desc-input').val().trim();
let aliasesVal = $(this).find('.cradle-aliases-input').val().trim();
if (labelVal) {
creationData.labels[langCode] = { language: langCode, value: labelVal };
primaryLabelFound = true;
}
if (descVal) {
creationData.descriptions[langCode] = { language: langCode, value: descVal };
}
if (aliasesVal) {
let aliasList = aliasesVal.split('|').map(a => a.trim()).filter(Boolean);
if (aliasList.length > 0) {
creationData.aliases[langCode] = aliasList.map(a => ({ language: langCode, value: a }));
}
}
});
if (!primaryLabelFound) {
mandatoryErrors.push(mw.msg('cradle-label-required'));
}
}
// Validate mandatory claims & Wikidata constraints
Object.keys(schemaProperties).forEach(pid => {
let propDef = schemaProperties[pid];
let rows = formState[pid];
let meta = propertyMetadata[pid] || { label: pid };
let activeClaimsCount = rows.filter(r => !r.isDeleted && !isEmptyValue(r.value, r.datatype)).length;
if (propDef.mandatory && activeClaimsCount === 0) {
mandatoryErrors.push(mw.msg('cradle-mandatory-error', meta.label, pid));
}
// Also check Wikidata mandatory constraint (P2302 -> Q21503250)
if (meta.constraints && meta.constraints.length > 0) {
meta.constraints.forEach(c => {
if (c.isMandatory && activeClaimsCount === 0 && !propDef.mandatory) {
mandatoryErrors.push(mw.msg('cradle-constraint-mandatory-alert', meta.label, pid));
}
});
}
});
// Build claims payload
Object.keys(formState).forEach(pid => {
let rows = formState[pid];
let original = (activeMode === 'edit' && entityData.claims && entityData.claims[pid]) || [];
let propertyClaims = [];
rows.forEach(row => {
if (row.isDeleted) {
if (row.guid) {
propertyClaims.push({
id: row.guid,
remove: ""
});
hasChanges = true;
}
return;
}
if (isEmptyValue(row.value, row.datatype)) return;
let datavalue = constructDataValue(row.value, row.datatype);
if (!datavalue) return;
if (row.guid) {
// Update claim
let origClaim = original.find(c => c.id === row.guid);
if (origClaim && isValueChanged(origClaim, datavalue)) {
propertyClaims.push({
id: row.guid,
mainsnak: {
snaktype: 'value',
property: pid,
datavalue: datavalue
},
type: 'statement'
});
hasChanges = true;
}
} else {
// Add new claim
propertyClaims.push({
mainsnak: {
snaktype: 'value',
property: pid,
datavalue: datavalue
},
type: 'statement'
});
hasChanges = true;
}
});
if (propertyClaims.length > 0) {
claimsPayload[pid] = propertyClaims;
}
});
if (activeMode === 'edit' && !hasChanges) {
mw.notify(mw.msg('cradle-no-changes'), { type: 'warn' });
closeEditor();
return;
}
// Disable Save button and show spinner
let $saveBtn = $('.cradle-btn-primary').prop('disabled', true);
let origHtml = $saveBtn.html();
$saveBtn.html($('<div>').addClass('cradle-spinner'));
let api = new mw.Api();
let queryParams = {
action: 'wbeditentity'
};
if (activeMode === 'edit') {
queryParams.id = entityId;
queryParams.data = JSON.stringify({ claims: claimsPayload });
queryParams.summary = mw.msg('cradle-edit-summary', activeSchema ? activeSchema.id : 'Custom');
} else {
queryParams.new = 'item';
queryParams.data = JSON.stringify(creationData);
queryParams.summary = mw.msg('cradle-create-summary', activeTemplate ? activeTemplate.title : (activeSchema ? activeSchema.id : 'Custom'));
}
api.postWithEditToken(queryParams).then(res => {
if (activeMode === 'edit') {
mw.notify(mw.msg('cradle-save-success'), { type: 'success' });
setTimeout(() => {
location.reload();
}, 1000);
} else {
let newQid = res.entity.id;
mw.notify(mw.msg('cradle-create-success', newQid), { type: 'success' });
setTimeout(() => {
location.href = mw.util.getUrl(newQid);
}, 1200);
}
}).catch((code, err) => {
logError("[Cradle] Save error:", code, err);
let errMsg = err && err.error && err.error.info ? err.error.info : code;
mw.notify(mw.msg('cradle-save-error', errMsg), { type: 'error' });
$saveBtn.prop('disabled', false).html(origHtml);
});
}
/**
* Checks if value is empty depending on data type.
*/
function isEmptyValue(value, datatype) {
if (value === null || value === undefined) return true;
if (datatype === 'globe-coordinate' || datatype === 'globecoordinate' || (typeof value === 'object' && ('latitude' in value || 'longitude' in value))) {
if (typeof value === 'object') {
return value.latitude === '' || value.latitude === null || value.longitude === '' || value.longitude === null;
}
if (typeof value === 'string') {
return !parseCoordinateInput(value);
}
return !value;
}
if (datatype === 'monolingualtext' || (typeof value === 'object' && ('language' in value || 'text' in value))) {
if (typeof value === 'object') {
return !value.text || !String(value.text).trim();
}
return !value;
}
if (typeof value === 'string') {
return value.trim() === '';
}
return false;
}
/**
* Constructs the standard Wikibase API datavalue object.
*/
function constructDataValue(value, datatype) {
if (datatype === 'wikibase-item') {
let qid = typeof value === 'string' ? value.trim().toUpperCase() : (value && value.id ? value.id : '');
if (!qid.startsWith('Q')) return null;
let numId = parseInt(qid.substring(1));
return {
type: 'wikibase-entityid',
value: {
'entity-type': 'item',
'numeric-id': numId,
'id': qid
}
};
}
if (datatype === 'entity-schema') {
let eid = typeof value === 'string' ? value.trim().toUpperCase() : (value && value.id ? value.id : '');
if (!eid || !eid.startsWith('E')) return null;
return {
type: 'wikibase-entityid',
value: {
'entity-type': 'entity-schema',
'id': eid
}
};
}
if (datatype === 'monolingualtext' || (typeof value === 'object' && value !== null && ('language' in value || 'text' in value))) {
let t = (value && typeof value === 'object' && value.text !== undefined) ? String(value.text).trim() : (typeof value === 'string' ? value.trim() : '');
let l = (value && typeof value === 'object' && value.language) ? String(value.language).trim().toLowerCase() : (mw.config.get('wgUserLanguage') || 'en');
if (!t) return null;
return {
type: 'monolingualtext',
value: {
text: t,
language: l
}
};
}
if (datatype === 'globe-coordinate' || datatype === 'globecoordinate' || (typeof value === 'object' && value !== null && ('latitude' in value || 'longitude' in value))) {
let lat = NaN, lon = NaN, prec = 0.0001, globe = 'http://www.wikidata.org/entity/Q2', alt = null;
if (typeof value === 'object' && value !== null) {
lat = parseFloat(value.latitude);
lon = parseFloat(value.longitude);
if (value.precision) prec = parseFloat(value.precision);
if (value.globe) globe = value.globe;
if (value.altitude !== undefined) alt = value.altitude;
} else if (typeof value === 'string') {
let parsed = parseCoordinateInput(value);
if (parsed) {
lat = parsed.latitude;
lon = parsed.longitude;
prec = parsed.precision || 0.0001;
}
}
if (isNaN(lat) || isNaN(lon)) return null;
return {
type: 'globecoordinate',
value: {
latitude: lat,
longitude: lon,
altitude: alt,
precision: prec,
globe: globe
}
};
}
if (datatype === 'string' || datatype === 'external-id' || datatype === 'url' || datatype === 'commonsMedia') {
return {
type: 'string',
value: typeof value === 'string' ? value.trim() : String(value).trim()
};
}
if (datatype === 'quantity') {
let valStr = String(value).trim();
if (valStr && !valStr.startsWith('+') && !valStr.startsWith('-')) {
valStr = '+' + valStr;
}
return {
type: 'quantity',
value: {
amount: valStr,
unit: '1'
}
};
}
if (datatype === 'time') {
return parseNaturalDate(value);
}
return null;
}
/**
* Checks if form input value differs from existing claim value.
*/
function isValueChanged(origClaim, datavalue) {
if (!origClaim.mainsnak || !origClaim.mainsnak.datavalue) return true;
let origVal = origClaim.mainsnak.datavalue.value;
let newVal = datavalue.value;
if (datavalue.type !== origClaim.mainsnak.datavalue.type) return true;
if (datavalue.type === 'wikibase-entityid') {
return origVal.id !== newVal.id;
}
if (datavalue.type === 'string') {
return origVal !== newVal;
}
if (datavalue.type === 'monolingualtext') {
return origVal.text !== newVal.text || origVal.language !== newVal.language;
}
if (datavalue.type === 'globecoordinate') {
let latMatch = Math.abs(parseFloat(origVal.latitude) - parseFloat(newVal.latitude)) < 1e-7;
let lonMatch = Math.abs(parseFloat(origVal.longitude) - parseFloat(newVal.longitude)) < 1e-7;
return !latMatch || !lonMatch;
}
if (datavalue.type === 'quantity') {
return parseFloat(origVal.amount) !== parseFloat(newVal.amount);
}
if (datavalue.type === 'time') {
return origVal.time !== newVal.time;
}
return JSON.stringify(origVal) !== JSON.stringify(newVal);
}
// Load hook
/**
* Reconstruct user schemas from a single User:Name/Cradle page wikitext.
*/
function parseUserCradlePage(wikitext) {
let sections = {};
if (!wikitext) return sections;
let lines = wikitext.split('\n');
let currentHeader = null;
let currentLines = [];
lines.forEach(line => {
let headerMatch = line.match(/^==\s*(.+?)\s*==$/);
if (headerMatch) {
if (currentHeader) {
sections[currentHeader] = currentLines.join('\n');
}
currentHeader = headerMatch[1].trim();
currentLines = [line];
} else {
if (currentHeader) {
currentLines.push(line);
}
}
});
if (currentHeader) {
sections[currentHeader] = currentLines.join('\n');
}
return sections;
}
/**
* Fetch the wikitext sections of User:Name/Cradle page.
*/
function fetchUserSchemas(callback) {
let api = new mw.Api();
let userName = mw.config.get('wgUserName');
if (!userName) {
if (callback) callback({});
return;
}
let pageTitle = 'User:' + userName + '/Cradle';
api.get({
action: 'query',
prop: 'revisions',
titles: pageTitle,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(data) {
let page = data.query.pages[0];
if (page && !page.missing) {
let content = page.revisions[0].slots.main.content;
let sections = parseUserCradlePage(content);
if (callback) callback(sections);
} else {
if (callback) callback({});
}
}).fail(function() {
if (callback) callback({});
});
}
/**
* Delete a schema section from User:Name/Cradle page.
*/
function deleteSchemaFromPage(schemaName) {
let api = new mw.Api();
let userName = mw.config.get('wgUserName');
let pageTitle = 'User:' + userName + '/Cradle';
api.get({
action: 'query',
prop: 'revisions',
titles: pageTitle,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(data) {
let page = data.query.pages[0];
if (!page || page.missing) return;
let content = page.revisions[0].slots.main.content;
let sections = parseUserCradlePage(content);
if (sections[schemaName]) {
delete sections[schemaName];
let newWikitext = Object.values(sections).join('\n\n');
api.postWithToken('csrf', {
action: 'edit',
title: pageTitle,
text: newWikitext,
summary: 'Eliminado esquema de Cradle: ' + schemaName,
formatversion: 2
}).done(function() {
mw.notify(mw.msg('cradle-schema-deleted'));
renderCreateOptionsSelector();
});
}
});
}
/**
* Add or update a schema section on User:Name/Cradle page.
*/
function saveOrUpdateSchema(schemaName, schemaWikitext, callback) {
let api = new mw.Api();
let userName = mw.config.get('wgUserName');
let pageTitle = 'User:' + userName + '/Cradle';
api.get({
action: 'query',
prop: 'revisions',
titles: pageTitle,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(data) {
let page = data.query.pages[0];
let content = "";
if (page && !page.missing) {
content = page.revisions[0].slots.main.content;
}
let sections = parseUserCradlePage(content);
sections[schemaName] = schemaWikitext;
let newWikitext = Object.values(sections).join('\n\n');
api.postWithToken('csrf', {
action: 'edit',
title: pageTitle,
text: newWikitext,
summary: mw.msg('cradle-summary-create-update-schema', schemaName),
formatversion: 2
}).done(function() {
mw.notify(mw.msg('cradle-schema-saved'));
if (callback) callback();
}).fail(function(code, err) {
mw.notify(mw.msg('cradle-save-schema-failed', code), { type: 'error' });
});
});
}
/**
* Search community user schemas having "/Cradle" in user space.
*/
function searchCommunitySchemas(searchQuery, callback) {
let api = new mw.Api();
api.get({
action: 'query',
list: 'search',
srnamespace: 2,
srsearch: 'intitle:"/Cradle" ' + searchQuery,
format: 'json'
}).done(function(data) {
if (!data.query || !data.query.search) {
callback([]);
return;
}
let pending = data.query.search.length;
let results = [];
if (pending === 0) {
callback([]);
return;
}
data.query.search.forEach(page => {
api.get({
action: 'query',
prop: 'revisions',
titles: page.title,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(pageData) {
let p = pageData.query.pages[0];
if (p && !p.missing) {
let content = p.revisions[0].slots.main.content;
let sections = parseUserCradlePage(content);
let author = page.title.split('/Cradle')[0].replace('User:', '');
Object.keys(sections).forEach(schemaName => {
if (schemaName.toLowerCase().includes(searchQuery.toLowerCase()) || searchQuery === '') {
results.push({
title: page.title,
name: schemaName,
author: author
});
}
});
}
pending--;
if (pending === 0) {
callback(results);
}
}).fail(function() {
pending--;
if (pending === 0) {
callback(results);
}
});
});
}).fail(function() {
callback([]);
});
}
/**
* Loads a user schema, parses it, and loads the active template.
*/
function loadAndDisplayUserSchema(fullTitle, schemaName) {
let api = new mw.Api();
api.get({
action: 'query',
prop: 'revisions',
titles: fullTitle,
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).done(function(data) {
let page = data.query.pages[0];
if (page && !page.missing) {
let content = page.revisions[0].slots.main.content;
let sections = parseUserCradlePage(content);
if (sections[schemaName]) {
let parsed = parseCradleWikitext(sections[schemaName]);
cradleTemplates[schemaName.toLowerCase().replace(/ /g, '_')] = {
title: schemaName,
labels: parsed.labels,
props: parsed.props
};
loadAndDisplayTemplate(schemaName.toLowerCase().replace(/ /g, '_'));
} else {
mw.notify(mw.msg('cradle-schema-not-found'), { type: 'error' });
}
}
});
}
/**
* Normalizes a ShEx shape label while preserving valid identifier characters.
*/
function normalizeShExShapeLabel(rawName, fallback) {
let cleaned = String(rawName || '').replace(/^[@<:]+|[>]+$/g, '').trim();
if (cleaned.includes('#')) {
cleaned = cleaned.split('#').pop().trim();
}
cleaned = cleaned.replace(/[^A-Za-z0-9_:-]/g, '_');
return cleaned || (fallback || 'sub_shape');
}
/**
* Parses an external EntitySchema reference (e.g. 'E10' or 'E10#country') into { schemaId, shapeName }.
*/
function parseExternalSubShapeSpec(externalIdRaw, subShapeNameRaw) {
let rawExt = String(externalIdRaw || '').trim();
let rawName = String(subShapeNameRaw || '').replace(/^[@<:]+|[>]+$/g, '').trim();
let schemaId = '';
let shapeName = '';
let hashMatch = rawExt.match(/^(E?\d+)#(.+)$/i) || rawName.match(/^(E\d+)#(.+)$/i);
if (hashMatch) {
schemaId = hashMatch[1].toUpperCase();
if (!schemaId.startsWith('E')) schemaId = 'E' + schemaId;
shapeName = normalizeShExShapeLabel(hashMatch[2], '');
} else {
if (rawExt) {
let digits = rawExt.replace(/^EntitySchema:/i, '').trim();
if (/^E?\d+$/i.test(digits)) {
schemaId = digits.toUpperCase().startsWith('E') ? digits.toUpperCase() : ('E' + digits);
}
}
if (!schemaId && /^E\d+$/i.test(rawName)) {
schemaId = rawName.toUpperCase();
}
if (rawName && !/^E\d+$/i.test(rawName)) {
shapeName = normalizeShExShapeLabel(rawName, '');
}
}
if (!shapeName) {
shapeName = schemaId || 'external_shape';
}
return { schemaId: schemaId, shapeName: shapeName };
}
/**
* Generates rich Wikidata-standard ShEx (Shape Expression) code for an EntitySchema,
* supporting both internal sub-schemas (<SubShape> EXTRA wdt:P31 { ... }) and
* external schemas via IMPORT <http://www.wikidata.org/wiki/Special:EntitySchemaText/E...>.
*/
function generateShExCode(title, propRows, propertyLabels, targetItem, subShapes, baseSchema) {
let cleanTitle = (title || 'custom_shape').toLowerCase().replace(/[^a-z0-9_]/g, '');
if (!cleanTitle) cleanTitle = 'custom_shape';
let targetQID = (targetItem || '').trim().toUpperCase();
let rawBaseSchema = (baseSchema || '').trim();
let importedSchemaIds = [];
let baseShapeRef = '';
if (rawBaseSchema) {
let baseSpec = parseExternalSubShapeSpec(rawBaseSchema, '');
if (baseSpec.schemaId) {
if (!importedSchemaIds.includes(baseSpec.schemaId)) {
importedSchemaIds.push(baseSpec.schemaId);
}
baseShapeRef = (baseSpec.shapeName && baseSpec.shapeName !== baseSpec.schemaId)
? baseSpec.shapeName
: (baseSpec.schemaId === 'E10' ? 'human' : baseSpec.schemaId);
} else {
baseShapeRef = normalizeShExShapeLabel(rawBaseSchema, '');
}
}
let internalSubShapesMap = {};
let externalSubShapeComments = [];
(propRows || []).forEach(row => {
if (!row) return;
let vType = row.valueType || 'IRI';
if (vType === 'subshape' || (vType && vType.startsWith('@<'))) {
let mode = row.subShapeMode || ((row.subShapeExternalId || /^E\d+(?:#.+)?$/i.test(row.subShapeName || '')) ? 'external' : 'internal');
if (mode === 'external') {
let extSpec = parseExternalSubShapeSpec(row.subShapeExternalId, row.subShapeName);
if (extSpec.schemaId && !importedSchemaIds.includes(extSpec.schemaId)) {
importedSchemaIds.push(extSpec.schemaId);
}
if (extSpec.schemaId && extSpec.shapeName) {
externalSubShapeComments.push(`# externalSubShape: @<${extSpec.shapeName}> from EntitySchema:${extSpec.schemaId}`);
}
} else {
let sName = normalizeShExShapeLabel(row.subShapeName || vType, 'sub_shape');
let qidsStr = row.subShapeQids || row.hardselect || row.softselect || '';
let qids = (Array.isArray(qidsStr) ? qidsStr : String(qidsStr).split(','))
.map(q => (q || '').trim().toUpperCase())
.filter(q => /^Q\d+$/i.test(q));
if (!internalSubShapesMap[sName.toLowerCase()]) {
internalSubShapesMap[sName.toLowerCase()] = { name: sName, qids: qids };
} else if (qids.length > 0) {
qids.forEach(q => {
if (!internalSubShapesMap[sName.toLowerCase()].qids.includes(q)) {
internalSubShapesMap[sName.toLowerCase()].qids.push(q);
}
});
}
}
}
});
let lines = [];
if (targetQID && /^Q\d+$/i.test(targetQID)) {
lines.push(`# targetItem: ${targetQID}`);
lines.push(`# Associated Item / Target Class: ${targetQID}`);
}
if (importedSchemaIds.length > 0) {
lines.push(`# Base / Imported External Schemas: ${importedSchemaIds.map(id => 'EntitySchema:' + id).join(', ')}`);
}
externalSubShapeComments.forEach(c => {
if (!lines.includes(c)) lines.push(c);
});
lines.push(`# Schema: ${title || cleanTitle}`);
lines.push(`# Generated with Cradle Schema Designer on Wikidata (https://www.wikidata.org/wiki/Wikidata:Cradle-gadget)`);
importedSchemaIds.forEach(schemaNum => {
lines.push(`IMPORT <http://www.wikidata.org/wiki/Special:EntitySchemaText/${schemaNum}>`);
});
lines.push(``);
lines.push(`PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>`);
lines.push(`PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>`);
lines.push(`PREFIX wd: <http://www.wikidata.org/entity/>`);
lines.push(`PREFIX wdt: <http://www.wikidata.org/prop/direct/>`);
lines.push(`PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>`);
lines.push(`PREFIX geo: <http://www.opengis.net/ont/geosparql#>`);
lines.push(``);
lines.push(`start = @<${cleanTitle}>`);
lines.push(``);
let headerModifier = baseShapeRef ? ` @<${baseShapeRef}> AND EXTRA wdt:P31` : ` EXTRA wdt:P31`;
lines.push(`<${cleanTitle}>${headerModifier} {`);
let propMap = propertyLabels || propertyMetadata || {};
let orGroups = {};
(propRows || []).forEach((row) => {
let pid = row.pid;
let meta = propMap[pid] || {};
let label = (meta && meta.label) ? meta.label : (typeof meta === 'string' ? meta : pid);
let valueExpr = '.';
let valueType = row.valueType || 'IRI';
if (valueType === 'xsd:string') valueExpr = 'xsd:string';
else if (valueType === 'rdf:langString') valueExpr = 'rdf:langString';
else if (valueType === 'xsd:dateTime') valueExpr = 'xsd:dateTime';
else if (valueType === 'xsd:decimal') valueExpr = 'xsd:decimal';
else if (valueType === 'geo:wktLiteral') valueExpr = 'geo:wktLiteral';
else if (valueType && valueType.startsWith('@<')) valueExpr = valueType;
else if (valueType === 'subshape') {
let mode = row.subShapeMode || ((row.subShapeExternalId || /^E\d+(?:#.+)?$/i.test(row.subShapeName || '')) ? 'external' : 'internal');
if (mode === 'external') {
let extSpec = parseExternalSubShapeSpec(row.subShapeExternalId, row.subShapeName);
valueExpr = `@<${extSpec.shapeName}>`;
} else {
let sName = normalizeShExShapeLabel(row.subShapeName, 'sub_shape');
valueExpr = `@<${sName}>`;
}
} else {
let options = [];
let qidsStr = row.hardselect || row.softselect || '';
if (qidsStr) {
let qids = (Array.isArray(qidsStr) ? qidsStr : String(qidsStr).split(',')).map(q => (q || '').trim()).filter(q => /^Q\d+$/i.test(q));
if (qids.length > 0) {
options = qids.map(q => `wd:${q.toUpperCase()}`);
}
}
valueExpr = options.length > 0 ? `[${options.join(' ')}]` : (valueType === 'IRI' ? 'IRI' : '.');
}
let cardSymbol = ';';
if (row.cardinality === '+') cardSymbol = '+ ;';
else if (row.cardinality === '*') cardSymbol = '* ;';
else if (row.cardinality === '?') cardSymbol = '? ;';
else if (row.cardinality === '1') cardSymbol = ';';
else if (row.mandatory) cardSymbol = row.allowMultiple ? '+ ;' : ';';
else cardSymbol = row.allowMultiple ? '* ;' : '? ;';
let comment = label ? ` # ${label}` : '';
if (row.orGroup) {
let gName = row.orGroup.trim();
if (!orGroups[gName]) orGroups[gName] = [];
orGroups[gName].push(` wdt:${pid} ${valueExpr}${comment}`);
} else {
lines.push(` wdt:${pid} ${valueExpr} ${cardSymbol}${comment}`);
}
});
Object.keys(orGroups).forEach(groupName => {
lines.push(` # Grupo alternativo (OR): ${groupName}`);
lines.push(` (`);
let items = orGroups[groupName];
items.forEach((item, idx) => {
let isLast = (idx === items.length - 1);
lines.push(` ${item}${isLast ? '' : ' |'}`);
});
lines.push(` ) ;`);
});
lines.push(` rdfs:label rdf:langString+;`);
lines.push(`}`);
let emittedSubShapes = new Set([cleanTitle.toLowerCase()]);
if (subShapes && Array.isArray(subShapes) && subShapes.length > 0) {
subShapes.forEach(sub => {
let subName = normalizeShExShapeLabel(sub.name, 'sub_shape');
emittedSubShapes.add(subName.toLowerCase());
lines.push(``);
lines.push(`<${subName}> EXTRA wdt:P31 {`);
if (sub.props && Array.isArray(sub.props) && sub.props.length > 0) {
sub.props.forEach(sp => {
let sPid = sp.pid;
let sMeta = propMap[sPid] || {};
let sLabel = (sMeta && sMeta.label) ? sMeta.label : (typeof sMeta === 'string' ? sMeta : sPid);
let sValExpr = sp.valueType || 'IRI';
let sCard = sp.cardinality || ';';
lines.push(` wdt:${sPid} ${sValExpr} ${sCard} # ${sLabel}`);
});
} else if (sub.qids && sub.qids.length > 0) {
lines.push(` wdt:P31 [ ${sub.qids.map(q => 'wd:' + q.toUpperCase()).join(' ')} ] + ;`);
} else {
lines.push(` wdt:P31 IRI + ;`);
}
lines.push(`}`);
});
}
Object.keys(internalSubShapesMap).forEach(k => {
if (emittedSubShapes.has(k)) return;
let subInfo = internalSubShapesMap[k];
emittedSubShapes.add(k);
lines.push(``);
lines.push(`<${subInfo.name}> EXTRA wdt:P31 {`);
if (subInfo.qids && subInfo.qids.length > 0) {
lines.push(` wdt:P31 [ ${subInfo.qids.map(q => 'wd:' + q.toUpperCase()).join(' ')} ] + ;`);
} else {
lines.push(` wdt:P31 IRI + ;`);
}
lines.push(`}`);
});
return lines.join('\n');
}
/**
* Validates ShEx (Shape Expression) syntax and returns { valid: boolean, errors: Array<string> }.
*/
function validateShExSyntax(shexText) {
let errors = [];
if (!shexText || !shexText.trim()) {
return { valid: false, errors: ['ShEx code is empty.'] };
}
let cleaned = stripShExComments(shexText);
let lines = shexText.split('\n');
// 1. Check balanced brackets, braces, and angle brackets
let openBraces = (cleaned.match(/\{/g) || []).length;
let closeBraces = (cleaned.match(/\}/g) || []).length;
if (openBraces !== closeBraces) {
errors.push(`Unbalanced braces: found ${openBraces} '{' and ${closeBraces} '}'.`);
}
let openBrackets = (cleaned.match(/\[/g) || []).length;
let closeBrackets = (cleaned.match(/\]/g) || []).length;
if (openBrackets !== closeBrackets) {
errors.push(`Unbalanced brackets: found ${openBrackets} '[' and ${closeBrackets} ']'.`);
}
let openAngles = (cleaned.match(/</g) || []).length;
let closeAngles = (cleaned.match(/>/g) || []).length;
if (openAngles !== closeAngles) {
errors.push(`Unbalanced angle brackets: found ${openAngles} '<' and ${closeAngles} '>'.`);
}
// 2. Check for misplaced AND after EXTRA (invalid ShExC order)
if (/\bEXTRA\s+[^\{]*\bAND\s+@/i.test(cleaned)) {
errors.push("Invalid ShExC header order: '@<BaseShape> AND' must appear before 'EXTRA wdt:P31 {', not after EXTRA.");
}
// 3. Check start shape declaration vs shape definitions and sub-shape references
let discovered = discoverShapesInShEx(cleaned, null);
let hasImports = extractImportIdsFromShEx(shexText).length > 0 || /\bIMPORT\s+<[^>]+>/i.test(cleaned);
let startMatch = cleaned.match(/start\s*=\s*@<\s*(.+?)\s*>/i);
if (startMatch) {
let startShapeName = startMatch[1].trim();
if (!discovered.shapesMap[startShapeName.toLowerCase()] && !hasImports) {
errors.push(`Declaration 'start = @<${startShapeName}>' does not match any defined shape '<${startShapeName}> {'.`);
}
} else if (discovered.shapes.length === 0) {
errors.push("No valid shape definition found like '<ShapeName> { ... }'.");
}
// Check that internal @<SubShape> references resolve to a defined shape or an IMPORT directive
discovered.shapes.forEach(s => {
let refRegex = /@<\s*([^>]+)\s*>/g;
let rm;
while ((rm = refRegex.exec(s.content)) !== null) {
let refName = (rm[1] || '').trim();
if (refName && !discovered.shapesMap[refName.toLowerCase()] && !hasImports) {
errors.push(`Referenced sub-schema '@<${refName}>' in '<${s.name}>' is not defined in this schema and no IMPORT directive is present.`);
}
}
});
// 4. Line-by-line checks for property syntax
let inShape = false;
lines.forEach((line, idx) => {
let cleanLine = line.replace(/#.*/, '').trim();
if (!cleanLine) return;
if (cleanLine.includes('{')) inShape = true;
if (cleanLine.includes('}')) inShape = false;
if (inShape && !cleanLine.startsWith('{') && !cleanLine.startsWith('}')) {
if (cleanLine.includes(':')) {
let propMatch = cleanLine.match(/(?:wdt|p|ps|pxt):([A-Za-z0-9_]+)/);
if (propMatch) {
let pid = propMatch[1];
if (!/^P\d+$/i.test(pid)) {
errors.push(`Line ${idx + 1}: Invalid property ID '${pid}' (must be format P123).`);
}
}
let bracketMatch = cleanLine.match(/\[\s*([^\]]+)\s*\]/);
if (bracketMatch) {
let items = bracketMatch[1].split(/\s+/).filter(Boolean);
items.forEach(item => {
if (item.startsWith('wd:')) {
let qid = item.substring(3);
if (!/^Q\d+$/i.test(qid)) {
errors.push(`Line ${idx + 1}: Invalid QID '${item}' (must be format wd:Q123).`);
}
}
});
}
}
}
});
return {
valid: errors.length === 0,
errors: errors
};
}
/**
* Publishes a new EntitySchema to Wikidata by submitting the Special:NewEntitySchema form directly.
*/
function publishEntitySchemaToWikidata(title, desc, aliasesStr, shexText) {
const ENTITY_SCHEMA_ID_PATTERN = /EntitySchema:(E\d+)/;
const TOKEN_FIELD_PATTERN = /(?:token|wpEditToken)$/i;
const userLang = String(
mw.config.get('wgUserLanguage') ||
mw.config.get('wgContentLanguage') ||
'en'
).trim();
const cleanTitle = String(title || '').trim();
if (!cleanTitle) {
return Promise.reject(new Error(mw.msg('cradle-schema-title-required')));
}
let aliasesFormatted = '';
if (aliasesStr) {
aliasesFormatted = Array.isArray(aliasesStr)
? aliasesStr.map(a => String(a).trim()).filter(Boolean).join('|')
: String(aliasesStr).trim();
}
return mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function() {
return new mw.Api().getToken('csrf');
}).then(function(csrfToken) {
return fetch(mw.util.getUrl('Special:NewEntitySchema'), {
credentials: 'same-origin'
}).then(function(response) {
if (!response.ok) {
throw new Error(mw.msg('cradle-schema-load-form-failed') || 'Could not load Special:NewEntitySchema');
}
return response.text();
}).then(function(html) {
const doc = new DOMParser().parseFromString(html, 'text/html');
const submitButton = doc.querySelector('#entityschema-newschema-submit');
const form = submitButton ? submitButton.closest('form') : doc.querySelector('form');
if (!form) {
throw new Error(mw.msg('cradle-schema-form-not-found') || 'Special:NewEntitySchema form was not found. Check that your account can create pages.');
}
const actionUrl = new URL(form.getAttribute('action') || window.location.href, window.location.origin);
const formData = new URLSearchParams();
Array.prototype.forEach.call(form.querySelectorAll('input[type="hidden"]'), function(input) {
const name = input.getAttribute('name');
if (name) {
formData.set(name, input.value || '');
}
});
Array.prototype.forEach.call(Array.from(formData.keys()), function(name) {
if (TOKEN_FIELD_PATTERN.test(name)) {
formData.set(name, csrfToken);
}
});
if (!Array.from(formData.keys()).some(name => TOKEN_FIELD_PATTERN.test(name))) {
formData.set('wpEditToken', csrfToken);
}
formData.set('label', cleanTitle);
formData.set('description', String(desc || '').trim());
formData.set('aliases', aliasesFormatted);
formData.set('schema-text', String(shexText || ''));
formData.set('languagecode', userLang);
formData.set('submit', '1');
return fetch(actionUrl.href, {
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: formData.toString()
});
}).then(function(postResponse) {
return postResponse.text().then(function(postHtml) {
return {
url: postResponse.url,
html: postHtml
};
});
}).then(function(result) {
const responseDoc = new DOMParser().parseFromString(result.html, 'text/html');
let match = ENTITY_SCHEMA_ID_PATTERN.exec(decodeURIComponent(result.url || ''));
let schemaId = match ? match[1] : null;
if (!schemaId) {
const link = responseDoc.querySelector('a[href*="EntitySchema:E"], a[title^="EntitySchema:E"]');
if (link) {
match = ENTITY_SCHEMA_ID_PATTERN.exec(
decodeURIComponent(link.getAttribute('href') || link.getAttribute('title') || '')
);
if (match) {
schemaId = match[1];
}
}
}
if (!schemaId) {
const errorNodes = responseDoc.querySelectorAll(
'.permissions-errors, .error, .warning, .cdx-message--error, .oo-ui-messageWidget-error, .mw-htmlform-ooui .oo-ui-fieldLayout-messages'
);
const errorTexts = [];
Array.prototype.forEach.call(errorNodes, function(node) {
const t = node.textContent.trim().replace(/\s+/g, ' ');
if (t && errorTexts.indexOf(t) === -1) {
errorTexts.push(t);
}
});
const errDetail = errorTexts.join(' ');
throw new Error(errDetail || mw.msg('cradle-publish-shex-failed', 'Unknown error') || 'EntitySchema creation failed.');
}
return new mw.Api().get({
action: 'query',
titles: 'EntitySchema:' + schemaId,
prop: 'info',
formatversion: 2
}).then(function(verifyData) {
const pages = verifyData.query && verifyData.query.pages || [];
if (!pages[0] || pages[0].missing) {
throw new Error('Created EntitySchema could not be verified on Wikidata.');
}
return schemaId;
});
});
});
}
/**
* Updates an existing EntitySchema on Wikidata by submitting the action=edit form.
*/
function saveEntitySchemaToWikidata(schemaId, shexText, summary) {
let cleanId = (schemaId || '').trim().toUpperCase();
if (!cleanId.startsWith('E')) {
cleanId = 'E' + cleanId.replace(/\D/g, '');
}
let pageTitle = 'EntitySchema:' + cleanId;
let editUrl = mw.util.getUrl(pageTitle, { action: 'edit' });
let finalSummary = (summary && summary.trim()) ? summary.trim() : (mw.msg('cradle-default-edit-summary') || 'Update EntitySchema via Cradle');
return mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function() {
return new mw.Api().getToken('csrf');
}).then(function(csrfToken) {
return fetch(editUrl, {
credentials: 'same-origin'
}).then(function(response) {
if (!response.ok) {
throw new Error('Failed to load edit form for ' + pageTitle);
}
return response.text();
}).then(function(html) {
let doc = new DOMParser().parseFromString(html, 'text/html');
let form = doc.querySelector('form.mw-htmlform') || doc.querySelector('form[action*="action=edit"]');
if (!form) {
throw new Error('Edit form not found for ' + pageTitle);
}
let actionUrl = new URL(form.getAttribute('action') || editUrl, window.location.origin);
let formData = new URLSearchParams();
// Extract all hidden inputs (including wpbase-rev, title, etc.)
let hiddenInputs = form.querySelectorAll('input[type="hidden"]');
for (let i = 0; i < hiddenInputs.length; i++) {
let name = hiddenInputs[i].getAttribute('name');
if (name) {
formData.set(name, hiddenInputs[i].value || '');
}
}
// Ensure CSRF token is properly set
formData.set('wpEditToken', csrfToken);
// Set ShEx content and clean edit summary (NO CodeEditor)
formData.set('wpschema-text', String(shexText || ''));
formData.set('wpedit-summary', finalSummary);
formData.set('wpSave', 'Publish changes');
return fetch(actionUrl.href, {
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: formData.toString()
});
}).then(function(postResponse) {
return postResponse.text().then(function(postHtml) {
return {
url: postResponse.url,
html: postHtml
};
});
}).then(function(result) {
let responseDoc = new DOMParser().parseFromString(result.html, 'text/html');
let errorNodes = responseDoc.querySelectorAll(
'.permissions-errors, .error, .warning, .cdx-message--error, .oo-ui-messageWidget-error, .mw-htmlform-ooui .oo-ui-fieldLayout-messages'
);
let errorTexts = [];
for (let i = 0; i < errorNodes.length; i++) {
let txt = (errorNodes[i].textContent || '').trim();
if (txt && !txt.includes('Creative Commons') && !txt.includes('Terms of Use') && !txt.includes('By clicking')) {
errorTexts.push(txt);
}
}
if (errorTexts.length > 0) {
throw new Error(errorTexts.join(' | '));
}
return cleanId;
});
});
}
/**
* Links an EntitySchema to its target class/item via property P12861 (EntitySchema for this class).
*/
function linkEntitySchemaToItem(targetQID, schemaId) {
let cleanQID = (targetQID || '').trim().toUpperCase();
let cleanEID = (schemaId || '').trim().toUpperCase();
if (!cleanEID.startsWith('E')) {
cleanEID = 'E' + cleanEID.replace(/\D/g, '');
}
if (!/^Q\d+$/i.test(cleanQID) || !/^E\d+$/i.test(cleanEID)) {
return Promise.resolve({ skipped: true });
}
let api = new mw.Api();
return api.get({
action: 'wbgetclaims',
entity: cleanQID,
property: 'P12861',
format: 'json'
}).then(function(res) {
let existingClaims = (res && res.claims && res.claims.P12861) || [];
let alreadyExists = existingClaims.some(function(claim) {
let val = claim.mainsnak && claim.mainsnak.datavalue && claim.mainsnak.datavalue.value;
if (!val) return false;
let id = typeof val === 'string' ? val : val.id;
return id && id.toUpperCase() === cleanEID;
});
if (alreadyExists) {
return { skipped: true, reason: 'already-exists' };
}
let claimPayload = {
mainsnak: {
snaktype: 'value',
property: 'P12861',
datavalue: {
type: 'wikibase-entityid',
value: {
'entity-type': 'entity-schema',
'id': cleanEID
}
}
},
type: 'statement',
rank: 'normal'
};
return api.postWithEditToken({
action: 'wbeditentity',
id: cleanQID,
data: JSON.stringify({
claims: [claimPayload]
}),
summary: mw.msg('cradle-link-p12861-summary', cleanEID) || `Add EntitySchema ${cleanEID} (P12861) via Cradle`
}).then(function(editRes) {
return { success: true, targetQID: cleanQID, schemaId: cleanEID, editRes: editRes };
});
});
}
/**
* Displays a modal overlay to preview ShEx code, copy it, or publish on Wikidata directly.
*/
function openShExExportModal(title, propRows, labelsMap, targetItem, baseSchema, desc, aliases) {
let shexText = generateShExCode(title, propRows, labelsMap, targetItem, null, baseSchema);
let $overlay = $('<div>').addClass('cradle-modal-overlay').css({
'position': 'fixed',
'top': '0',
'left': '0',
'right': '0',
'bottom': '0',
'background': 'rgba(0,0,0,0.5)',
'z-index': '10000',
'display': 'flex',
'align-items': 'center',
'justify-content': 'center'
});
let $modal = $('<div>').css({
'background': '#fff',
'border-radius': '6px',
'padding': '20px',
'max-width': '550px',
'width': '90%',
'box-shadow': '0 4px 16px rgba(0,0,0,0.3)',
'display': 'flex',
'flex-direction': 'column',
'gap': '12px'
});
$modal.append($('<h3>').css({'margin':'0'}).text(mw.msg('cradle-shex-preview')));
let $statusBox = $('<div>').css({
'padding': '8px 12px',
'border-radius': '4px',
'font-size': '12px',
'font-weight': 'bold'
});
$modal.append($statusBox);
let $textarea = $('<textarea>')
.css({
'width': '100%',
'height': '200px',
'font-family': 'monospace',
'font-size': '12px',
'padding': '8px',
'border': '1px solid #a2a9b1',
'border-radius': '4px',
'box-sizing': 'border-box'
})
.val(shexText);
function copyAllShEx() {
$textarea.select();
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText($textarea.val()).then(function() {
mw.notify(mw.msg('cradle-shex-copied-auto'), { type: 'info' });
});
} else {
document.execCommand('copy');
mw.notify(mw.msg('cradle-shex-copied-auto'), { type: 'info' });
}
}
$textarea.on('click focus', function() {
copyAllShEx();
});
$modal.append($textarea);
let cleanTargetQID = (targetItem || '').trim().toUpperCase();
if (!cleanTargetQID) {
let tMatch = (shexText || '').match(/#\s*(?:targetItem|Associated Item.*?):\s*(Q\d+)/i);
if (tMatch) cleanTargetQID = tMatch[1].toUpperCase();
}
let cleanBase = (baseSchema || '').trim().toUpperCase();
let isDerivation = Boolean(cleanBase) ||
/#\s*(?:baseSchema|Base Schema|Derivation):/i.test(shexText) ||
/IMPORT\s+<[^>]*EntitySchemaText\//i.test(shexText);
let $linkP12861Container = $('<div>').css({'margin': '4px 0'});
let $linkCheckbox = null;
if (cleanTargetQID && /^Q\d+$/i.test(cleanTargetQID)) {
if (!isDerivation) {
$linkCheckbox = $('<input>').attr({
type: 'checkbox',
id: 'cradle-link-p12861-cb',
checked: true
});
let $linkLabel = $('<label>').css({
'font-size': '12px',
'display': 'inline-flex',
'align-items': 'center',
'gap': '6px',
'cursor': 'pointer',
'color': '#202122'
}).append($linkCheckbox).append($('<span>').text(mw.msg('cradle-link-p12861-checkbox', cleanTargetQID)));
$linkP12861Container.append($linkLabel);
} else {
$linkP12861Container.append(
$('<div>').css({'font-size': '11px', 'color': '#54595d', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.html(`<span style="display:inline-flex; width:14px; height:14px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span> <span>${mw.msg('cradle-link-p12861-derivation-skip')}</span>`)
);
}
}
$modal.append($linkP12861Container);
let $btnRow = $('<div>').css({'display': 'flex', 'gap': '8px', 'justify-content': 'flex-end', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $manualLink = $('<a>').attr({
href: mw.util.getUrl('Special:NewEntitySchema'),
target: '_blank'
}).css({
'display': 'inline-flex',
'align-items': 'center',
'gap': '4px',
'font-size': '11px',
'color': '#72777d',
'text-decoration': 'none',
'margin-right': 'auto'
}).html(ICONS.external + ` <span>${mw.msg('cradle-open-newentityschema')}</span>`);
let $copyBtn = $('<button>').addClass('cdx-button')
.text(mw.msg('cradle-copy-shex'))
.on('click', function() {
copyAllShEx();
});
let $publishBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px'})
.html(ICONS.check + ` <span>${mw.msg('cradle-create-entityschema-btn')}</span>`)
.on('click', function() {
let currentShex = $textarea.val();
let validation = validateShExSyntax(currentShex);
if (!validation.valid) {
let proceed = confirm(mw.msg('cradle-shex-invalid') + '\n' + validation.errors.join('\n') + '\n\n' + mw.msg('cradle-confirm-proceed'));
if (!proceed) return;
}
$publishBtn.prop('disabled', true);
$copyBtn.prop('disabled', true);
$statusBox.css({
'background': 'rgba(0, 175, 137, 0.08)',
'border': '1px solid var(--color-progressive, #36c)',
'color': 'var(--color-progressive, #36c)'
}).text(mw.msg('cradle-publishing-shex'));
publishEntitySchemaToWikidata(title, desc, aliases, currentShex)
.then(function(schemaId) {
mw.notify(mw.msg('cradle-publish-shex-success', schemaId), { type: 'success' });
$statusBox.css({
'background': '#e6f9f0',
'border': '1px solid #00af89',
'color': '#00805d'
}).html(`<strong>${mw.msg('cradle-publish-shex-success', `EntitySchema:${schemaId}`)}</strong>: ` +
`<a href="${mw.util.getUrl('EntitySchema:' + schemaId)}" target="_blank" style="color:#00805d; text-decoration:underline;">` +
`${mw.msg('cradle-open-created-schema', schemaId)}</a>`);
$publishBtn.remove();
$copyBtn.prop('disabled', false);
let $viewBtn = $('<a>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.attr({
href: mw.util.getUrl('EntitySchema:' + schemaId),
target: '_blank'
})
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'text-decoration': 'none'})
.html(ICONS.external + ` <span>${mw.msg('cradle-open-created-schema', schemaId)}</span>`);
$btnRow.append($viewBtn);
// Check if we should link P12861 to the target item
let currentDerivation = isDerivation ||
/#\s*(?:baseSchema|Base Schema|Derivation):/i.test(currentShex) ||
/IMPORT\s+<[^>]*EntitySchemaText\//i.test(currentShex);
let shouldLink = !currentDerivation && cleanTargetQID && /^Q\d+$/i.test(cleanTargetQID) &&
(!$linkCheckbox || $linkCheckbox.is(':checked'));
if (shouldLink) {
linkEntitySchemaToItem(cleanTargetQID, schemaId).then(function(linkRes) {
if (linkRes && linkRes.success) {
mw.notify(mw.msg('cradle-schema-linked-p12861-success', schemaId, cleanTargetQID), { type: 'success' });
$statusBox.append(
$('<div>').css({'margin-top': '6px', 'font-size': '12px', 'color': '#00805d', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.html(`<span style="display:inline-flex; width:14px; height:14px; flex-shrink:0; fill:currentColor;">${ICONS.check}</span> <span>${mw.msg('cradle-schema-linked-p12861-notice', cleanTargetQID, schemaId)} (<a href="${mw.util.getUrl(cleanTargetQID)}" target="_blank" style="color:#00805d; text-decoration:underline;">${cleanTargetQID}</a>).</span>`)
);
}
}).catch(function(linkErr) {
logError('[Cradle] Error linking P12861 to ' + cleanTargetQID, linkErr);
let msg = (linkErr && linkErr.error && linkErr.error.info) || (linkErr && linkErr.message) || linkErr;
mw.notify(mw.msg('cradle-schema-linked-p12861-failed', cleanTargetQID, String(msg)), { type: 'warn' });
});
}
})
.catch(function(err) {
$publishBtn.prop('disabled', false);
$copyBtn.prop('disabled', false);
let errMessage = (err && err.message) ? err.message : String(err);
$statusBox.css({
'background': '#fef2f2',
'border': '1px solid #d33',
'color': '#d33'
}).text(mw.msg('cradle-publish-shex-failed', errMessage));
mw.notify(mw.msg('cradle-publish-shex-failed', errMessage), { type: 'error' });
});
});
function updateValidationUI() {
let res = validateShExSyntax($textarea.val());
if (res.valid) {
$statusBox.css({
'background': '#e6f9f0',
'border': '1px solid #00af89',
'color': '#00805d'
}).html(mw.msg('cradle-shex-valid'));
} else {
let $errHtml = $('<div>').append($('<div>').text(mw.msg('cradle-shex-invalid')));
let $ul = $('<ul>').css({'margin': '4px 0 0 16px', 'padding': '0', 'font-weight': 'normal'});
res.errors.forEach(e => $ul.append($('<li>').text(e)));
$errHtml.append($ul);
$statusBox.css({
'background': '#fef2f2',
'border': '1px solid #d33',
'color': '#d33'
}).html($errHtml);
}
}
$textarea.on('input', updateValidationUI);
updateValidationUI();
let $closeBtn = $('<button>').addClass('cdx-button cdx-button--weight-quiet')
.text(mw.msg('cradle-cancel'))
.on('click', function() { $overlay.remove(); });
$btnRow.append($manualLink).append($copyBtn).append($publishBtn).append($closeBtn);
$modal.append($btnRow);
$overlay.append($modal);
$('body').append($overlay);
// Auto-select and copy ShEx code immediately when modal opens
setTimeout(function() {
copyAllShEx();
}, 150);
}
/**
* Displays a modal to import properties from an existing Wikidata Item (QID) and detect its P31 class.
*/
function openPropertyImporterModal(fetchLabelsInBatches, onImportCallback) {
let $overlay = $('<div>').addClass('cradle-modal-overlay').css({
'position': 'fixed', 'top': '0', 'left': '0', 'right': '0', 'bottom': '0',
'background': 'rgba(0,0,0,0.5)', 'z-index': '10000',
'display': 'flex', 'align-items': 'center', 'justify-content': 'center'
});
let $modal = $('<div>').css({
'background': '#fff', 'border-radius': '6px', 'padding': '20px',
'max-width': '520px', 'width': '90%',
'box-shadow': '0 4px 16px rgba(0,0,0,0.3)',
'display': 'flex', 'flex-direction': 'column', 'gap': '12px'
});
let $headRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center'});
$headRow.append($('<h3>').css({'margin': '0', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px'}).html(ICONS.download + ` <span>${mw.msg('cradle-import-from-item')}</span>`));
let $closeBtn = $('<button>').addClass('cradle-btn-secondary').html(ICONS.close).on('click', function() { $overlay.remove(); });
$headRow.append($closeBtn);
$modal.append($headRow);
let $inputGroup = $('<div>').css({'display': 'flex', 'gap': '8px'});
let $input = $('<input>').addClass('cradle-input').attr('placeholder', 'QID (e.g. Q164027, Q483110)').css({'flex': '1'});
let $searchBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive').text(mw.msg('cradle-load-item-btn'));
$inputGroup.append($input).append($searchBtn);
$modal.append($inputGroup);
let $resultArea = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '10px', 'min-height': '60px'});
$modal.append($resultArea);
let fetchedPropPIDs = [];
let p31Candidates = [];
let selectedP31QID = '';
$searchBtn.on('click', function() {
let qid = $input.val().trim().toUpperCase();
if (!qid || !/^Q\d+$/i.test(qid)) {
mw.notify(mw.msg('cradle-val-err-qid', qid), { type: 'error' });
return;
}
$searchBtn.prop('disabled', true).text(mw.msg('cradle-loading-item'));
$resultArea.empty().append($('<div>').css({'color': '#54595d', 'font-size': '13px'}).text(mw.msg('cradle-fetching-wikidata-recoin')));
let api = new mw.Api();
api.get({
action: 'wbgetentities',
ids: qid,
props: 'claims|labels',
languages: mw.config.get('wgUserLanguage') || 'en',
format: 'json'
}).done(function(res) {
$searchBtn.prop('disabled', false).text(mw.msg('cradle-load-item-btn'));
if (!res || !res.entities || !res.entities[qid] || !res.entities[qid].claims) {
$resultArea.html('<div style="color:#d33; font-size:13px;">No claims found in ' + qid + '</div>');
return;
}
let claims = res.entities[qid].claims;
fetchedPropPIDs = sortPropertyIDs(Object.keys(claims));
let p31QIDs = [];
if (claims.P31) {
claims.P31.forEach(c => {
if (c.mainsnak && c.mainsnak.datavalue && c.mainsnak.datavalue.value && c.mainsnak.datavalue.value.id) {
p31QIDs.push(c.mainsnak.datavalue.value.id);
}
});
}
let p106QIDs = [];
if (claims.P106) {
claims.P106.forEach(c => {
if (c.mainsnak && c.mainsnak.datavalue && c.mainsnak.datavalue.value && c.mainsnak.datavalue.value.id) {
p106QIDs.push(c.mainsnak.datavalue.value.id);
}
});
}
let isHumanItem = p31QIDs.includes('Q5');
let targetClassQID = p31QIDs.length > 0 ? p31QIDs[0] : qid;
fetchRecoinData(targetClassQID, function(recoinData) {
let recoinFreqMap = {};
let recoinNumericFreq = {};
if (recoinData && recoinData.Frequenct_properties) {
recoinData.Frequenct_properties.forEach(m => {
let pid = m['Property ID'] || m.property;
let rawFreq = m.Frequency || m.frequency;
if (pid && rawFreq !== undefined) {
let num = parseFloat(rawFreq);
recoinFreqMap[pid] = num.toFixed(1) + '%';
recoinNumericFreq[pid] = num;
}
});
}
let allQIDsToFetch = [...new Set([...fetchedPropPIDs, ...p31QIDs, ...p106QIDs])];
fetchLabelsInBatches(allQIDsToFetch, function(labelsMap, datatypesMap) {
// Exclude external identifier properties (datatype: external-id)
fetchedPropPIDs = fetchedPropPIDs.filter(pid => datatypesMap[pid] !== 'external-id');
$resultArea.empty();
let ent = res.entities[qid];
let userLang = mw.config.get('wgUserLanguage') || 'en';
let itemLabel = (ent.labels && (ent.labels[userLang]?.value || ent.labels['en']?.value)) || labelsMap[qid] || qid;
p31Candidates = p31QIDs.map(id => ({ qid: id, label: labelsMap[id] || id }));
let p106Candidates = p106QIDs.map(id => ({ qid: id, label: labelsMap[id] || id }));
let $info = $('<div>').css({
'background': '#eaf3ff', 'border': '1px solid #36c',
'padding': '8px 12px', 'border-radius': '4px', 'font-size': '13px'
}).html(`<strong>${itemLabel} (${qid})</strong>: ${fetchedPropPIDs.length} properties found.`);
$resultArea.append($info);
// Fetch claims.P12861 (EntitySchema ID) for both p31QIDs and p106QIDs
let schemasMap = {};
let entitiesToCheckSchemas = [...new Set([...p31QIDs, ...p106QIDs])];
let metaFetchDone = function() {
let targetMode = (p106Candidates.length > 0 && isHumanItem) ? 'p106' : 'p31';
let selectedP106QID = p106Candidates.length > 0 ? p106Candidates[0].qid : null;
selectedP31QID = p31Candidates.length > 0 ? p31Candidates[0].qid : qid;
let $duplicateNoticeBox = $('<div>').css({'margin-top': '6px'});
let $importConfirmBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({'display': 'inline-flex', 'align-items': 'center', 'justify-content': 'center', 'gap': '6px', 'flex': '1', 'min-height': '38px', 'box-sizing': 'border-box'})
.html(ICONS.check + ` <span>${mw.msg('cradle-import-from-item')}</span>`);
let $editExistingSchemaBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive')
.css({'display': 'none', 'align-items': 'center', 'justify-content': 'center', 'gap': '6px', 'flex': '1', 'min-height': '38px', 'box-sizing': 'border-box'});
function updateActiveSchemaCheck() {
if (targetMode === 'p106' && selectedP106QID) {
let occSchemaId = schemasMap[selectedP106QID];
let occLabel = labelsMap[selectedP106QID] || selectedP106QID;
if (occSchemaId) {
$duplicateNoticeBox.html(`
<div style="background:#fef2f2; border:1px solid #d33; color:#b32424; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.alert}</span>
<span>${mw.msg('cradle-importer-p106-schema-exists', occSchemaId)} (<strong><a href="/wiki/EntitySchema:${occSchemaId}" target="_blank" style="color:#b32424; text-decoration:underline;">EntitySchema ${occSchemaId}</a></strong>).</span>
</div>
`).show();
$editExistingSchemaBtn.html(ICONS.external + ` <span>Ver EntitySchema ${occSchemaId}</span>`).off('click').on('click', function() {
window.open('/wiki/EntitySchema:' + occSchemaId, '_blank');
}).css('display', 'inline-flex');
$btnRow.css({'justify-content': 'space-between'});
$importConfirmBtn.css({'flex': '1'});
} else {
$duplicateNoticeBox.html(`
<div style="background:#eaf3ff; border:1px solid #36c; color:#102a43; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span>
<span>${mw.msg('cradle-importer-p106-no-schema')} ${isHumanItem ? mw.msg('cradle-base-schema-notice', 'E10') : ''}</span>
</div>
`).show();
$editExistingSchemaBtn.hide();
$btnRow.css({'justify-content': 'center'});
$importConfirmBtn.css({'flex': '0 1 auto'});
}
} else {
let p31SchemaId = schemasMap[selectedP31QID];
if (p31SchemaId) {
$duplicateNoticeBox.html(`
<div style="background:#eaf3ff; border:1px solid #36c; color:#102a43; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span>
<span>${mw.msg('cradle-base-schema-notice', p31SchemaId)} (<strong><a href="/wiki/EntitySchema:${p31SchemaId}" target="_blank" style="color:#36c; text-decoration:underline;">EntitySchema ${p31SchemaId}</a></strong>).</span>
</div>
`).show();
$editExistingSchemaBtn.html(ICONS.external + ` <span>Ver EntitySchema ${p31SchemaId}</span>`).off('click').on('click', function() {
window.open('/wiki/EntitySchema:' + p31SchemaId, '_blank');
}).css('display', 'inline-flex');
$btnRow.css({'justify-content': 'space-between'});
$importConfirmBtn.css({'flex': '1'});
} else {
$duplicateNoticeBox.empty().hide();
$editExistingSchemaBtn.hide();
$btnRow.css({'justify-content': 'center'});
$importConfirmBtn.css({'flex': '0 1 auto'});
}
}
}
// Render Target Mode Selector when P106 is present
let $p106Box = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px'});
let $p31Box = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px'});
if (p106Candidates.length > 0) {
let $modeContainer = $('<div>').css({
'display': 'flex', 'flex-direction': 'column', 'gap': '6px',
'background': '#f8f9fa', 'border': '1px solid #c8ccd1',
'padding': '10px', 'border-radius': '4px'
});
$modeContainer.append($('<div>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-importer-target-mode-label')));
let $modeRow = $('<div>').css({'display': 'flex', 'gap': '16px', 'margin-bottom': '4px'});
let $radP106 = $('<input>').attr({ type: 'radio', name: 'target-choice', id: 'target-mode-p106', checked: (targetMode === 'p106') })
.on('change', function() {
targetMode = 'p106';
$p106Box.show();
$p31Box.hide();
updateActiveSchemaCheck();
});
let $radP31 = $('<input>').attr({ type: 'radio', name: 'target-choice', id: 'target-mode-p31', checked: (targetMode === 'p31') })
.on('change', function() {
targetMode = 'p31';
$p106Box.hide();
$p31Box.show();
updateActiveSchemaCheck();
});
$modeRow.append($('<label>').css({'cursor': 'pointer', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-size': '13px'}).append($radP106).append($('<span>').text(mw.msg('cradle-importer-target-p106'))));
$modeRow.append($('<label>').css({'cursor': 'pointer', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-size': '13px'}).append($radP31).append($('<span>').text(mw.msg('cradle-importer-target-p31'))));
$modeContainer.append($modeRow);
$resultArea.append($modeContainer);
// Setup P106 candidate selection
$p106Box.append($('<div>').css({'font-weight': 'bold', 'font-size': '13px', 'margin-top': '4px'}).text(mw.msg('cradle-importer-select-occupation')));
p106Candidates.forEach((cand, idx) => {
let occSchemaId = schemasMap[cand.qid];
let radId = `p106-cand-${cand.qid}-${idx}`;
let $rad = $('<input>').attr({
type: 'radio', name: 'p106-candidate', id: radId, value: cand.qid, checked: idx === 0
}).on('change', function() {
selectedP106QID = cand.qid;
updateActiveSchemaCheck();
});
let badgeHtml = occSchemaId
? `<span style="background:#fef2f2; color:#b32424; border:1px solid #d33; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; display:inline-flex; align-items:center; gap:4px;"><span style="display:inline-flex; width:14px; height:14px; fill:currentColor;">${ICONS.alert}</span> <strong>${occSchemaId}</strong></span>`
: `<span style="background:#e6f9f0; color:#00805d; border:1px solid #00af89; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; display:inline-flex; align-items:center; gap:4px;"><span style="display:inline-flex; width:14px; height:14px; fill:currentColor;">${ICONS.check}</span> ${mw.msg('cradle-importer-p106-available-badge')}</span>`;
let $lbl = $('<label>').attr('for', radId).css({'font-size': '13px', 'display': 'flex', 'align-items': 'center', 'gap': '6px', 'cursor': 'pointer'})
.append($rad).append($('<span>').html(`<strong>${cand.label}</strong> (${cand.qid}) ${badgeHtml}`));
$p106Box.append($lbl);
});
$resultArea.append($p106Box);
}
// Setup P31 candidate selection
if (p31Candidates.length === 1) {
selectedP31QID = p31Candidates[0].qid;
let schemaId = schemasMap[selectedP31QID];
let badgeHtml = schemaId
? `<span style="background:#eaf3ff; color:#36c; border:1px solid #36c; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; display:inline-flex; align-items:center; gap:4px;"><span style="display:inline-flex; width:14px; height:14px; fill:currentColor;">${ICONS.info}</span> Base: <strong>${schemaId}</strong></span>`
: '';
$p31Box.append($('<div>').css({'font-size': '13px', 'color': '#202122'})
.html(`Class (P31): <strong>${p31Candidates[0].label} (${selectedP31QID})</strong> ${badgeHtml}`));
} else if (p31Candidates.length > 1) {
$p31Box.append($('<div>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-select-p31-class')));
p31Candidates.forEach((cand, idx) => {
let schemaId = schemasMap[cand.qid];
let radId = `p31-cand-${cand.qid}-${idx}`;
let $rad = $('<input>').attr({
type: 'radio', name: 'p31-candidate', id: radId, value: cand.qid, checked: idx === 0
}).on('change', function() {
selectedP31QID = cand.qid;
updateActiveSchemaCheck();
});
let badgeHtml = schemaId
? `<span style="background:#eaf3ff; color:#36c; border:1px solid #36c; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; display:inline-flex; align-items:center; gap:4px;"><span style="display:inline-flex; width:14px; height:14px; fill:currentColor;">${ICONS.info}</span> Base: <strong>${schemaId}</strong></span>`
: '';
let $lbl = $('<label>').attr('for', radId).css({'font-size': '13px', 'display': 'flex', 'align-items': 'center', 'gap': '6px', 'cursor': 'pointer'})
.append($rad).append($('<span>').html(`${cand.label} (${cand.qid}) ${badgeHtml}`));
$p31Box.append($lbl);
});
}
$resultArea.append($p31Box);
if (targetMode === 'p106') {
$p106Box.show();
$p31Box.hide();
} else {
$p106Box.hide();
$p31Box.show();
}
// Checkboxes and sorting controls for properties
let $propSelectorHeader = $('<div>').css({
'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center',
'flex-wrap': 'wrap', 'gap': '8px', 'margin-top': '4px'
});
let $propSelectorTitle = $('<div>').css({'font-weight': 'bold', 'font-size': '13px'}).text(mw.msg('cradle-select-props-to-import'));
$propSelectorHeader.append($propSelectorTitle);
let $sortContainer = $('<div>').css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px'});
let $sortLabel = $('<span>').css({'color': '#54595d'}).text(mw.msg('cradle-importer-sort-label'));
let $sortSelect = $('<select>').addClass('cdx-select').css({
'height': '26px', 'font-size': '11px', 'padding': '0 6px',
'border-radius': '2px', 'border': '1px solid #a2a9b1', 'background': '#fff', 'cursor': 'pointer'
});
$sortSelect.append($('<option>').val('recoin').text(mw.msg('cradle-importer-sort-recoin')));
$sortSelect.append($('<option>').val('pid').text(mw.msg('cradle-importer-sort-pid')));
$sortSelect.append($('<option>').val('alpha').text(mw.msg('cradle-importer-sort-alphabetical')));
let hasRecoinData = Object.keys(recoinNumericFreq).length > 0;
$sortSelect.val(hasRecoinData ? 'recoin' : 'pid');
$sortContainer.append($sortLabel).append($sortSelect);
$propSelectorHeader.append($sortContainer);
$resultArea.append($propSelectorHeader);
let $propListContainer = $('<div>').css({
'display': 'flex', 'flex-direction': 'column', 'gap': '4px',
'max-height': '160px', 'overflow-y': 'auto', 'border': '1px solid #c8ccd1',
'padding': '8px', 'border-radius': '4px', 'background': '#fff'
});
let $selectAllCheckbox = $('<input>').attr({ type: 'checkbox', id: 'cradle-select-all-props', checked: true });
let $selectAllRow = $('<div>').css({'font-weight': 'bold', 'margin-bottom': '4px', 'padding-bottom': '4px', 'border-bottom': '1px solid #eaecf0'})
.append($('<label>').css({'cursor': 'pointer', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px'}).append($selectAllCheckbox).append($('<span>').text(mw.msg('cradle-select-all'))));
$propListContainer.append($selectAllRow);
let propCBs = {};
let propElements = {};
let orderedPropPIDs = fetchedPropPIDs.slice();
fetchedPropPIDs.forEach(pid => {
let propLbl = labelsMap[pid] ? `${labelsMap[pid]} (${pid})` : pid;
let freqBadge = recoinFreqMap[pid]
? `<span style="background:#eaf3ff; color:#36c; border:1px solid #36c; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; font-weight:bold;">${recoinFreqMap[pid]}</span>`
: '';
let $cb = $('<input>').attr({ type: 'checkbox', id: `cb-import-${pid}`, checked: true });
propCBs[pid] = $cb;
let $itemLabel = $('<label>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px', 'cursor': 'pointer'})
.append($cb).append($('<span>').html(`${propLbl} ${freqBadge}`));
propElements[pid] = $itemLabel;
});
function sortAndRenderProperties(sortMode) {
if (sortMode === 'recoin') {
orderedPropPIDs.sort((a, b) => {
let freqA = recoinNumericFreq[a] !== undefined ? recoinNumericFreq[a] : -1;
let freqB = recoinNumericFreq[b] !== undefined ? recoinNumericFreq[b] : -1;
if (freqB !== freqA) return freqB - freqA;
return (parseInt(a.replace(/\D/g, ''), 10) || 0) - (parseInt(b.replace(/\D/g, ''), 10) || 0);
});
} else if (sortMode === 'alpha') {
orderedPropPIDs.sort((a, b) => {
let nameA = (labelsMap[a] || a).toLowerCase();
let nameB = (labelsMap[b] || b).toLowerCase();
return nameA.localeCompare(nameB);
});
} else { // 'pid'
orderedPropPIDs = sortPropertyIDs(orderedPropPIDs);
}
orderedPropPIDs.forEach(pid => {
if (propElements[pid]) {
$propListContainer.append(propElements[pid]);
}
});
}
sortAndRenderProperties($sortSelect.val());
$sortSelect.on('change', function() {
sortAndRenderProperties($(this).val());
});
$selectAllCheckbox.on('change', function() {
let isChecked = $(this).is(':checked');
orderedPropPIDs.forEach(pid => {
if (propCBs[pid]) propCBs[pid].prop('checked', isChecked);
});
});
$resultArea.append($propListContainer);
if (recoinData && recoinData.Frequenct_properties) {
let $recoinCreditFooter = $('<div>').css({'font-size': '11px', 'color': '#54595d', 'margin-top': '8px', 'margin-bottom': '4px', 'text-align': 'center', 'font-style': 'italic'})
.html('Recoin frequency API: <a href="https://www.wikidata.org/wiki/Wikidata:Recoin" target="_blank" style="color:#36c; font-weight:bold; text-decoration:underline;">Recoin</a>');
$resultArea.append($recoinCreditFooter);
}
$resultArea.append($duplicateNoticeBox);
$importConfirmBtn.on('click', function() {
let selectedPIDs = orderedPropPIDs.filter(pid => propCBs[pid] && propCBs[pid].is(':checked'));
if (selectedPIDs.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'warn' });
return;
}
$overlay.remove();
if (onImportCallback) {
let finalTargetQID = (targetMode === 'p106' && selectedP106QID) ? selectedP106QID : selectedP31QID;
let finalBaseSchema = (targetMode === 'p106') ? (isHumanItem ? (schemasMap['Q5'] || 'E10') : '') : (schemasMap[selectedP31QID] || '');
let occupationPreset = (targetMode === 'p106' && selectedP106QID) ? {
pid: 'P106',
qid: selectedP106QID,
label: labelsMap[selectedP106QID] || selectedP106QID
} : null;
onImportCallback(finalTargetQID, selectedPIDs, labelsMap, recoinFreqMap, finalBaseSchema, occupationPreset);
}
});
let $btnRow = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'stretch', 'width': '100%', 'margin-top': '10px'})
.append($importConfirmBtn)
.append($editExistingSchemaBtn);
$resultArea.append($btnRow);
// Trigger initial check
updateActiveSchemaCheck();
};
if (entitiesToCheckSchemas.length > 0) {
let userLang = mw.config.get('wgUserLanguage') || 'en';
let langsToFetch = userLang === 'en' ? 'en' : `${userLang}|en`;
api.get({
action: 'wbgetentities',
ids: entitiesToCheckSchemas.join('|'),
props: 'claims',
languages: langsToFetch,
format: 'json'
}).done(function(checkRes) {
if (checkRes && checkRes.entities) {
entitiesToCheckSchemas.forEach(eId => {
if (checkRes.entities[eId] && checkRes.entities[eId].claims) {
let cMap = checkRes.entities[eId].claims;
if (cMap.P12861 && cMap.P12861.length > 0) {
let sId = parseEntitySchemaID(cMap.P12861[0].mainsnak?.datavalue);
if (sId) schemasMap[eId] = sId;
}
}
});
}
metaFetchDone();
}).fail(function() {
metaFetchDone();
});
} else {
metaFetchDone();
}
});
});
}).fail(function() {
$searchBtn.prop('disabled', false).text(mw.msg('cradle-load-item-btn'));
$resultArea.html('<div style="color:#d33; font-size:13px;">Error connecting to Wikidata</div>');
});
});
$overlay.append($modal);
$('body').append($overlay);
}
/**
* Render the Cradle Schema Designer UI.
*/
function renderSchemaDesigner(editSchemaName, editSchemaData) {
updateNavigationTabs('design');
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
let isEdit = !!editSchemaName;
let titleVal = isEdit ? editSchemaName : '';
let $form = $('<div>').addClass('cradle-selector-box').css({'display': 'flex', 'flex-direction': 'column', 'gap': '12px'});
let $titleInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-schema-title')).val(titleVal);
if (isEdit) {
$titleInput.attr('disabled', 'disabled');
}
let $descInput = $('<input>').addClass('cradle-input').attr({
'id': 'cradle-schema-desc-input',
'placeholder': mw.msg('cradle-schema-desc-placeholder') || 'Descripción del esquema...'
});
let $aliasesInput = $('<input>').addClass('cradle-input').attr({
'id': 'cradle-schema-aliases-input',
'placeholder': mw.msg('cradle-schema-aliases-placeholder') || 'Alias del esquema (separados por plecas |)...'
});
let $targetItemInput = $('<input>').addClass('cradle-input').attr({
'id': 'cradle-schema-target-item-input',
'placeholder': 'Ej: Q483110 (Estadio) o Q5 (Humano)'
});
let $targetNoticeDiv = $('<div>').css({'margin-top': '4px'});
function checkTargetItemDuplicateSchema(qid) {
$targetNoticeDiv.empty();
let cleanQID = (qid || '').trim().toUpperCase();
if (!cleanQID || !/^Q\d+$/i.test(cleanQID)) return;
let schemaNames = Object.keys(customSchemas || {});
let foundCustom = null;
schemaNames.forEach(sName => {
let sData = customSchemas[sName];
if (sData && sData.targetItem && sData.targetItem.toUpperCase() === cleanQID) {
foundCustom = sName;
}
});
if (foundCustom) {
$targetNoticeDiv.html(`
<div style="background:#fff3cd; border:1px solid #ffe8a1; color:#856404; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.alert}</span> <span>${mw.msg('cradle-schema-exists-custom', cleanQID, foundCustom)}</span>
</div>
`);
return;
}
let api = new mw.Api();
let userLang = mw.config.get('wgUserLanguage') || 'en';
let langs = userLang === 'en' ? 'en' : `${userLang}|en`;
// Query entity to check claims.P12861 (EntitySchema ID)
api.get({
action: 'wbgetentities',
ids: cleanQID,
props: 'claims|labels',
languages: langs,
format: 'json'
}).done(function(res) {
if (res && res.entities && res.entities[cleanQID]) {
let ent = res.entities[cleanQID];
let claims = ent.claims || {};
let existingSchemaId = null;
if (claims.P12861 && claims.P12861.length > 0) {
existingSchemaId = parseEntitySchemaID(claims.P12861[0].mainsnak?.datavalue);
}
if (existingSchemaId) {
let itemLabel = (ent.labels && (ent.labels[userLang]?.value || ent.labels['en']?.value)) || cleanQID;
let currentBase = ($('#cradle-schema-base-schema-input').val() || '').trim().toUpperCase();
let cleanExisting = existingSchemaId.toUpperCase();
let isDerivation = (currentBase === cleanExisting || currentBase === ('E' + cleanExisting.replace(/\D/g, '')));
if (isDerivation) {
$targetNoticeDiv.html(`
<div style="background:#eaf3ff; border:1px solid #36c; color:#102a43; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span>
<span>${mw.msg('cradle-base-schema-notice', existingSchemaId)} (<strong><a href="/wiki/EntitySchema:${existingSchemaId}" target="_blank" style="color:#36c; text-decoration:underline;">EntitySchema ${existingSchemaId}</a></strong>).</span>
</div>
`);
} else {
let $dupBox = $('<div>').css({
'background': '#fcf2f2', 'border': '1px solid #d33', 'color': '#b32424',
'padding': '8px 12px', 'border-radius': '4px', 'font-size': '12px',
'display': 'flex', 'align-items': 'center', 'justify-content': 'space-between', 'gap': '8px', 'flex-wrap': 'wrap'
});
let $dupText = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'flex': '1'})
.html(`<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.alert}</span> <span>${mw.msg('cradle-schema-exists-p12861', itemLabel, cleanQID, `<a href="/wiki/EntitySchema:${existingSchemaId}" target="_blank" style="color:#b32424; text-decoration:underline;">EntitySchema ${existingSchemaId}</a>`)}</span>`);
let $useAsBaseBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-quiet').css({'font-size': '11px', 'height': '26px'})
.text(mw.msg('cradle-set-as-base-schema-btn', existingSchemaId))
.on('click', function(e) {
e.preventDefault();
$baseSchemaInput.val(existingSchemaId);
checkTargetItemDuplicateSchema(cleanQID);
});
$dupBox.append($dupText).append($useAsBaseBtn);
$targetNoticeDiv.empty().append($dupBox);
}
return;
}
}
// Fallback: Search Wikidata EntitySchemas via MediaWiki API
api.get({
action: 'wbsearchentities',
search: cleanQID,
type: 'entityschema',
language: userLang,
format: 'json'
}).done(function(resSearch) {
let items = resSearch.search || [];
if (items.length > 0) {
let match = items[0];
let currentBase = ($('#cradle-schema-base-schema-input').val() || '').trim().toUpperCase();
let cleanExisting = match.id.toUpperCase();
let isDerivation = (currentBase === cleanExisting || currentBase === ('E' + cleanExisting.replace(/\D/g, '')));
if (isDerivation) {
$targetNoticeDiv.html(`
<div style="background:#eaf3ff; border:1px solid #36c; color:#102a43; padding:8px 12px; border-radius:4px; font-size:12px; display:flex; align-items:center; gap:6px;">
<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.info}</span>
<span>${mw.msg('cradle-base-schema-notice', match.id)} (<strong><a href="/wiki/EntitySchema:${match.id}" target="_blank" style="color:#36c; text-decoration:underline;">EntitySchema ${match.id}</a></strong>).</span>
</div>
`);
} else {
let $dupBox = $('<div>').css({
'background': '#fff3cd', 'border': '1px solid #ffe8a1', 'color': '#856404',
'padding': '8px 12px', 'border-radius': '4px', 'font-size': '12px',
'display': 'flex', 'align-items': 'center', 'justify-content': 'space-between', 'gap': '8px', 'flex-wrap': 'wrap'
});
let $dupText = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'flex': '1'})
.html(`<span style="display:inline-flex; width:16px; height:16px; flex-shrink:0; fill:currentColor;">${ICONS.alert}</span> <span>${mw.msg('cradle-schema-exists-matched', cleanQID, `<a href="/wiki/EntitySchema:${match.id}" target="_blank"><strong>${match.id}</strong></a>`, match.label || '')}</span>`);
let $useAsBaseBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-quiet').css({'font-size': '11px', 'height': '26px'})
.text(mw.msg('cradle-set-as-base-schema-btn', match.id))
.on('click', function(e) {
e.preventDefault();
$baseSchemaInput.val(match.id);
checkTargetItemDuplicateSchema(cleanQID);
});
$dupBox.append($dupText).append($useAsBaseBtn);
$targetNoticeDiv.empty().append($dupBox);
}
}
});
});
}
$targetItemInput.on('change input', function() {
checkTargetItemDuplicateSchema($(this).val());
});
// Header Title Row with Importer button on top right
let $headerTitleRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '4px'});
$headerTitleRow.append($('<h3>').css({'margin': '0'}).text(mw.msg('cradle-schema-designer')));
let $baseSchemaInput = $('<input>').addClass('cradle-input').attr({
type: 'text',
id: 'cradle-schema-base-schema-input',
placeholder: mw.msg('cradle-base-schema-placeholder')
}).on('input change', function() {
checkTargetItemDuplicateSchema($targetItemInput.val());
});
let $openImporterBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-quiet')
.css({'height': '32px', 'display': 'inline-flex', 'align-items': 'center', 'gap': '6px'})
.html(ICONS.download + ` <span>${mw.msg('cradle-import-from-item')}</span>`)
.on('click', function(e) {
e.preventDefault();
openPropertyImporterModal(fetchLabelsInBatches, function(importedTargetQID, importedPIDs, modalLabelsMap, recoinFreqMap, importedBaseSchema, occupationPreset) {
if (importedBaseSchema) {
$baseSchemaInput.val(importedBaseSchema);
}
if (importedTargetQID) {
$targetItemInput.val(importedTargetQID);
checkTargetItemDuplicateSchema(importedTargetQID);
}
if (occupationPreset && occupationPreset.label && !$titleInput.val().trim()) {
$titleInput.val(occupationPreset.label);
}
// Clear previous property rows so new import starts fresh
$propsList.empty();
let newPIDs = (importedPIDs || []).slice();
if (occupationPreset && !newPIDs.includes('P106')) {
newPIDs.unshift('P106');
}
if (newPIDs.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'info' });
return;
}
fetchLabelsInBatches(newPIDs, function(freshLabelsMap) {
let mergedMap = Object.assign({}, modalLabelsMap || {}, freshLabelsMap || {});
newPIDs.forEach(pid => {
try {
if (occupationPreset && pid === 'P106') {
renderPropRow(pid, true, '', [occupationPreset.qid], null, mergedMap, recoinFreqMap);
} else {
renderPropRow(pid, false, '', null, null, mergedMap, recoinFreqMap);
}
} catch (err) {
console.error('[Cradle Importer Error]', err);
}
});
mw.notify(`Imported ${newPIDs.length} properties!`, { type: 'success' });
});
});
});
$headerTitleRow.append($openImporterBtn);
$form.append($headerTitleRow);
let $headerFieldsRow = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '10px', 'margin-bottom': '12px'});
// Row 1: Title, Description, Aliases (|) in FULL width flex row
let $row1 = $('<div>').css({'display': 'flex', 'gap': '8px', 'flex-wrap': 'wrap', 'align-items': 'center'});
$row1.append($('<div>').css({'flex': '1', 'min-width': '140px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-schema-title'))).append($titleInput));
$row1.append($('<div>').css({'flex': '1.5', 'min-width': '160px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-schema-desc'))).append($descInput));
$row1.append($('<div>').css({'flex': '1', 'min-width': '130px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-new-item-aliases'))).append($aliasesInput));
// Row 2: Associated Item & Base Schema (Derivation)
let $row2 = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px'});
let $row2Inner = $('<div>').css({'display': 'flex', 'gap': '8px', 'flex-wrap': 'wrap'});
$row2Inner.append($('<div>').css({'flex': '1', 'min-width': '200px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-schema-target-item-label'))).append($targetItemInput));
$row2Inner.append($('<div>').css({'flex': '1', 'min-width': '200px'}).append($('<label>').css({'display': 'block', 'font-weight': 'bold', 'margin-bottom': '4px'}).text(mw.msg('cradle-base-schema-label'))).append($baseSchemaInput));
$row2.append($row2Inner).append($targetNoticeDiv);
$headerFieldsRow.append($row1).append($row2);
$form.append($headerFieldsRow);
let $propertiesDiv = $('<div>').css({
'display': 'flex',
'flex-direction': 'column',
'gap': '8px',
'border': '1px dashed #c8ccd1',
'padding': '12px',
'border-radius': '4px',
'position': 'relative'
});
$propertiesDiv.append($('<h4>').css({'margin': '0'}).text(mw.msg('cradle-properties-list')));
let $propsList = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '8px'});
$propertiesDiv.append($propsList);
// Helper to batch fetch labels for properties and items (with English fallback)
function fetchLabelsInBatches(ids, callback) {
let labels = {};
let datatypes = {};
ids = ids.filter(id => id);
if (ids.length === 0) {
callback(labels, datatypes);
return;
}
let api = new mw.Api();
let chunks = [];
for (let i = 0; i < ids.length; i += 50) {
chunks.push(ids.slice(i, i + 50));
}
let pending = chunks.length;
let userLang = mw.config.get('wgUserLanguage') || 'en';
let langsToFetch = userLang === 'en' ? 'en' : `${userLang}|en`;
chunks.forEach(chunk => {
let idsStr = Array.isArray(chunk) ? chunk.join('|') : chunk;
api.get({
action: 'wbgetentities',
ids: idsStr,
props: 'labels|datatype',
languages: langsToFetch,
format: 'json'
}).done(function(res) {
if (res && res.entities) {
chunk.forEach(id => {
if (res.entities[id]) {
let lObj = res.entities[id].labels || {};
let lbl = (lObj[userLang] && lObj[userLang].value) || (lObj['en'] && lObj['en'].value);
labels[id] = lbl || id;
if (res.entities[id].datatype) {
datatypes[id] = res.entities[id].datatype;
if (id.startsWith('P')) {
propertyMetadata[id] = propertyMetadata[id] || {};
propertyMetadata[id].label = labels[id];
propertyMetadata[id].datatype = res.entities[id].datatype;
}
}
} else {
labels[id] = id;
}
});
}
pending--;
if (pending === 0) callback(labels, datatypes);
}).fail(function() {
chunk.forEach(id => { labels[id] = id; });
pending--;
if (pending === 0) callback(labels, datatypes);
});
});
}
function renderPropRow(pid, mandatory, defaultValue, hardselectQIDs, softselectQIDs, labelsMap, recoinFreqMap) {
labelsMap = labelsMap || {};
recoinFreqMap = recoinFreqMap || {};
let propLabel = labelsMap[pid] ? ` (${labelsMap[pid]})` : '';
let freqStr = recoinFreqMap[pid] ? recoinFreqMap[pid] : '';
let freqBadge = freqStr ? `<span style="background:#eaf3ff; color:#36c; border:1px solid #36c; padding:2px 6px; border-radius:3px; font-size:11px; margin-left:8px; font-weight:bold;">${freqStr}</span>` : '';
let uniqueRowId = Math.random().toString(36).substring(2, 9);
let $row = $('<div>').addClass('cradle-prop-row-builder').css({
'display': 'flex',
'flex-direction': 'column',
'gap': '8px',
'padding': '10px',
'background': '#f8f9fa',
'border-radius': '4px',
'border': '1px solid #a2a9b1',
'position': 'relative'
});
// Header line
let $headerRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center'});
$headerRow.append($('<strong>').css({'font-size': '14px'}).html(pid + propLabel + ' ' + freqBadge));
let $remove = $('<button>').addClass('cradle-btn-secondary').css({'padding': '2px 6px', 'color': '#d33', 'font-weight': 'bold'}).html(ICONS.close).on('click', function() {
$row.remove();
});
$headerRow.append($remove);
$row.append($headerRow);
// Cardinality, Value Type, and OR Group row
let $optionsRow = $('<div>').css({'display': 'flex', 'gap': '12px', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $cardinalitySelect = $('<select>').addClass('cradle-select').css({
'font-size': '12px',
'height': '28px',
'padding': '2px 6px',
'width': 'auto'
});
$cardinalitySelect.append($('<option>').val('1').text(mw.msg('cradle-cardinality-1')));
$cardinalitySelect.append($('<option>').val('?').text(mw.msg('cradle-cardinality-opt-single')));
$cardinalitySelect.append($('<option>').val('+').text(mw.msg('cradle-cardinality-req-multi')));
$cardinalitySelect.append($('<option>').val('*').text(mw.msg('cradle-cardinality-opt-multi')));
let initialCard = mandatory ? '1' : '?';
$cardinalitySelect.val(initialCard);
let $cardinalityLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '6px',
'font-size': '12px',
'font-weight': 'bold',
'color': '#202122'
}).text(mw.msg('cradle-cardinality-label')).append($cardinalitySelect);
// Value Type / DataType selector
let $valueTypeSelect = $('<select>').addClass('cradle-select').css({
'font-size': '12px',
'height': '28px',
'padding': '2px 6px',
'width': 'auto'
});
$valueTypeSelect.append($('<option>').val('IRI').text(mw.msg('cradle-valtype-qid')));
$valueTypeSelect.append($('<option>').val('xsd:string').text(mw.msg('cradle-valtype-string')));
$valueTypeSelect.append($('<option>').val('rdf:langString').text(mw.msg('cradle-valtype-langstring')));
$valueTypeSelect.append($('<option>').val('xsd:dateTime').text(mw.msg('cradle-valtype-datetime')));
$valueTypeSelect.append($('<option>').val('xsd:decimal').text(mw.msg('cradle-valtype-decimal')));
$valueTypeSelect.append($('<option>').val('geo:wktLiteral').text(mw.msg('cradle-valtype-geo')));
$valueTypeSelect.append($('<option>').val('subshape').text(mw.msg('cradle-valtype-subshape')));
// Auto-detect value type based on property metadata
let propDT = (propertyMetadata[pid] && propertyMetadata[pid].datatype) || '';
if (propDT === 'string' || propDT === 'external-id') $valueTypeSelect.val('xsd:string');
else if (propDT === 'monolingualtext') $valueTypeSelect.val('rdf:langString');
else if (propDT === 'time') $valueTypeSelect.val('xsd:dateTime');
else if (propDT === 'quantity') $valueTypeSelect.val('xsd:decimal');
else if (propDT === 'globe-coordinate') $valueTypeSelect.val('geo:wktLiteral');
else $valueTypeSelect.val('IRI');
let $valueTypeLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '6px',
'font-size': '12px',
'font-weight': 'bold',
'color': '#202122'
}).text(mw.msg('cradle-valtype-label')).append($valueTypeSelect);
// Alternative Group (OR) input
let $orGroupInput = $('<input>').addClass('cradle-input').attr('placeholder', 'e.g. OSM ID').css({
'font-size': '12px',
'height': '28px',
'width': '120px',
'padding': '2px 6px'
});
let $orGroupLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '4px',
'font-size': '12px',
'color': '#54595d'
}).text(mw.msg('cradle-orgroup-label')).append($orGroupInput);
$optionsRow.append($cardinalityLabel).append($valueTypeLabel).append($orGroupLabel);
$row.append($optionsRow);
// SubShape Container (supports both internal @<SubShape> and external IMPORT EntitySchema)
let $subShapeGroup = $('<div>').css({'display': 'none', 'flex-direction': 'column', 'gap': '6px', 'margin-top': '4px', 'padding': '8px', 'background': '#fff', 'border': '1px solid #c8ccd1', 'border-radius': '4px'});
let $subShapeTopRow = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $subShapeModeSelect = $('<select>').addClass('cradle-select').css({'font-size': '12px', 'height': '28px', 'padding': '2px 6px', 'width': 'auto'});
$subShapeModeSelect.append($('<option>').val('internal').text(mw.msg('cradle-subshape-mode-internal')));
$subShapeModeSelect.append($('<option>').val('external').text(mw.msg('cradle-subshape-mode-external')));
let $subShapeModeLabel = $('<label>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-mode-label')).append($subShapeModeSelect);
let $subShapeExternalWrap = $('<div>').css({'display': 'none', 'gap': '6px', 'align-items': 'center'});
let $subShapeExternalInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-subshape-external-id-placeholder')).css({'font-size': '12px', 'height': '28px', 'width': '150px'});
$subShapeExternalWrap.append($('<label>').css({'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-external-id-label'))).append($subShapeExternalInput);
let $subShapeNameWrap = $('<div>').css({'display': 'flex', 'gap': '6px', 'align-items': 'center', 'flex': '1', 'min-width': '200px'});
let $subShapeInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-subshape-name-placeholder')).css({
'font-size': '12px',
'height': '28px',
'flex': '1'
});
$subShapeNameWrap.append($('<label>').css({'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-name-label'))).append($subShapeInput);
let $subShapeClassesHint = $('<div>').css({'font-size': '11px', 'color': '#54595d'}).text(mw.msg('cradle-subshape-classes-hint'));
$subShapeTopRow.append($subShapeModeLabel).append($subShapeExternalWrap).append($subShapeNameWrap);
$subShapeGroup.append($subShapeTopRow).append($subShapeClassesHint);
$row.append($subShapeGroup);
// Selection options layout: Radio buttons for Value type
let isHard = !!hardselectQIDs || (defaultValue && defaultValue.startsWith('Q'));
let isSoft = !isHard && !!softselectQIDs;
let activePreset = 'none';
if (isHard) activePreset = 'hard';
else if (isSoft) activePreset = 'soft';
let $radioGroup = $('<div>').css({'display': 'flex', 'gap': '12px', 'margin-top': '4px'});
let $radioNone = $('<input>').attr({
type: 'radio',
name: `select-type-${uniqueRowId}`,
id: `none-${uniqueRowId}`,
checked: (activePreset === 'none')
});
let $labelNone = $('<label>').attr('for', `none-${uniqueRowId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioNone).append(mw.msg('cradle-preset-none'));
let $radioHard = $('<input>').attr({
type: 'radio',
name: `select-type-${uniqueRowId}`,
id: `hard-${uniqueRowId}`,
checked: (activePreset === 'hard')
});
let $labelHard = $('<label>').attr('for', `hard-${uniqueRowId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioHard).append(mw.msg('cradle-hardselect-label'));
let $radioSoft = $('<input>').attr({
type: 'radio',
name: `select-type-${uniqueRowId}`,
id: `soft-${uniqueRowId}`,
checked: (activePreset === 'soft')
});
let $labelSoft = $('<label>').attr('for', `soft-${uniqueRowId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioSoft).append(mw.msg('cradle-softselect-label'));
$radioGroup.append($labelNone).append($labelHard).append($labelSoft);
$row.append($radioGroup);
// Container for preset value options
let $valuePresetContainer = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px'});
// Chips Container
let $chipsDiv = $('<div>').css({'display': 'flex', 'flex-wrap': 'wrap', 'gap': '6px', 'margin-top': '4px'});
$valuePresetContainer.append($chipsDiv);
// Toggle visibility of QID chips / subShape based on ValueType and SubShape Mode selection
function updateVisibilityBasedOnValueType() {
let vt = $valueTypeSelect.val();
let sMode = $subShapeModeSelect.val();
if (vt === 'IRI') {
$radioGroup.show();
$valuePresetContainer.show();
$subShapeGroup.css('display', 'none');
} else if (vt === 'subshape') {
$radioGroup.hide();
$subShapeGroup.css('display', 'flex');
if (sMode === 'external') {
$subShapeExternalWrap.css('display', 'flex');
$subShapeClassesHint.hide();
$valuePresetContainer.hide();
} else {
$subShapeExternalWrap.css('display', 'none');
$subShapeClassesHint.show();
$valuePresetContainer.show();
if (typeof updateSearchInputVisibility === 'function') updateSearchInputVisibility();
}
} else {
$radioGroup.hide();
$valuePresetContainer.hide();
$subShapeGroup.css('display', 'none');
}
}
$valueTypeSelect.on('change', updateVisibilityBasedOnValueType);
$subShapeModeSelect.on('change', updateVisibilityBasedOnValueType);
updateVisibilityBasedOnValueType();
let selectedItems = []; // List of { qid, label }
var $valSearchGroup = null;
function addChip(qid, label) {
let useHard = $radioHard.is(':checked');
if (selectedItems.some(i => i.qid === qid)) return;
selectedItems.push({ qid: qid, label: label });
let $chip = $('<span>').css({
'display': 'inline-flex',
'align-items': 'center',
'gap': '6px',
'background': '#eaecf0',
'border': '1px solid #c8ccd1',
'border-radius': '3px',
'padding': '3px 8px',
'font-size': '12px'
}).text(`${label} (${qid})`);
let $removeChip = $('<span>').css({
'cursor': 'pointer',
'color': '#72777d',
'font-weight': 'bold',
'margin-left': '4px'
}).html(ICONS.close).on('click', function() {
selectedItems = selectedItems.filter(item => item.qid !== qid);
$chip.remove();
updateSearchInputVisibility();
});
$chip.append($removeChip);
$chipsDiv.append($chip);
updateSearchInputVisibility();
}
// Autocomplete search input group
$valSearchGroup = $('<div>').css({'position': 'relative', 'margin-top': '4px'});
let $valSearchInput = $('<input>').addClass('cradle-input').css({'height': '36px', 'padding': '2px 8px', 'font-size': '13px'})
.attr('placeholder', mw.msg('cradle-search-value-placeholder'));
$valSearchGroup.append($valSearchInput);
let $valAutocompleteMenu = $('<ul>').css({
'position': 'absolute',
'top': '100%',
'left': '0',
'right': '0',
'background': '#fff',
'border': '1px solid #a2a9b1',
'border-radius': '0 0 4px 4px',
'box-shadow': '0 2px 4px rgba(0,0,0,0.15)',
'max-height': '150px',
'overflow-y': 'auto',
'z-index': '1010',
'list-style': 'none',
'margin': '0',
'padding': '0',
'display': 'none'
});
$valSearchGroup.append($valAutocompleteMenu);
$valuePresetContainer.append($valSearchGroup);
$row.append($valuePresetContainer);
// Bind autocomplete searches for select item values
let valDebounce;
$valSearchInput.on('input', function() {
clearTimeout(valDebounce);
let val = $valSearchInput.val().trim();
if (val.length < 2) {
$valAutocompleteMenu.hide().empty();
return;
}
valDebounce = setTimeout(function() {
let api = new mw.Api();
logDebug('[Cradle Designer] Searching value preset:', val);
api.get({
action: 'wbsearchentities',
search: val,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'item',
format: 'json'
}).done(function(res) {
$valAutocompleteMenu.empty();
let items = res.search || [];
if (items.length === 0) {
$valAutocompleteMenu.hide();
return;
}
items.forEach(item => {
let desc = item.description ? ` - ${item.description}` : '';
let $li = $('<li>').css({
'padding': '6px 10px',
'cursor': 'pointer',
'border-bottom': '1px solid #eaecf0',
'font-size': '12px'
})
.html(`<strong>${item.id}</strong>: ${item.label}${desc}`)
.on('click', function() {
addChip(item.id, item.label);
$valSearchInput.val('');
$valAutocompleteMenu.hide().empty();
})
.on('mouseenter', function() { $(this).css('background', '#f8f9fa'); })
.on('mouseleave', function() { $(this).css('background', '#fff'); });
$valAutocompleteMenu.append($li);
});
$valAutocompleteMenu.show();
});
}, 300);
});
function updateSearchInputVisibility() {
if (!$valSearchGroup || !$valSearchGroup.length) return;
if ($valueTypeSelect.val() === 'subshape' && $subShapeModeSelect.val() === 'internal') {
$chipsDiv.show();
$valSearchGroup.show();
return;
}
let activeType = $radioHard.is(':checked') ? 'hard' : ($radioSoft.is(':checked') ? 'soft' : 'none');
if (activeType === 'none') {
$valSearchGroup.hide();
$chipsDiv.hide();
} else {
$chipsDiv.show();
if (activeType === 'hard' && selectedItems.length >= 1) {
$valSearchGroup.hide();
} else {
$valSearchGroup.show();
}
}
}
$radioNone.on('change', updateSearchInputVisibility);
$radioHard.on('change', updateSearchInputVisibility);
$radioSoft.on('change', updateSearchInputVisibility);
// Populate existing values on edit (after $valSearchGroup and updateSearchInputVisibility are initialized)
if (isHard) {
let qids = hardselectQIDs || (defaultValue ? [defaultValue] : []);
qids.forEach(qid => {
if (qid) addChip(qid, labelsMap[qid] || qid);
});
} else if (isSoft) {
softselectQIDs.forEach(qid => {
addChip(qid, labelsMap[qid] || qid);
});
}
updateSearchInputVisibility();
$(document).on('click', function(e) {
if (!$(e.target).closest($valSearchGroup).length) {
$valAutocompleteMenu.hide();
}
});
$row.data('pid', pid);
$row.data('get_data', function() {
let qidString = selectedItems.map(i => i.qid).join(',');
let useHard = $radioHard.is(':checked');
let useSoft = $radioSoft.is(':checked');
let cardVal = $cardinalitySelect.val();
let vType = $valueTypeSelect.val();
let sMode = $subShapeModeSelect.val() || 'internal';
let sExtId = $subShapeExternalInput.val().trim();
let sName = $subShapeInput.val().trim();
let oGroup = $orGroupInput.val().trim();
return {
pid: pid,
cardinality: cardVal,
mandatory: (cardVal === '1' || cardVal === '+'),
allowMultiple: (cardVal === '+' || cardVal === '*'),
valueType: vType,
subShapeMode: sMode,
subShapeExternalId: sExtId,
subShapeName: sName,
subShapeQids: (vType === 'subshape' && sMode === 'internal') ? qidString : '',
orGroup: oGroup,
defaultValue: '',
hardselect: (vType === 'IRI' && useHard && qidString) ? qidString : '',
softselect: (vType === 'IRI' && useSoft && qidString) ? qidString : ((vType === 'subshape' && sMode === 'internal') ? qidString : '')
};
});
$propsList.append($row);
}
// Initialize designer: Gather edit details and load labels in a single batch
let editPIDs = isEdit ? Object.keys(editSchemaData.props) : [];
let qidsToFetch = [];
if (isEdit && editSchemaData.props) {
editPIDs.forEach(pid => {
qidsToFetch.push(pid);
let p = editSchemaData.props[pid];
if (p.defaultValue && p.defaultValue.startsWith('Q')) qidsToFetch.push(p.defaultValue);
if (p.hardselect) qidsToFetch = qidsToFetch.concat(p.hardselect);
if (p.softselect) qidsToFetch = qidsToFetch.concat(p.softselect);
});
}
qidsToFetch = [...new Set(qidsToFetch)].filter(id => /^[QP]\d+$/.test(id));
fetchLabelsInBatches(qidsToFetch, function(labelsMap) {
if (isEdit && editSchemaData.props) {
editPIDs.forEach(pid => {
let p = editSchemaData.props[pid];
let isMandatory = p.mandatory === true || p.mandatory === 1 || p.mandatory === '1';
let defVal = p.defaultValue || '';
let hSel = p.hardselect || null;
let sSel = p.softselect || null;
renderPropRow(pid, isMandatory, defVal, hSel, sSel, labelsMap);
});
}
});
let $addPropGroup = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px', 'margin-top': '8px', 'position': 'relative'});
let $addPropInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-prop-search-placeholder'));
$addPropGroup.append($addPropInput);
let $autocompleteMenu = $('<ul>').css({
'position': 'absolute',
'top': '100%',
'left': '0',
'right': '0',
'background': '#fff',
'border': '1px solid #a2a9b1',
'border-radius': '0 0 4px 4px',
'box-shadow': '0 2px 4px rgba(0,0,0,0.15)',
'max-height': '200px',
'overflow-y': 'auto',
'z-index': '1000',
'list-style': 'none',
'margin': '0',
'padding': '0',
'display': 'none'
});
$addPropGroup.append($autocompleteMenu);
$propertiesDiv.append($addPropGroup);
$form.append($propertiesDiv);
$content.append($form);
let debounceTimer;
$addPropInput.on('input', function() {
clearTimeout(debounceTimer);
let val = $addPropInput.val().trim();
if (val.length < 2) {
$autocompleteMenu.hide().empty();
return;
}
debounceTimer = setTimeout(function() {
let api = new mw.Api();
logDebug('[Cradle Designer] Searching property:', val);
api.get({
action: 'wbsearchentities',
search: val,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'property',
format: 'json'
}).done(function(res) {
$autocompleteMenu.empty();
let items = res.search || [];
if (items.length === 0) {
$autocompleteMenu.hide();
return;
}
items.forEach(item => {
let desc = item.description ? ` - ${item.description}` : '';
let $li = $('<li>').css({
'padding': '8px 12px',
'cursor': 'pointer',
'border-bottom': '1px solid #eaecf0',
'font-size': '13px'
})
.html(`<strong>${item.id}</strong>: ${item.label}${desc}`)
.on('click', function() {
let map = {};
map[item.id] = item.label;
renderPropRow(item.id, false, '', null, null, map);
$addPropInput.val('');
$autocompleteMenu.hide().empty();
})
.on('mouseenter', function() { $(this).css('background', '#f8f9fa'); })
.on('mouseleave', function() { $(this).css('background', '#fff'); });
$autocompleteMenu.append($li);
});
$autocompleteMenu.show();
});
}, 300);
});
$(document).on('click', function(e) {
if (!$(e.target).closest($addPropGroup).length) {
$autocompleteMenu.hide();
}
});
function gatherDesignerProps() {
let propRows = [];
$propsList.children().each(function() {
let rowData = $(this).data('get_data')();
propRows.push(rowData);
});
return propRows;
}
let $footer = $('#cradle-footer-area').empty().css({
'display': 'flex',
'flex-direction': 'row',
'justify-content': 'space-between',
'align-items': 'center',
'gap': '8px',
'padding': '12px 16px'
});
let $cancelBtn = $('<button>').addClass('cradle-btn-secondary').html(ICONS.back + ' <span>' + mw.msg('cradle-back') + '</span>').on('click', function() {
renderCreateOptionsSelector();
});
let $feedbackBtn = $('<button>').attr('type', 'button')
.addClass('cdx-button cdx-button--weight-quiet')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '5px', 'font-size': '12px', 'color': 'var(--color-progressive, #36c)'})
.html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-btn') + '</span>')
.on('click', openFeedbackModal);
let $saveBtn = $('<button>').addClass('cradle-btn-primary').text(mw.msg('cradle-create-entityschema-btn')).on('click', function() {
let name = $titleInput.val().trim() || 'CustomSchema';
let desc = $('#cradle-schema-desc-input').length ? $('#cradle-schema-desc-input').val().trim() : '';
let aliases = $('#cradle-schema-aliases-input').length ? $('#cradle-schema-aliases-input').val().trim() : '';
let targetQID = $targetItemInput.val().trim();
let baseSchema = $('#cradle-schema-base-schema-input').length ? $('#cradle-schema-base-schema-input').val().trim() : '';
let propRows = gatherDesignerProps();
if (propRows.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'error' });
return;
}
let pids = propRows.map(r => r.pid);
fetchLabelsInBatches(pids, function(labelsMap) {
openShExExportModal(name, propRows, labelsMap, targetQID, baseSchema, desc, aliases);
});
});
let $exportShexBtn = $('<button>')
.addClass('cradle-btn-secondary')
.text(mw.msg('cradle-export-shex'))
.on('click', function() {
let name = $titleInput.val().trim() || 'CustomSchema';
let desc = $('#cradle-schema-desc-input').length ? $('#cradle-schema-desc-input').val().trim() : '';
let aliases = $('#cradle-schema-aliases-input').length ? $('#cradle-schema-aliases-input').val().trim() : '';
let targetQID = $targetItemInput.val().trim();
let baseSchema = $('#cradle-schema-base-schema-input').length ? $('#cradle-schema-base-schema-input').val().trim() : '';
let propRows = gatherDesignerProps();
if (propRows.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'error' });
return;
}
let pids = propRows.map(r => r.pid);
fetchLabelsInBatches(pids, function(labelsMap) {
openShExExportModal(name, propRows, labelsMap, targetQID, baseSchema, desc, aliases);
});
});
let $versionBadge = $('<span>').css({
'font-size': '0.75rem',
'font-weight': 'bold',
'color': '#72777d',
'margin-left': '8px'
}).text(`v${CRADLE_VERSION}`);
let $leftGroup = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '8px'}).append($cancelBtn).append($feedbackBtn).append($versionBadge);
let $rightGroup = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'center'}).append($exportShexBtn).append($saveBtn);
$footer.append($leftGroup).append($rightGroup);
}
/**
* Loads an existing EntitySchema for editing (Special:Cradle#edit).
*/
function loadSchemaForEditing(schemaId) {
updateNavigationTabs('edit');
let cleanId = (schemaId || '').trim().toUpperCase();
if (!cleanId.startsWith('E')) {
cleanId = 'E' + cleanId.replace(/\D/g, '');
}
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
$content.append($('<div>').css({'text-align': 'center', 'margin-top': '40px'})
.append($('<div>').addClass('cradle-spinner').css({'border-top-color': 'var(--border-color-progressive, #36c)', 'width': '30px', 'height': '30px'}))
.append($('<p>').text(mw.msg('cradle-loading-schema', cleanId)))
);
fetchSchemaWithImports(cleanId).then(function(schema) {
let parsedProps = parseShEx(schema.schemaText, schema.importedSchemas);
let pids = Object.keys(parsedProps);
let qidsToFetch = [];
pids.forEach(pid => {
let p = parsedProps[pid];
if (p.hardselect && Array.isArray(p.hardselect)) qidsToFetch = qidsToFetch.concat(p.hardselect);
if (p.softselect && Array.isArray(p.softselect)) qidsToFetch = qidsToFetch.concat(p.softselect);
});
qidsToFetch = [...new Set(qidsToFetch)].filter(id => /^Q\d+$/i.test(id));
return Promise.all([
loadPropertiesMetadata(pids),
loadItemLabels(qidsToFetch)
]).then(function(results) {
let metaMap = results[0] || {};
let qidLabelsMap = results[1] || {};
renderSchemaEditor(cleanId, schema, parsedProps, metaMap, qidLabelsMap);
});
}).catch(function(err) {
console.error('[Cradle] Error loading schema for editing:', err);
$content.empty().append($('<div>').addClass('cradle-selector-box').css('border-color', 'var(--color-destructive, #d33)')
.append($('<p>').css({'color': 'var(--color-destructive, #d33)', 'font-weight': 'bold'}).text(mw.msg('cradle-load-schema-error') || 'Error loading schema'))
.append($('<p>').text((err && err.message) ? err.message : String(err)))
.append($('<button>').addClass('cradle-btn-secondary').text(mw.msg('cradle-back')).on('click', renderCreateOptionsSelector))
);
});
}
/**
* Seamlessly merges visual property builder rows into an existing ShEx schema text.
* Preserves:
* - All preambles (custom comments, PREFIX declarations, IMPORT statements, and start shapes)
* - Standalone section comments inside the main shape
* - Non-property statements (e.g. rdfs:label, schema:description)
* - Existing custom inline comments on properties when unchanged
* - All postambles (sub-shapes, auxiliary shapes, closing braces, trailing comments)
*/
function mergeVisualPropsIntoShex(existingCode, propRows, labelsMap, shapeTitle) {
if (!existingCode || !existingCode.trim()) {
return generateShExCode(shapeTitle, propRows, labelsMap, null, null, null);
}
function findMatchingBrace(str, startIdx) {
let depth = 0;
let inComment = false;
for (let i = startIdx; i < str.length; i++) {
let ch = str[i];
if (ch === '\n') {
inComment = false;
continue;
}
if (ch === '#') {
inComment = true;
continue;
}
if (inComment) continue;
if (ch === '{') {
depth++;
} else if (ch === '}') {
depth--;
if (depth === 0) {
return i;
}
}
}
return -1;
}
function findShapeOpenBrace(shexText) {
if (!shexText) return -1;
let startMatch = shexText.match(/start\s*=\s*@<\s*(.+?)\s*>/i) || shexText.match(/start\s*=\s*@?([A-Za-z0-9_:-]+)/i);
let startShapeName = startMatch ? (startMatch[1] || startMatch[2]).replace(/^[<@:]+|[>]+$/g, '').trim() : null;
if (startShapeName) {
let escapedName = startShapeName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
let regex = new RegExp(`(?:<${escapedName}>|:${escapedName}|\\b${escapedName}\\b)[^{]*\\{`, 'i');
let m = regex.exec(shexText);
if (m) {
return shexText.indexOf('{', m.index);
}
}
let genericMatch = shexText.match(/(?:<[A-Za-z0-9_:-]+>|:[A-Za-z0-9_:-]+|\b[A-Za-z0-9_:-]+)\s*(?:EXTRA\s+[^{]+)?\s*\{/i);
if (genericMatch) {
return shexText.indexOf('{', genericMatch.index);
}
return shexText.indexOf('{');
}
let openBraceIdx = findShapeOpenBrace(existingCode);
if (openBraceIdx === -1) {
return generateShExCode(shapeTitle, propRows, labelsMap, null, null, null);
}
let closeBraceIdx = findMatchingBrace(existingCode, openBraceIdx);
if (closeBraceIdx === -1) {
return generateShExCode(shapeTitle, propRows, labelsMap, null, null, null);
}
let preamble = existingCode.substring(0, openBraceIdx + 1);
let shapeBody = existingCode.substring(openBraceIdx + 1, closeBraceIdx);
let postamble = existingCode.substring(closeBraceIdx);
let bodyLines = shapeBody.split('\n');
let existingComments = {};
let preservedStandaloneComments = [];
let preservedNonPropLines = [];
let hasLabelConstraint = false;
let inOrGroup = false;
for (let i = 0; i < bodyLines.length; i++) {
let line = bodyLines[i];
let trimmed = line.trim();
if (trimmed.startsWith('(')) {
inOrGroup = true;
continue;
}
if (inOrGroup) {
if (trimmed.endsWith(')') || trimmed.endsWith(');') || trimmed.endsWith(') ;')) {
inOrGroup = false;
}
continue;
}
let propMatch = line.match(/(?:wdt|p):(P\d+)/i);
let commentMatch = line.match(/#\s*(.+)$/);
if (propMatch && commentMatch) {
existingComments[propMatch[1].toUpperCase()] = commentMatch[1].trim();
}
if (propMatch) {
continue; // Replaced by updated visual rows
}
if (/^\s*#\s*Grupo alternativo/i.test(line)) {
continue; // Regenerated if needed
}
if (/rdfs:label/i.test(line)) {
hasLabelConstraint = true;
preservedNonPropLines.push(line);
continue;
}
if (/schema:|skos:/i.test(line)) {
preservedNonPropLines.push(line);
continue;
}
if (trimmed.startsWith('#') && !trimmed.startsWith('# P') && !/^\s*#\s*wdt:/i.test(trimmed)) {
preservedStandaloneComments.push(line);
}
}
let propLines = [];
let orGroups = {};
let propMap = labelsMap || propertyMetadata || {};
propRows.forEach(row => {
let pid = row.pid;
let meta = propMap[pid] || {};
let label = (meta && meta.label) ? meta.label : (typeof meta === 'string' ? meta : pid);
let commentText = existingComments[pid] || label || pid;
let comment = commentText ? ` # ${commentText}` : '';
let valueExpr = '.';
let valueType = row.valueType || 'IRI';
if (valueType === 'xsd:string') valueExpr = 'xsd:string';
else if (valueType === 'rdf:langString') valueExpr = 'rdf:langString';
else if (valueType === 'xsd:dateTime') valueExpr = 'xsd:dateTime';
else if (valueType === 'xsd:decimal') valueExpr = 'xsd:decimal';
else if (valueType === 'geo:wktLiteral') valueExpr = 'geo:wktLiteral';
else if (valueType && valueType.startsWith('@<')) valueExpr = valueType;
else if (valueType === 'subshape') {
let mode = row.subShapeMode || ((row.subShapeExternalId || /^E\d+(?:#.+)?$/i.test(row.subShapeName || '')) ? 'external' : 'internal');
if (mode === 'external') {
let extSpec = parseExternalSubShapeSpec(row.subShapeExternalId, row.subShapeName);
valueExpr = `@<${extSpec.shapeName}>`;
} else {
let sName = normalizeShExShapeLabel(row.subShapeName, 'sub_shape');
valueExpr = `@<${sName}>`;
}
} else {
let options = [];
let qidsStr = row.hardselect || row.softselect || '';
if (qidsStr) {
let qids = (Array.isArray(qidsStr) ? qidsStr : String(qidsStr).split(',')).map(q => (q || '').trim()).filter(q => /^Q\d+$/i.test(q));
if (qids.length > 0) options = qids.map(q => `wd:${q.toUpperCase()}`);
}
valueExpr = options.length > 0 ? `[ ${options.join(' ')} ]` : (valueType === 'IRI' ? 'IRI' : '.');
}
let cardSymbol = ';';
if (row.cardinality === '+') cardSymbol = '+ ;';
else if (row.cardinality === '*') cardSymbol = '* ;';
else if (row.cardinality === '?') cardSymbol = '? ;';
else if (row.cardinality === '1') cardSymbol = ';';
else if (row.mandatory) cardSymbol = row.allowMultiple ? '+ ;' : ';';
else cardSymbol = row.allowMultiple ? '* ;' : '? ;';
if (row.orGroup) {
let gName = row.orGroup.trim();
if (!orGroups[gName]) orGroups[gName] = [];
orGroups[gName].push(` wdt:${pid} ${valueExpr}${comment}`);
} else {
propLines.push(` wdt:${pid} ${valueExpr} ${cardSymbol}${comment}`);
}
});
Object.keys(orGroups).forEach(groupName => {
propLines.push(` # Grupo alternativo (OR): ${groupName}`);
propLines.push(` (`);
let items = orGroups[groupName];
items.forEach((item, idx) => {
let isLast = (idx === items.length - 1);
propLines.push(` ${item}${isLast ? '' : ' |'}`);
});
propLines.push(` ) ;`);
});
let newBody = [];
if (preservedStandaloneComments.length > 0) {
newBody.push(...preservedStandaloneComments);
}
if (propLines.length > 0) {
newBody.push(...propLines);
}
if (preservedNonPropLines.length > 0) {
newBody.push(...preservedNonPropLines);
} else if (!hasLabelConstraint) {
newBody.push(' rdfs:label rdf:langString+;');
}
// Synchronize external IMPORT directives in preamble and internal sub-schema blocks in postamble
(propRows || []).forEach(row => {
if (!row || row.valueType !== 'subshape') return;
let mode = row.subShapeMode || ((row.subShapeExternalId || /^E\d+(?:#.+)?$/i.test(row.subShapeName || '')) ? 'external' : 'internal');
if (mode === 'external') {
let extSpec = parseExternalSubShapeSpec(row.subShapeExternalId, row.subShapeName);
if (extSpec.schemaId) {
let importLine = `IMPORT <http://www.wikidata.org/wiki/Special:EntitySchemaText/${extSpec.schemaId}>`;
if (!new RegExp('EntitySchemaText/' + extSpec.schemaId + '\\b', 'i').test(preamble)) {
preamble = importLine + '\n' + preamble;
}
let hintComment = `# externalSubShape: @<${extSpec.shapeName}> from EntitySchema:${extSpec.schemaId}`;
if (!preamble.includes(hintComment)) {
preamble = hintComment + '\n' + preamble;
}
}
} else {
let sName = normalizeShExShapeLabel(row.subShapeName, 'sub_shape');
let qidsStr = row.subShapeQids || row.hardselect || row.softselect || '';
let qids = (Array.isArray(qidsStr) ? qidsStr : String(qidsStr).split(','))
.map(q => (q || '').trim().toUpperCase())
.filter(q => /^Q\d+$/i.test(q));
let subBlockBody = qids.length > 0
? ` wdt:P31 [ ${qids.map(q => 'wd:' + q).join(' ')} ] + ;`
: ` wdt:P31 IRI + ;`;
let existingSubRegex = new RegExp(`(<${escapeRegex(sName)}>\\s*(?:EXTRA\\s+[^{]+)?\\{)([\\s\\S]*?)(\\})`, 'i');
if (existingSubRegex.test(postamble)) {
if (qids.length > 0) {
postamble = postamble.replace(existingSubRegex, `$1\n${subBlockBody}\n$3`);
}
} else {
postamble = postamble + `\n\n<${sName}> EXTRA wdt:P31 {\n${subBlockBody}\n}`;
}
}
});
return preamble + '\n' + newBody.join('\n') + '\n' + postamble;
}
/**
* Renders the Dual-Mode EntitySchema Editor UI (Special:Cradle#edit).
* Supports:
* 1. Modo Visual (GUI): rich property-based builder matching Schema Designer.
* 2. Modo Código (CodeEditor): MediaWiki native Ace editor with ShEx & # comment support and textarea fallback.
*/
function renderSchemaEditor(schemaId, schema, parsedProps, metaMap, qidLabelsMap) {
updateNavigationTabs('edit');
let $content = $('#cradle-content-area').empty();
updateDrawerFooter(false);
let currentShex = schema.schemaText || '';
let currentMode = 'visual'; // 'visual' or 'code'
let labelsMap = Object.assign({}, metaMap || {});
let itemLabels = Object.assign({}, qidLabelsMap || {});
let aceEditorInstance = null;
// Container
let $editorWrap = $('<div>').addClass('cradle-selector-box').css({'display': 'flex', 'flex-direction': 'column', 'gap': '14px'});
// Header
let $header = $('<div>').addClass('cradle-schema-editor-header');
let $backBtn = $('<button>').addClass('cradle-btn-secondary')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'height': '32px'})
.html(ICONS.back + ' <span>' + mw.msg('cradle-back') + '</span>')
.on('click', function() {
renderCreateOptionsSelector();
});
let $titleInfo = $('<div>').css({'display': 'inline-flex', 'align-items': 'center', 'gap': '8px', 'flex-wrap': 'wrap'})
.append($('<strong>').css({'font-size': '15px'}).text(mw.msg('cradle-editing-schema-title', schemaId)))
.append($('<span>').css({'color': '#54595d'}).text('(' + (schema.label || schemaId) + ')'))
.append($('<a>').attr({href: mw.util.getUrl('EntitySchema:' + schemaId), target: '_blank'}).css({'color': '#36c', 'display': 'inline-flex', 'align-items': 'center', 'gap': '3px'}).html(ICONS.external + ' <span style="font-size:12px;">EntitySchema:' + schemaId + '</span>'));
let $modeSwitcher = $('<div>').addClass('cradle-mode-switcher');
let $btnVisual = $('<button>').addClass('cradle-mode-btn active').html(ICONS.edit + ' <span>' + (mw.msg('cradle-mode-visual') || 'Modo visual (GUI)') + '</span>');
let $btnCode = $('<button>').addClass('cradle-mode-btn').html(ICONS.code + ' <span>' + (mw.msg('cradle-mode-code') || 'Modo código (ShEx)') + '</span>');
$modeSwitcher.append($btnVisual).append($btnCode);
let $leftHeader = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '12px', 'flex-wrap': 'wrap'})
.append($backBtn).append($titleInfo);
$header.append($leftHeader).append($modeSwitcher);
$editorWrap.append($header);
// Visual Mode Container
let $visualContainer = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '10px'});
let $propsList = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '8px'});
$visualContainer.append($('<h4>').css({'margin': '0'}).text(mw.msg('cradle-properties-list')));
$visualContainer.append($propsList);
// Helper to batch fetch labels
function fetchLabelsInBatches(ids, callback) {
let labels = {};
let datatypes = {};
ids = ids.filter(Boolean);
if (ids.length === 0) {
callback(labels, datatypes);
return;
}
let api = new mw.Api();
let chunks = [];
for (let i = 0; i < ids.length; i += 50) {
chunks.push(ids.slice(i, i + 50));
}
let pending = chunks.length;
let userLang = mw.config.get('wgUserLanguage') || 'en';
let langsToFetch = userLang === 'en' ? 'en' : `${userLang}|en`;
chunks.forEach(chunk => {
let idsStr = Array.isArray(chunk) ? chunk.join('|') : chunk;
api.get({
action: 'wbgetentities',
ids: idsStr,
props: 'labels|datatype',
languages: langsToFetch,
format: 'json'
}).done(function(res) {
if (res && res.entities) {
chunk.forEach(id => {
if (res.entities[id]) {
let lObj = res.entities[id].labels || {};
let lbl = (lObj[userLang] && lObj[userLang].value) || (lObj['en'] && lObj['en'].value);
labels[id] = lbl || id;
if (res.entities[id].datatype) {
datatypes[id] = res.entities[id].datatype;
if (id.startsWith('P')) {
propertyMetadata[id] = propertyMetadata[id] || {};
propertyMetadata[id].label = labels[id];
propertyMetadata[id].datatype = res.entities[id].datatype;
}
}
} else {
labels[id] = id;
}
});
}
pending--;
if (pending === 0) callback(labels, datatypes);
}).fail(function() {
chunk.forEach(id => { labels[id] = id; });
pending--;
if (pending === 0) callback(labels, datatypes);
});
});
}
// Render individual property row in Visual Mode
function renderEditorPropCard(pid, pData, mergedLabels, mergedItemLabels) {
mergedLabels = mergedLabels || {};
mergedItemLabels = mergedItemLabels || {};
let meta = mergedLabels[pid] ? mergedLabels[pid] : (propertyMetadata[pid] || {});
let propLabelText = (meta && meta.label) ? meta.label : (typeof meta === 'string' ? meta : pid);
let displayTitle = pid + (propLabelText && propLabelText !== pid ? ` (${propLabelText})` : '');
let uniqueId = Math.random().toString(36).substring(2, 9);
let $row = $('<div>').addClass('cradle-prop-row-builder').css({
'display': 'flex',
'flex-direction': 'column',
'gap': '8px',
'padding': '10px',
'background': '#f8f9fa',
'border-radius': '4px',
'border': '1px solid #a2a9b1',
'position': 'relative'
});
// Header line
let $headerRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center'});
$headerRow.append($('<strong>').css({'font-size': '14px'}).html(displayTitle));
let $remove = $('<button>').addClass('cradle-btn-secondary').css({'padding': '2px 6px', 'color': '#d33', 'font-weight': 'bold'}).html(ICONS.close).on('click', function() {
$row.remove();
});
$headerRow.append($remove);
$row.append($headerRow);
// Cardinality, Value Type, and OR Group
let $optionsRow = $('<div>').css({'display': 'flex', 'gap': '12px', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $cardinalitySelect = $('<select>').addClass('cradle-select').css({
'font-size': '12px',
'height': '28px',
'padding': '2px 6px',
'width': 'auto'
});
$cardinalitySelect.append($('<option>').val('1').text(mw.msg('cradle-cardinality-1')));
$cardinalitySelect.append($('<option>').val('?').text(mw.msg('cradle-cardinality-opt-single')));
$cardinalitySelect.append($('<option>').val('+').text(mw.msg('cradle-cardinality-req-multi')));
$cardinalitySelect.append($('<option>').val('*').text(mw.msg('cradle-cardinality-opt-multi')));
let initialCard = pData.cardinality || (pData.mandatory ? '1' : '?');
$cardinalitySelect.val(initialCard);
let $cardinalityLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '6px',
'font-size': '12px',
'font-weight': 'bold',
'color': '#202122'
}).text(mw.msg('cradle-cardinality-label')).append($cardinalitySelect);
// Value Type select
let $valueTypeSelect = $('<select>').addClass('cradle-select').css({
'font-size': '12px',
'height': '28px',
'padding': '2px 6px',
'width': 'auto'
});
$valueTypeSelect.append($('<option>').val('IRI').text(mw.msg('cradle-valtype-qid')));
$valueTypeSelect.append($('<option>').val('xsd:string').text(mw.msg('cradle-valtype-string')));
$valueTypeSelect.append($('<option>').val('rdf:langString').text(mw.msg('cradle-valtype-langstring')));
$valueTypeSelect.append($('<option>').val('xsd:dateTime').text(mw.msg('cradle-valtype-datetime')));
$valueTypeSelect.append($('<option>').val('xsd:decimal').text(mw.msg('cradle-valtype-decimal')));
$valueTypeSelect.append($('<option>').val('geo:wktLiteral').text(mw.msg('cradle-valtype-geo')));
$valueTypeSelect.append($('<option>').val('subshape').text(mw.msg('cradle-valtype-subshape')));
let initialVType = pData.valueType || 'IRI';
$valueTypeSelect.val(initialVType);
let $valueTypeLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '6px',
'font-size': '12px',
'font-weight': 'bold',
'color': '#202122'
}).text(mw.msg('cradle-valtype-label')).append($valueTypeSelect);
// Alternative OR Group
let $orGroupInput = $('<input>').addClass('cradle-input').attr('placeholder', 'e.g. OSM ID').css({
'font-size': '12px',
'height': '28px',
'width': '120px',
'padding': '2px 6px'
}).val(pData.orGroup || '');
let $orGroupLabel = $('<label>').css({
'display': 'flex',
'align-items': 'center',
'gap': '4px',
'font-size': '12px',
'color': '#54595d'
}).text(mw.msg('cradle-orgroup-label')).append($orGroupInput);
$optionsRow.append($cardinalityLabel).append($valueTypeLabel).append($orGroupLabel);
$row.append($optionsRow);
// SubShape input (supports both internal @<SubShape> and external IMPORT EntitySchema)
let $subShapeGroup = $('<div>').css({'display': 'none', 'flex-direction': 'column', 'gap': '6px', 'margin-top': '4px', 'padding': '8px', 'background': '#fff', 'border': '1px solid #c8ccd1', 'border-radius': '4px'});
let $subShapeTopRow = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'center', 'flex-wrap': 'wrap'});
let $subShapeModeSelect = $('<select>').addClass('cradle-select').css({'font-size': '12px', 'height': '28px', 'padding': '2px 6px', 'width': 'auto'});
$subShapeModeSelect.append($('<option>').val('internal').text(mw.msg('cradle-subshape-mode-internal')));
$subShapeModeSelect.append($('<option>').val('external').text(mw.msg('cradle-subshape-mode-external')));
$subShapeModeSelect.val(pData.subShapeMode || (pData.subShapeExternalId ? 'external' : 'internal'));
let $subShapeModeLabel = $('<label>').css({'display': 'flex', 'align-items': 'center', 'gap': '6px', 'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-mode-label')).append($subShapeModeSelect);
let $subShapeExternalWrap = $('<div>').css({'display': 'none', 'gap': '6px', 'align-items': 'center'});
let $subShapeExternalInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-subshape-external-id-placeholder')).css({'font-size': '12px', 'height': '28px', 'width': '150px'}).val(pData.subShapeExternalId || '');
$subShapeExternalWrap.append($('<label>').css({'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-external-id-label'))).append($subShapeExternalInput);
let $subShapeNameWrap = $('<div>').css({'display': 'flex', 'gap': '6px', 'align-items': 'center', 'flex': '1', 'min-width': '200px'});
let $subShapeInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-subshape-name-placeholder')).css({
'font-size': '12px',
'height': '28px',
'flex': '1'
}).val(pData.subShapeName || '');
$subShapeNameWrap.append($('<label>').css({'font-size': '12px', 'font-weight': 'bold'}).text(mw.msg('cradle-subshape-name-label'))).append($subShapeInput);
let $subShapeClassesHint = $('<div>').css({'font-size': '11px', 'color': '#54595d'}).text(mw.msg('cradle-subshape-classes-hint'));
$subShapeTopRow.append($subShapeModeLabel).append($subShapeExternalWrap).append($subShapeNameWrap);
$subShapeGroup.append($subShapeTopRow).append($subShapeClassesHint);
$row.append($subShapeGroup);
// Presets: None / Hardselect / Softselect
let hasHard = pData.hardselect && ((Array.isArray(pData.hardselect) && pData.hardselect.length > 0) || (typeof pData.hardselect === 'string' && pData.hardselect.trim().length > 0));
let hasSoft = pData.softselect && ((Array.isArray(pData.softselect) && pData.softselect.length > 0) || (typeof pData.softselect === 'string' && pData.softselect.trim().length > 0));
let activePreset = 'none';
if (hasHard) activePreset = 'hard';
else if (hasSoft) activePreset = 'soft';
let $radioGroup = $('<div>').css({'display': 'flex', 'gap': '12px', 'margin-top': '4px'});
let $radioNone = $('<input>').attr({type: 'radio', name: `select-type-${uniqueId}`, id: `none-${uniqueId}`, checked: (activePreset === 'none')});
let $labelNone = $('<label>').attr('for', `none-${uniqueId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioNone).append(mw.msg('cradle-preset-none'));
let $radioHard = $('<input>').attr({type: 'radio', name: `select-type-${uniqueId}`, id: `hard-${uniqueId}`, checked: (activePreset === 'hard')});
let $labelHard = $('<label>').attr('for', `hard-${uniqueId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioHard).append(mw.msg('cradle-hardselect-label'));
let $radioSoft = $('<input>').attr({type: 'radio', name: `select-type-${uniqueId}`, id: `soft-${uniqueId}`, checked: (activePreset === 'soft')});
let $labelSoft = $('<label>').attr('for', `soft-${uniqueId}`).css({'font-size': '12px', 'display': 'flex', 'align-items': 'center', 'gap': '4px'})
.append($radioSoft).append(mw.msg('cradle-softselect-label'));
$radioGroup.append($labelNone).append($labelHard).append($labelSoft);
$row.append($radioGroup);
let $valuePresetContainer = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '6px'});
let $chipsDiv = $('<div>').css({'display': 'flex', 'flex-wrap': 'wrap', 'gap': '6px', 'margin-top': '4px'});
$valuePresetContainer.append($chipsDiv);
function updateVisibilityBasedOnValueType() {
let vt = $valueTypeSelect.val();
let sMode = $subShapeModeSelect.val();
if (vt === 'IRI') {
$radioGroup.show();
$valuePresetContainer.show();
$subShapeGroup.css('display', 'none');
} else if (vt === 'subshape') {
$radioGroup.hide();
$subShapeGroup.css('display', 'flex');
if (sMode === 'external') {
$subShapeExternalWrap.css('display', 'flex');
$subShapeClassesHint.hide();
$valuePresetContainer.hide();
} else {
$subShapeExternalWrap.css('display', 'none');
$subShapeClassesHint.show();
$valuePresetContainer.show();
if (typeof updateSearchInputVisibility === 'function') updateSearchInputVisibility();
}
} else {
$radioGroup.hide();
$valuePresetContainer.hide();
$subShapeGroup.css('display', 'none');
}
}
$valueTypeSelect.on('change', updateVisibilityBasedOnValueType);
$subShapeModeSelect.on('change', updateVisibilityBasedOnValueType);
updateVisibilityBasedOnValueType();
let selectedItems = [];
var $valSearchGroup = null;
function addChip(qid, label) {
if (selectedItems.some(i => i.qid === qid)) return;
selectedItems.push({ qid: qid, label: label });
let $chip = $('<span>').css({
'display': 'inline-flex',
'align-items': 'center',
'gap': '6px',
'background': '#eaecf0',
'border': '1px solid #c8ccd1',
'border-radius': '3px',
'padding': '3px 8px',
'font-size': '12px'
}).text(`${label} (${qid})`);
let $removeChip = $('<span>').css({
'cursor': 'pointer',
'color': '#72777d',
'font-weight': 'bold',
'margin-left': '4px'
}).html(ICONS.close).on('click', function() {
selectedItems = selectedItems.filter(item => item.qid !== qid);
$chip.remove();
updateSearchInputVisibility();
});
$chip.append($removeChip);
$chipsDiv.append($chip);
updateSearchInputVisibility();
}
// Autocomplete search input group
$valSearchGroup = $('<div>').css({'position': 'relative', 'margin-top': '4px'});
let $valSearchInput = $('<input>').addClass('cradle-input').css({'height': '36px', 'padding': '2px 8px', 'font-size': '13px'})
.attr('placeholder', mw.msg('cradle-search-value-placeholder'));
$valSearchGroup.append($valSearchInput);
let $valAutocompleteMenu = $('<ul>').css({
'position': 'absolute', 'top': '100%', 'left': '0', 'right': '0',
'background': '#fff', 'border': '1px solid #a2a9b1', 'border-radius': '0 0 4px 4px',
'box-shadow': '0 2px 4px rgba(0,0,0,0.15)', 'max-height': '150px',
'overflow-y': 'auto', 'z-index': '1010', 'list-style': 'none',
'margin': '0', 'padding': '0', 'display': 'none'
});
$valSearchGroup.append($valAutocompleteMenu);
$valuePresetContainer.append($valSearchGroup);
$row.append($valuePresetContainer);
let valDebounce;
$valSearchInput.on('input', function() {
clearTimeout(valDebounce);
let val = $valSearchInput.val().trim();
if (val.length < 2) {
$valAutocompleteMenu.hide().empty();
return;
}
valDebounce = setTimeout(function() {
let api = new mw.Api();
api.get({
action: 'wbsearchentities',
search: val,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'item',
format: 'json'
}).done(function(res) {
$valAutocompleteMenu.empty();
let items = res.search || [];
if (items.length === 0) {
$valAutocompleteMenu.hide();
return;
}
items.forEach(item => {
let desc = item.description ? ` - ${item.description}` : '';
let $li = $('<li>').css({'padding': '6px 10px', 'cursor': 'pointer', 'border-bottom': '1px solid #eaecf0', 'font-size': '12px'})
.html(`<strong>${item.id}</strong>: ${item.label}${desc}`)
.on('click', function() {
addChip(item.id, item.label);
$valSearchInput.val('');
$valAutocompleteMenu.hide().empty();
})
.on('mouseenter', function() { $(this).css('background', '#f8f9fa'); })
.on('mouseleave', function() { $(this).css('background', '#fff'); });
$valAutocompleteMenu.append($li);
});
$valAutocompleteMenu.show();
});
}, 300);
});
function updateSearchInputVisibility() {
if (!$valSearchGroup || !$valSearchGroup.length) return;
if ($valueTypeSelect.val() === 'subshape' && $subShapeModeSelect.val() === 'internal') {
$chipsDiv.show();
$valSearchGroup.show();
return;
}
let activeType = $radioHard.is(':checked') ? 'hard' : ($radioSoft.is(':checked') ? 'soft' : 'none');
if (activeType === 'none') {
$valSearchGroup.hide();
$chipsDiv.hide();
} else {
$chipsDiv.show();
if (activeType === 'hard' && selectedItems.length >= 1) {
$valSearchGroup.hide();
} else {
$valSearchGroup.show();
}
}
}
$radioNone.on('change', updateSearchInputVisibility);
$radioHard.on('change', updateSearchInputVisibility);
$radioSoft.on('change', updateSearchInputVisibility);
// Populate initial QIDs (after $valSearchGroup and updateSearchInputVisibility are initialized)
let initialQids = [];
if (pData.hardselect) {
initialQids = Array.isArray(pData.hardselect) ? pData.hardselect : String(pData.hardselect).split(',');
} else if (pData.softselect) {
initialQids = Array.isArray(pData.softselect) ? pData.softselect : String(pData.softselect).split(',');
}
initialQids.forEach(q => {
let clean = (q || '').trim().toUpperCase();
if (/^Q\d+$/i.test(clean)) {
addChip(clean, mergedItemLabels[clean] || clean);
}
});
updateSearchInputVisibility();
$(document).on('click', function(e) {
if (!$(e.target).closest($valSearchGroup).length) {
$valAutocompleteMenu.hide();
}
});
$row.data('pid', pid);
$row.data('get_data', function() {
let qidString = selectedItems.map(i => i.qid).join(',');
let useHard = $radioHard.is(':checked');
let useSoft = $radioSoft.is(':checked');
let cardVal = $cardinalitySelect.val();
let vType = $valueTypeSelect.val();
let sMode = $subShapeModeSelect.val() || 'internal';
let sExtId = $subShapeExternalInput.val().trim();
let sName = $subShapeInput.val().trim();
let oGroup = $orGroupInput.val().trim();
return {
pid: pid,
cardinality: cardVal,
mandatory: (cardVal === '1' || cardVal === '+'),
allowMultiple: (cardVal === '+' || cardVal === '*'),
valueType: vType,
subShapeMode: sMode,
subShapeExternalId: sExtId,
subShapeName: sName,
subShapeQids: (vType === 'subshape' && sMode === 'internal') ? qidString : '',
orGroup: oGroup,
defaultValue: '',
hardselect: (vType === 'IRI' && useHard && qidString) ? qidString : '',
softselect: (vType === 'IRI' && useSoft && qidString) ? qidString : ((vType === 'subshape' && sMode === 'internal') ? qidString : '')
};
});
$propsList.append($row);
}
// Render all initial parsed props in Visual Mode
Object.keys(parsedProps).forEach(pid => {
renderEditorPropCard(pid, parsedProps[pid], labelsMap, itemLabels);
});
// Add property search group
let $addPropGroup = $('<div>').css({'display': 'flex', 'flex-direction': 'column', 'gap': '4px', 'margin-top': '8px', 'position': 'relative'});
let $addPropInput = $('<input>').addClass('cradle-input').attr('placeholder', mw.msg('cradle-prop-search-placeholder'));
$addPropGroup.append($addPropInput);
let $autocompleteMenu = $('<ul>').css({
'position': 'absolute', 'top': '100%', 'left': '0', 'right': '0',
'background': '#fff', 'border': '1px solid #a2a9b1', 'border-radius': '0 0 4px 4px',
'box-shadow': '0 2px 4px rgba(0,0,0,0.15)', 'max-height': '200px',
'overflow-y': 'auto', 'z-index': '1000', 'list-style': 'none',
'margin': '0', 'padding': '0', 'display': 'none'
});
$addPropGroup.append($autocompleteMenu);
$visualContainer.append($addPropGroup);
$editorWrap.append($visualContainer);
let propSearchDebounce;
$addPropInput.on('input', function() {
clearTimeout(propSearchDebounce);
let val = $addPropInput.val().trim();
if (val.length < 2) {
$autocompleteMenu.hide().empty();
return;
}
propSearchDebounce = setTimeout(function() {
let api = new mw.Api();
api.get({
action: 'wbsearchentities',
search: val,
language: mw.config.get('wgUserLanguage') || 'en',
type: 'property',
format: 'json'
}).done(function(res) {
$autocompleteMenu.empty();
let items = res.search || [];
if (items.length === 0) {
$autocompleteMenu.hide();
return;
}
items.forEach(item => {
let desc = item.description ? ` - ${item.description}` : '';
let $li = $('<li>').css({'padding': '8px 12px', 'cursor': 'pointer', 'border-bottom': '1px solid #eaecf0', 'font-size': '13px'})
.html(`<strong>${item.id}</strong>: ${item.label}${desc}`)
.on('click', function() {
labelsMap[item.id] = item.label;
renderEditorPropCard(item.id, { cardinality: '?' }, labelsMap, itemLabels);
$addPropInput.val('');
$autocompleteMenu.hide().empty();
})
.on('mouseenter', function() { $(this).css('background', '#f8f9fa'); })
.on('mouseleave', function() { $(this).css('background', '#fff'); });
$autocompleteMenu.append($li);
});
$autocompleteMenu.show();
});
}, 300);
});
$(document).on('click', function(e) {
if (!$(e.target).closest($addPropGroup).length) {
$autocompleteMenu.hide();
}
});
function gatherEditorProps() {
let propRows = [];
$propsList.children().each(function() {
let fn = $(this).data('get_data');
if (fn) {
propRows.push(fn());
}
});
return propRows;
}
// Code Mode Container
let $codeContainer = $('<div>').css({'display': 'none', 'flex-direction': 'column', 'gap': '8px'});
let $codeToolbar = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '8px'});
let $valStatusSpan = $('<span>').css({'font-size': '12px', 'font-weight': 'bold'});
let $validateBtn = $('<button>').addClass('cdx-button cdx-button--weight-quiet')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '4px', 'font-size': '12px'})
.html(ICONS.check + ' <span>' + (mw.msg('cradle-validate-shex-btn') || 'Validar sintaxis') + '</span>')
.on('click', function() {
let code = getEditorCode();
let v = validateShExSyntax(code);
if (v.valid) {
$valStatusSpan.css({'color': '#00af89'}).text(mw.msg('cradle-shex-syntax-valid') || 'Sintaxis ShEx válida');
} else {
$valStatusSpan.css({'color': '#d33'}).text((mw.msg('cradle-shex-syntax-invalid', v.errors[0]) || ('Error: ' + v.errors[0])));
}
});
let $commentHint = $('<span>').css({'font-size': '11px', 'color': '#72777d'}).text('W3C ShExC (# comentarios soportados)');
$codeToolbar.append($('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '8px'}).append($validateBtn).append($valStatusSpan)).append($commentHint);
$codeContainer.append($codeToolbar);
let $codeArea = $('<textarea>').addClass('cradle-shex-code-area').val(currentShex);
let $aceDiv = $('<div>').addClass('cradle-ace-editor').hide();
$codeContainer.append($codeArea).append($aceDiv);
$editorWrap.append($codeContainer);
function initAceEditor() {
if (aceEditorInstance) return Promise.resolve(aceEditorInstance);
return mw.loader.using('ext.codeEditor.ace').then(function() {
if (window.ace && $aceDiv.length) {
$codeArea.hide();
$aceDiv.show();
aceEditorInstance = window.ace.edit($aceDiv[0]);
try {
aceEditorInstance.session.setMode('ace/mode/turtle');
} catch (e) {}
aceEditorInstance.setValue($codeArea.val(), -1);
aceEditorInstance.setOptions({
fontSize: '13px',
showPrintMargin: false,
wrap: true
});
}
return aceEditorInstance;
}).catch(function() {
return null;
});
}
function getEditorCode() {
if (aceEditorInstance) {
return aceEditorInstance.getValue();
}
return $codeArea.val();
}
function setEditorCode(val) {
$codeArea.val(val);
if (aceEditorInstance) {
aceEditorInstance.setValue(val, -1);
}
}
// Mode Switching
$btnVisual.on('click', function() {
if (currentMode === 'visual') return;
let code = getEditorCode();
let v = validateShExSyntax(code);
if (!v.valid) {
let firstErr = (v.errors && v.errors.length) ? v.errors[0] : 'Syntax error';
mw.notify(mw.msg('cradle-shex-syntax-invalid', firstErr) || ('Error: ' + firstErr), { type: 'error' });
return;
}
let newParsed = parseShEx(code, schema.importedSchemas);
let newPids = Object.keys(newParsed);
let qidsToFetch = [];
newPids.forEach(pid => {
let p = newParsed[pid];
if (p.hardselect && Array.isArray(p.hardselect)) qidsToFetch = qidsToFetch.concat(p.hardselect);
if (p.softselect && Array.isArray(p.softselect)) qidsToFetch = qidsToFetch.concat(p.softselect);
});
qidsToFetch = [...new Set(qidsToFetch)].filter(id => /^Q\d+$/i.test(id) && !itemLabels[id]);
$propsList.empty();
let p1 = new Promise(resolve => {
fetchLabelsInBatches(newPids, function(freshLabels) {
resolve(freshLabels);
});
});
let p2 = qidsToFetch.length > 0 ? loadItemLabels(qidsToFetch) : Promise.resolve({});
Promise.all([p1, p2]).then(results => {
let freshLabels = results[0] || {};
let freshItemLabels = results[1] || {};
Object.assign(labelsMap, freshLabels);
Object.assign(itemLabels, freshItemLabels);
newPids.forEach(pid => {
renderEditorPropCard(pid, newParsed[pid], labelsMap, itemLabels);
});
});
currentMode = 'visual';
$btnVisual.addClass('active');
$btnCode.removeClass('active');
$codeContainer.hide();
$visualContainer.show();
});
$btnCode.on('click', function() {
if (currentMode === 'code') return;
let rows = gatherEditorProps();
let currentCode = getEditorCode();
let newCode = mergeVisualPropsIntoShex(currentCode, rows, labelsMap, schema.label || schemaId);
setEditorCode(newCode);
currentMode = 'code';
$btnCode.addClass('active');
$btnVisual.removeClass('active');
$visualContainer.hide();
$codeContainer.show();
initAceEditor().then(function(ed) {
if (ed) ed.resize();
});
});
$content.append($editorWrap);
// Footer setup
let $footer = $('#cradle-footer-area').empty().css({
'display': 'flex',
'flex-direction': 'column',
'gap': '12px',
'padding': '14px 16px',
'background': '#f8f9fa',
'border-top': '1px solid #c8ccd1',
'margin-top': '16px',
'border-radius': '0 0 4px 4px'
});
// Summary row
let $summaryRow = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '10px'});
$summaryRow.append($('<label>').css({'font-weight': 'bold', 'font-size': '13px', 'white-space': 'nowrap'}).text(mw.msg('cradle-edit-summary-label') || 'Resumen:'));
let $summaryInput = $('<input>').addClass('cradle-input')
.attr('placeholder', mw.msg('cradle-edit-summary-placeholder') || 'Resumen de edición (ej. Declaraciones añadidas)...')
.css({'flex': '1', 'height': '32px'});
$summaryRow.append($summaryInput);
$footer.append($summaryRow);
// Buttons row
let $buttonsRow = $('<div>').css({'display': 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'gap': '8px', 'flex-wrap': 'wrap'});
let $cancelBtn = $('<button>').addClass('cradle-btn-secondary')
.html(ICONS.back + ' <span>' + mw.msg('cradle-back') + '</span>')
.on('click', function() {
renderCreateOptionsSelector();
});
let $feedbackBtn = $('<button>').attr('type', 'button')
.addClass('cdx-button cdx-button--weight-quiet')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '5px', 'font-size': '12px', 'color': 'var(--color-progressive, #36c)'})
.html(ICONS.feedback + ' <span>' + mw.msg('cradle-feedback-btn') + '</span>')
.on('click', openFeedbackModal);
let $saveBtn = $('<button>').addClass('cdx-button cdx-button--action-progressive cdx-button--weight-primary')
.css({'display': 'inline-flex', 'align-items': 'center', 'gap': '6px', 'min-height': '34px', 'font-weight': 'bold'})
.html(ICONS.check + ' <span>' + mw.msg('cradle-save-changes') + '</span>')
.on('click', function() {
let codeToSave = '';
if (currentMode === 'code') {
codeToSave = getEditorCode();
} else {
let rows = gatherEditorProps();
if (rows.length === 0) {
mw.notify(mw.msg('cradle-schema-prop-required'), { type: 'error' });
return;
}
codeToSave = mergeVisualPropsIntoShex(getEditorCode(), rows, labelsMap, schema.label || schemaId);
}
let validation = validateShExSyntax(codeToSave);
if (!validation.valid) {
let proceed = confirm(mw.msg('cradle-shex-invalid') + '\n' + validation.errors.join('\n') + '\n\n' + mw.msg('cradle-confirm-proceed'));
if (!proceed) return;
}
$saveBtn.prop('disabled', true);
let customSummary = $summaryInput.val().trim();
let savingNotice = mw.notify(mw.msg('cradle-saving-schema') || 'Guardando cambios en el EntitySchema...', { autoHide: false });
saveEntitySchemaToWikidata(schemaId, codeToSave, customSummary).then(function(savedId) {
if (savingNotice && savingNotice.close) savingNotice.close();
mw.notify(mw.msg('cradle-save-schema-success', savedId) || `¡EntitySchema ${savedId} actualizado con éxito!`, { type: 'success' });
$saveBtn.prop('disabled', false);
}).catch(function(saveErr) {
if (savingNotice && savingNotice.close) savingNotice.close();
$saveBtn.prop('disabled', false);
let errStr = (saveErr && saveErr.message) ? saveErr.message : String(saveErr);
mw.notify((mw.msg('cradle-save-schema-failed', errStr) || ('Error al guardar: ' + errStr)), { type: 'error' });
});
});
let $leftGroup = $('<div>').css({'display': 'flex', 'align-items': 'center', 'gap': '8px'}).append($cancelBtn).append($feedbackBtn);
let $rightGroup = $('<div>').css({'display': 'flex', 'gap': '8px', 'align-items': 'center'}).append($saveBtn);
$buttonsRow.append($leftGroup).append($rightGroup);
$footer.append($buttonsRow);
}
$(document).ready(function() {
mw.loader.using(['mediawiki.api', 'mediawiki.util', 'mediawiki.storage', 'mediawiki.jqueryMsg']).then(init);
});
})();
ece86uwsbvo3blu5x11exqi4l6szp46
Property:P100662
120
346566
806923
2026-11-09T15:43:14Z
Alexander Goldberg IL
9241
/* wbeditentity-create-property:0| */ MHM Pipeline: test.wikidata.org remap stub
806923
wikibase-property
application/json
{"type":"property","datatype":"wikibase-item","id":"P100662","labels":{"en":{"language":"en","value":"writing system"}},"descriptions":[],"aliases":[],"claims":[]}
83ww6thxktadi03a78o1hp9yyr2xe80
User:Danielyepezgarces/Gadget-cradle-dev.css
2
346567
806925
2026-11-09T15:43:22Z
Danielyepezgarces
7347
Bump version to 1.57.0 (dev)
806925
css
text/css
/**
* CradleInWikidata.css
* Stylesheet aligned with Wikimedia design guidelines & Vector light/dark mode
* Version: 1.49.0
*/
/* Heading edit button styled to sit nicely at the right of #firstHeading */
.cradle-edit-heading-btn {
float: right;
font-size: 0.85rem;
font-weight: normal;
padding: 4px 12px;
margin-left: 12px;
margin-right: 4px;
background-color: var(--background-color-progressive, #36c);
color: #ffffff !important;
border: 1px solid var(--border-color-progressive, #36c);
border-radius: 2px;
cursor: pointer;
transition: background-color 0.1s;
height: 28px;
line-height: 18px;
}
.cradle-edit-heading-btn:hover {
background-color: var(--background-color-progressive-hover, #447ff5);
border-color: var(--border-color-progressive-hover, #447ff5);
}
/* Cradle Portlet Button in User Personal Menu (p-personal) & Vector 2022 Dropdown */
#pt-cradle-create a {
background-color: #36c;
color: #ffffff !important;
border: 1px solid #36c;
border-radius: 2px;
padding: 3px 8px;
font-weight: bold;
font-size: 0.8rem;
line-height: 1.3;
text-decoration: none;
display: inline-flex;
align-items: center;
white-space: nowrap;
gap: 4px;
height: 26px;
box-sizing: border-box;
margin: 2px 4px;
}
#pt-cradle-create a:hover {
background-color: #447ff5;
border-color: #447ff5;
color: #ffffff !important;
}
/* Clean contrast when rendered inside Vector dropdowns / mw-user-preferences menu */
.vector-user-menu #pt-cradle-create a,
.vector-dropdown #pt-cradle-create a,
.mw-user-preferences #pt-cradle-create a,
.vector-menu-content #pt-cradle-create a {
background-color: transparent !important;
color: #36c !important;
border: none !important;
padding: 6px 12px !important;
height: auto !important;
font-weight: bold !important;
}
.vector-user-menu #pt-cradle-create a:hover,
.vector-dropdown #pt-cradle-create a:hover,
.mw-user-preferences #pt-cradle-create a:hover,
.vector-menu-content #pt-cradle-create a:hover {
background-color: #eaf3ff !important;
color: #1e3f8a !important;
}
/* Vector 2022 Sidebar Header & Content Styling */
.skin-vector-2022 #p-cradle-schemas,
.vector-main-menu #p-cradle-schemas {
margin: 0 !important;
padding: 0 !important;
}
.skin-vector-2022 #p-cradle-schemas .vector-menu-heading,
.skin-vector-2022 #p-cradle-schemas h3,
.skin-vector-2022 #p-cradle-schemas label,
.vector-main-menu #p-cradle-schemas .vector-menu-heading,
.vector-main-menu #p-cradle-schemas h3,
.vector-main-menu #p-cradle-schemas label {
font-size: var(--font-size-small, 0.875rem) !important;
font-weight: normal !important;
color: var(--color-subtle, #54595d) !important;
padding: 6px 0 !important;
margin: 6px 0 !important;
border-bottom: 1px solid var(--background-color-interactive, #eaecf0) !important;
border-top: none !important;
border-left: none !important;
border-right: none !important;
background: none !important;
cursor: default !important;
display: block !important;
line-height: 1.5 !important;
letter-spacing: normal !important;
text-transform: none !important;
}
.skin-vector-2022 #p-cradle-schemas .vector-menu-heading span,
.vector-main-menu #p-cradle-schemas .vector-menu-heading span {
font-size: var(--font-size-small, 0.875rem) !important;
font-weight: normal !important;
}
.skin-vector-2022 #p-cradle-schemas .vector-menu-content,
.vector-main-menu #p-cradle-schemas .vector-menu-content {
margin: 0 !important;
padding: 0 !important;
}
.skin-vector-2022 #p-cradle-schemas ul,
.vector-main-menu #p-cradle-schemas ul {
list-style: none !important;
list-style-image: none !important;
list-style-type: none !important;
padding: 0 !important;
margin: 0 !important;
}
.skin-vector-2022 #p-cradle-schemas li,
.vector-main-menu #p-cradle-schemas li {
list-style: none !important;
padding: 0 !important;
margin: 0 !important;
}
.skin-vector-2022 #p-cradle-schemas li a,
.vector-main-menu #p-cradle-schemas li a {
display: flex !important;
align-items: center !important;
padding: 6px 0 !important;
color: var(--color-progressive, #36c) !important;
font-size: var(--font-size-small, 0.875rem) !important;
line-height: 1.4 !important;
text-decoration: none !important;
}
.skin-vector-2022 #p-cradle-schemas li a:hover,
.vector-main-menu #p-cradle-schemas li a:hover {
color: var(--color-progressive--hover, #3056a9) !important;
text-decoration: underline !important;
}
.skin-vector-2022 #p-cradle-schemas li a:visited,
.vector-main-menu #p-cradle-schemas li a:visited {
color: var(--color-progressive, #36c) !important;
}
/* Vector 2010 Legacy Sidebar Styling for Esquemas portlet */
.skin-vector-legacy #p-cradle-schemas {
padding-bottom: 1.5em;
direction: ltr;
}
.skin-vector-legacy #p-cradle-schemas h3,
.skin-vector-legacy #p-cradle-schemas .vector-menu-heading {
font-size: 0.75em;
color: #444;
font-weight: normal;
margin: 0.5em 0 0 0.66666667em;
padding: 0.25em 0;
cursor: default;
border: none;
background: none;
}
.skin-vector-legacy #p-cradle-schemas .body,
.skin-vector-legacy #p-cradle-schemas .vector-menu-content {
margin: 0 0 0 0.5em;
padding-top: 0;
}
.skin-vector-legacy #p-cradle-schemas ul {
list-style: none !important;
list-style-image: none !important;
list-style-type: none !important;
padding: 0 !important;
margin: 0 !important;
}
.skin-vector-legacy #p-cradle-schemas li {
line-height: 1.125em;
padding: 0.25em 0;
font-size: 0.75em;
word-wrap: break-word;
}
.skin-vector-legacy #p-cradle-schemas li a {
color: #0645ad;
text-decoration: none;
}
.skin-vector-legacy #p-cradle-schemas li a:hover {
text-decoration: underline;
}
.skin-vector-legacy #p-cradle-schemas li a:visited {
color: #0b0080;
}
/* Monobook Skin Styling for Esquemas Portlet */
.skin-monobook #p-cradle-schemas h5 {
font-size: 95%;
font-weight: normal;
white-space: nowrap;
text-transform: lowercase;
margin: 0.3em 0 0 0.5em;
}
.skin-monobook #p-cradle-schemas .pBody {
background-color: #fff;
border: 1px solid #aaa;
padding: 0 0.8em 0.3em 0.5em;
}
.skin-monobook #p-cradle-schemas ul {
line-height: 1.5em;
list-style-type: square;
font-size: 95%;
margin: 0 0 0 1.5em;
padding: 0;
}
.skin-monobook #p-cradle-schemas li a {
color: #002bb8;
text-decoration: none;
}
.skin-monobook #p-cradle-schemas li a:hover {
text-decoration: underline;
}
/* Minerva Neue / MobileFrontend Skin Styling */
.skin-minerva #cradle-heading-edit-btn {
float: none !important;
display: inline-flex !important;
align-items: center;
margin: 6px 0 !important;
height: 32px;
font-size: 0.85rem;
vertical-align: middle;
}
.skin-minerva #firstHeading {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 8px;
}
/* Responsive Drawer for mobile viewports & Minerva skin */
@media (max-width: 640px) {
.cradle-drawer {
width: 100vw !important;
max-width: 100vw !important;
right: -100vw !important;
}
.cradle-drawer.open {
right: 0 !important;
}
.cradle-drawer .wikibase-statementgroupview {
flex-direction: column !important;
}
.cradle-drawer .wikibase-statementgroupview-property {
width: 100% !important;
border-right: none !important;
border-bottom: 1px solid #c8ccd1 !important;
position: static !important;
}
}
/* Drawer Overlay */
.cradle-drawer-overlay {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.25);
z-index: 10000;
opacity: 0;
pointer-events: none;
transition: opacity 0.2s ease;
}
.cradle-drawer-overlay.open {
opacity: 1;
pointer-events: auto;
}
/* Wikimedia-styled flat side panel */
.cradle-drawer {
position: fixed;
top: 0;
right: -480px;
width: 440px;
height: 100vh;
background-color: var(--background-color-base, #ffffff);
border-left: 1px solid var(--border-color-base, #a2a9b1);
box-shadow: -4px 0 16px rgba(0, 0, 0, 0.15);
z-index: 10001;
transition: right 0.25s cubic-bezier(0.2, 0.8, 0.4, 1);
display: flex;
flex-direction: column;
color: var(--color-base, #202122);
font-family: sans-serif;
box-sizing: border-box;
}
.cradle-drawer * {
box-sizing: border-box;
}
.cradle-drawer.open {
right: 0;
}
/* Header styling */
.cradle-header {
padding: 16px 20px 12px 20px;
background-color: var(--background-color-neutral-subtle, #f8f9fa);
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.cradle-title-area {
display: flex;
flex-direction: column;
width: 100%;
}
.cradle-title {
margin: 0 0 10px 0;
font-size: 1.15rem;
font-weight: bold;
color: var(--color-base, #202122);
}
.cradle-subtitle {
margin: 2px 0 0 0;
font-size: 0.8rem;
color: var(--color-subtle, #54595d);
}
.cradle-close-btn {
background: none;
border: none;
cursor: pointer;
color: var(--color-subtle, #54595d);
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border-radius: 2px;
transition: background-color 0.1s;
}
.cradle-close-btn:hover {
background-color: rgba(0, 0, 0, 0.05);
color: var(--color-base, #202122);
}
/* Tabs Panel */
.cradle-tabs {
display: flex;
border-bottom: 1px solid var(--border-color-base, #a2a9b1);
margin-top: 0;
gap: 16px;
width: 100%;
}
/* Select/Community Tab Menu responsive styling */
.cradle-select-tabs {
display: flex;
border-bottom: 1px solid var(--border-color-base, #a2a9b1);
margin-bottom: 15px;
gap: 4px;
width: 100%;
}
.cradle-select-tab {
flex: 1;
flex-shrink: 1;
border: none;
background: none;
padding: 8px 4px;
font-size: 0.8rem;
color: var(--color-subtle, #54595d);
border-bottom: 3px solid transparent;
border-radius: 4px 4px 0 0;
cursor: pointer;
font-weight: normal;
transition: all 0.15s;
box-shadow: none;
box-sizing: border-box;
height: auto;
min-height: 38px;
text-align: center;
white-space: normal;
word-wrap: break-word;
display: flex;
align-items: center;
justify-content: center;
}
.cradle-select-tab:hover {
color: var(--color-link, #3366cc);
}
.cradle-select-tab.active {
font-weight: bold;
color: var(--color-link, #3366cc);
border-bottom: 3px solid var(--color-link, #3366cc);
}
.cradle-tab {
padding: 8px 4px;
cursor: pointer;
font-weight: bold;
font-size: 0.85rem;
color: var(--color-subtle, #54595d);
border-bottom: 2px solid transparent;
margin-bottom: -1px;
transition: all 0.15s;
}
.cradle-tab:hover {
color: var(--color-link, #3366cc);
}
.cradle-tab.active {
color: var(--color-link, #3366cc);
border-bottom-color: var(--color-link, #3366cc);
}
/* Content panel */
.cradle-content {
flex: 1;
overflow-y: auto;
padding: 16px 20px;
background-color: var(--background-color-base, #ffffff);
}
/* Selector panels */
.cradle-selector-box {
background-color: var(--background-color-neutral-subtle, #f8f9fa);
border: 1px solid var(--border-color-base, #a2a9b1);
border-radius: 2px;
padding: 16px;
margin-bottom: 16px;
}
/* Form fields cards - Flat Wikimedia styling */
.cradle-field-card {
background-color: var(--background-color-base, #ffffff);
border: 1px solid var(--border-color-base, #a2a9b1);
border-radius: 2px;
padding: 16px;
margin-bottom: 16px;
transition: border-color 0.2s ease;
position: relative;
}
.cradle-field-card:hover {
border-color: var(--border-color-progressive, #36c);
}
.cradle-field-card.mandatory {
border-left: 3px solid var(--border-color-progressive, #36c);
}
.cradle-field-card.valid {
border-left: 4px solid var(--color-success, #00af89) !important;
}
.cradle-field-card.invalid {
border-left: 4px solid var(--color-destructive, #d33) !important;
background-color: rgba(211, 51, 51, 0.01);
}
.cradle-field-card.optional-present {
border-left: 4px solid var(--color-progressive, #36c) !important;
}
.cradle-field-card.optional-missing {
border-left: 4px solid var(--color-warning, #fc3) !important;
background-color: var(--background-color-warning-subtle, #fef8ee);
}
/* Strict sizing for all SVG icons inside Cradle elements and buttons */
.cradle-drawer svg,
.cradle-modal-overlay svg,
.cdx-button svg,
.cradle-btn-secondary svg,
.cradle-btn-icon svg {
width: 1.1em !important;
height: 1.1em !important;
max-width: 20px !important;
max-height: 20px !important;
vertical-align: middle !important;
fill: currentColor;
flex-shrink: 0;
}
.cradle-field-title {
font-weight: bold;
font-size: 0.95rem;
margin: 0;
display: flex;
align-items: center;
}
.cradle-field-title a {
color: var(--color-link, #3366cc);
text-decoration: none;
transition: color 0.2s;
}
.cradle-field-title a:hover {
color: var(--color-link-hover, #447ff5);
text-decoration: underline;
}
.cradle-field-required-marker {
color: var(--color-destructive, #d33);
margin-left: 4px;
font-weight: bold;
}
.cradle-field-description {
font-size: 0.8rem;
color: var(--color-subtle, #54595d);
margin: 4px 0 12px 0;
}
/* Statement Row and Inputs */
.cradle-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
position: relative;
}
.cradle-row.deleted {
opacity: 0.4;
}
.cradle-row.deleted .cradle-input,
.cradle-row.deleted .cradle-select {
text-decoration: line-through;
pointer-events: none;
}
.cradle-input {
flex: 1;
display: block;
width: 100%;
max-width: 100%;
padding: 6px 8px;
border-radius: 2px;
border: 1px solid var(--border-color-base, #a2a9b1);
background-color: var(--background-color-base, #ffffff);
color: var(--color-base, #202122);
font-size: 0.85rem;
outline: none;
transition: border-color 0.1s, box-shadow 0.1s;
height: 36px;
box-sizing: border-box;
}
.cradle-input:focus {
border-color: var(--border-color-progressive-focus, #36c);
box-shadow: inset 0 0 0 1px var(--border-color-progressive-focus, #36c);
}
.cradle-select {
flex: 1;
display: block;
width: 100%;
max-width: 100%;
padding: 6px 8px;
border-radius: 2px;
border: 1px solid var(--border-color-base, #a2a9b1);
background-color: var(--background-color-base, #ffffff);
color: var(--color-base, #202122);
font-size: 0.85rem;
outline: none;
height: 36px;
box-sizing: border-box;
}
.cradle-select:focus {
border-color: var(--border-color-progressive-focus, #36c);
}
.cradle-lang-input {
width: 75px !important;
flex-grow: 0 !important;
}
/* Card actions */
.cradle-card-action-bar {
display: flex;
justify-content: flex-end;
margin-top: 4px;
}
.cradle-btn-text {
background: none;
border: none;
color: var(--color-link, #3366cc);
font-size: 0.8rem;
font-weight: bold;
cursor: pointer;
display: flex;
align-items: center;
gap: 4px;
padding: 4px 6px;
border-radius: 2px;
transition: background-color 0.1s;
}
.cradle-btn-text:hover {
background-color: rgba(51, 102, 204, 0.05);
color: var(--color-link-hover, #447ff5);
}
.cradle-btn-delete {
background: none;
border: 1px solid transparent;
color: var(--color-subtle, #54595d);
cursor: pointer;
padding: 6px;
border-radius: 2px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.15s;
height: 32px;
width: 32px;
}
.cradle-btn-delete:hover {
color: var(--color-destructive, #d33);
background-color: rgba(221, 51, 51, 0.05);
border-color: rgba(221, 51, 51, 0.15);
}
.cradle-row.deleted .cradle-btn-delete {
color: var(--color-progressive, #36c);
}
/* Wikibase Quality Constraints (wbqc) status styling */
.cradle-drawer .wbqc-reports-status {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 0.75rem;
color: #54595d;
background-color: #f8f9fa;
border: 1px solid #c8ccd1;
border-left: 3px solid #36c;
border-radius: 2px;
padding: 3px 8px;
margin-top: 6px;
cursor: pointer;
user-select: none;
width: fit-content;
transition: background-color 0.15s;
}
.cradle-drawer .wbqc-reports-status:hover {
background-color: #eaecf0;
color: #202122;
}
.cradle-drawer .wbqc-reports-status-suggestions {
border-left-color: #36c;
}
.cradle-drawer .wbqc-reports-status-warning {
border-left-color: #edab00;
}
/* Autocomplete dropdown list */
.cradle-autocomplete-wrapper {
position: relative;
flex: 1;
display: flex;
flex-direction: column;
}
.cradle-autocomplete-dropdown {
position: absolute;
top: 100%;
left: 0;
width: 100%;
background-color: var(--background-color-base, #ffffff);
border: 1px solid var(--border-color-base, #a2a9b1);
border-radius: 2px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
z-index: 10002;
max-height: 200px;
overflow-y: auto;
padding: 4px 0;
margin: 4px 0 0 0;
list-style: none;
}
.cradle-autocomplete-row {
padding: 6px 12px;
cursor: pointer;
transition: background-color 0.15s;
display: flex;
flex-direction: column;
color: var(--color-base, #202122);
}
.cradle-autocomplete-row:hover {
background-color: var(--background-color-neutral-subtle, #f8f9fa);
color: var(--color-link, #3366cc);
}
.cradle-autocomplete-row-label {
font-weight: bold;
font-size: 0.85rem;
}
.cradle-autocomplete-row-desc {
font-size: 0.75rem;
color: var(--color-subtle, #54595d);
margin-top: 1px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Footer buttons styling with explicit high contrast color */
.cradle-footer {
padding: 12px 20px;
border-top: 1px solid var(--border-color-base, #a2a9b1);
display: flex;
flex-direction: column;
gap: 8px;
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
.cradle-btn-primary {
flex: 1;
background-color: var(--background-color-progressive, #36c);
color: #ffffff !important; /* Forces white text inside blue button */
border: 1px solid var(--border-color-progressive, #36c);
padding: 8px 16px;
border-radius: 2px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.1s, border-color 0.1s;
font-size: 0.85rem;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
height: 36px;
box-sizing: border-box;
}
.cradle-btn-primary:hover {
background-color: var(--background-color-progressive-hover, #447ff5);
border-color: var(--border-color-progressive-hover, #447ff5);
}
.cradle-btn-primary:active {
background-color: var(--background-color-progressive-active, #2a4b8d);
border-color: var(--border-color-progressive-active, #2a4b8d);
}
.cradle-btn-primary:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.cradle-btn-secondary {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
padding: 8px 16px;
background-color: var(--background-color-base, #ffffff);
border: 1px solid var(--border-color-base, #a2a9b1);
color: var(--color-base, #202122);
border-radius: 2px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.1s, border-color 0.1s;
font-size: 0.85rem;
height: 36px;
box-sizing: border-box;
}
.cradle-btn-secondary svg, .cradle-btn-primary svg {
width: 18px;
height: 18px;
fill: currentColor;
flex-shrink: 0;
vertical-align: middle;
}
.cradle-btn-secondary:hover {
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
.cradle-btn-secondary:active {
background-color: #eaecf0;
}
/* Loading Spinner */
.cradle-spinner {
display: inline-block;
width: 14px;
height: 14px;
border: 2px solid rgba(255, 255, 255, 0.3);
border-radius: 50%;
border-top-color: white;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
/* Full page Cradle content layout styling */
.cradle-fullpage-container {
max-width: 900px;
margin: 0 auto;
padding: 20px;
font-family: sans-serif;
color: var(--color-base, #202122);
}
.cradle-fullpage-title {
margin-top: 0;
font-size: 2rem;
font-weight: normal;
border-bottom: 1px solid var(--border-color-base, #a2a9b1);
padding-bottom: 8px;
}
/* Validation UI styling */
.cradle-validation-title {
margin-top: 0;
margin-bottom: 8px;
font-size: 1.15rem;
font-weight: bold;
color: var(--color-base, #202122);
}
.cradle-validation-desc {
font-size: 0.85rem;
color: var(--color-subtle, #54595d);
margin-bottom: 16px;
}
.cradle-validation-list {
margin-top: 12px;
padding-left: 0;
list-style: none;
}
.cradle-validation-item {
display: flex;
align-items: center;
padding: 10px 14px;
border: 1px solid var(--border-color-base, #a2a9b1);
border-radius: 2px;
margin-bottom: 8px;
background-color: var(--background-color-base, #ffffff);
font-size: 0.85rem;
}
.cradle-validation-item.valid {
border-left: 4px solid var(--color-success, #00af89);
}
.cradle-validation-item.invalid {
border-left: 4px solid var(--color-destructive, #d33);
background-color: rgba(211, 51, 51, 0.02);
}
.cradle-validation-item.optional-present {
border-left: 4px solid var(--color-progressive, #36c);
}
.cradle-validation-item.optional-missing {
border-left: 4px solid var(--color-warning, #fc3);
background-color: var(--background-color-warning-subtle, #fef8ee);
}
.cradle-validation-badge {
font-weight: bold;
margin-right: 12px;
font-size: 1.2rem;
}
.cradle-card-validation-badge svg {
width: 18px;
height: 18px;
fill: currentColor;
}
.cradle-field-card.valid .cradle-card-validation-badge {
color: var(--color-success, #00af89);
}
.cradle-field-card.invalid .cradle-card-validation-badge {
color: var(--color-destructive, #d33);
}
.cradle-field-card.optional-present .cradle-card-validation-badge {
color: var(--color-progressive, #36c);
}
.cradle-field-card.optional-missing .cradle-card-validation-badge {
color: var(--color-warning, #e69138);
}
.cradle-validation-label {
flex-grow: 1;
font-weight: bold;
}
.cradle-validation-status {
font-size: 0.8rem;
color: var(--color-subtle, #54595d);
padding: 2px 6px;
border-radius: 2px;
background-color: var(--background-color-neutral-subtle, #f8f9fa);
border: 1px solid var(--border-color-base, #a2a9b1);
}
/* Schema Editor & Mode Switcher styles */
.cradle-schema-editor-header {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 12px;
margin-bottom: 16px;
padding-bottom: 12px;
border-bottom: 1px solid var(--border-color-base, #a2a9b1);
}
.cradle-mode-switcher {
display: inline-flex;
border-radius: 4px;
overflow: hidden;
border: 1px solid var(--border-color-base, #a2a9b1);
}
.cradle-mode-btn {
border: none;
background: var(--background-color-neutral-subtle, #f8f9fa);
color: var(--color-base, #202122);
padding: 6px 14px;
font-size: 0.85rem;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 6px;
font-weight: normal;
transition: all 0.15s ease;
}
.cradle-mode-btn:not(:last-child) {
border-right: 1px solid var(--border-color-base, #a2a9b1);
}
.cradle-mode-btn:hover {
background-color: var(--background-color-interactive, #eaecf0);
}
.cradle-mode-btn.active {
background-color: var(--background-color-progressive, #36c);
color: #ffffff;
font-weight: bold;
}
.cradle-ace-editor {
width: 100%;
height: 480px;
border: 1px solid var(--border-color-base, #a2a9b1);
border-radius: 4px;
font-size: 13px;
font-family: monospace;
box-sizing: border-box;
}
.cradle-shex-code-area {
width: 100%;
height: 480px;
border: 1px solid var(--border-color-base, #a2a9b1);
border-radius: 4px;
padding: 10px;
font-family: monospace;
font-size: 13px;
line-height: 1.5;
box-sizing: border-box;
background-color: var(--background-color-base, #ffffff);
color: var(--color-base, #202122);
resize: vertical;
}
.cradle-tab-badge {
font-size: 0.65rem;
text-transform: uppercase;
letter-spacing: 0.5px;
padding: 1px 4px;
border-radius: 2px;
margin-left: 6px;
font-weight: bold;
background-color: var(--background-color-neutral-subtle, #eaecf0);
color: var(--color-subtle, #54595d);
border: 1px solid var(--border-color-subtle, #c8ccd1);
vertical-align: middle;
}
.cradle-select-tab.active .cradle-tab-badge {
background-color: #eaf3ff;
color: var(--color-progressive, #36c);
border-color: #a2c8f8;
}
gp5kpersj6oum6x6038kw5xbhq084sl
Property:P100667
120
346568
806926
2026-11-09T15:43:23Z
Alexander Goldberg IL
9241
/* wbeditentity-create-property:0| */ MHM Pipeline: test.wikidata.org remap stub
806926
wikibase-property
application/json
{"type":"property","datatype":"wikibase-item","id":"P100667","labels":{"en":{"language":"en","value":"script style"}},"descriptions":[],"aliases":[],"claims":[]}
m2mooqjr7dh3xoya1w8h1oosr3plr1j
User:Danielyepezgarces/Gadget-cradle/i18n/en.json
2
346569
806927
2026-11-09T15:43:23Z
Danielyepezgarces
7347
Update en translation via Translatewiki / Cradle (v1.57.0)
806927
json
application/json
{
"@metadata": {
"authors": [
"Daniel Yepez Garces",
"Ismael Olea"
]
},
"cradle-add-language": "Add another language",
"cradle-add-prop-btn": "Add",
"cradle-add-property": "Add property",
"cradle-add-qualifier": "Add qualifier",
"cradle-add-ref-property": "Add property to reference",
"cradle-add-reference": "Add reference",
"cradle-add-value": "Add value",
"cradle-auto-cite": "Auto-fill via Citoid",
"cradle-back": "Back",
"cradle-base-schema-label": "Base schema / derivation (IMPORT)",
"cradle-base-schema-notice": "Existing base schema detected ($1). You can create a specialized derivation (e.g. Firefighter derived from Human).",
"cradle-base-schema-placeholder": "e.g. E10 (Human) or E519",
"cradle-btn-delete": "Delete",
"cradle-btn-edit": "Edit",
"cradle-btn-edit-with-cradle": "Edit with Cradle",
"cradle-btn-load": "Load",
"cradle-cancel": "Cancel",
"cradle-cardinality-1": "1 (Required, single)",
"cradle-cardinality-label": "Cardinality:",
"cradle-cardinality-opt-multi": "0..* / * (Optional, multiple)",
"cradle-cardinality-opt-single": "0..1 / ? (Optional, single)",
"cradle-cardinality-req-multi": "1..* / + (Required, multiple)",
"cradle-change-form": "Change schema",
"cradle-change-schema": "Change schema",
"cradle-citoid-loading": "Fetching metadata (Citoid)...",
"cradle-citoid-success": "Metadata loaded!",
"cradle-confirm-proceed": "Do you want to proceed anyway?",
"cradle-constraint-citation": "Statements should have at least one reference.",
"cradle-constraint-distinct": "Distinct values constraint.",
"cradle-constraint-format": "Format constraint",
"cradle-constraint-inverse": "Inverse property constraint.",
"cradle-constraint-mandatory": "Mandatory value constraint: A value for this property should be provided.",
"cradle-constraint-mandatory-alert": "Property $1 ($2) has a Wikidata mandatory value constraint.",
"cradle-constraint-single": "Single value constraint: Only one value is allowed for this property.",
"cradle-constraint-type": "Type constraint: Ensure value matches the required entity type.",
"cradle-constraints-title": "Wikidata constraints ($1)",
"cradle-coord-lat-placeholder": "e.g. 8.76 or 8°45'36\"N",
"cradle-coord-lon-placeholder": "e.g. -75.88 or 75°53'8\"W",
"cradle-coord-placeholder": "e.g. 8°45'36\"N, 75°53'8\"W or 8.76, -75.88",
"cradle-coord-precision": "Precision: $1",
"cradle-copy-shex": "Copy ShEx",
"cradle-create-custom-schema-desc": "Search for an existing EntitySchema (e.g. E10, Human) to load its claims and create a new item.",
"cradle-create-entityschema-btn": "Publish EntitySchema on Wikidata",
"cradle-create-item": "Create item",
"cradle-create-schema": "Design new schema",
"cradle-create-shex-designer": "Design / Create new EntitySchema (ShEx)",
"cradle-create-success": "Item $1 successfully created! Redirecting...",
"cradle-create-summary": "New item created with [[Wikidata:Cradle-gadget|Cradle-gadget]] (Template: $1)",
"cradle-create-tab": "Create new item",
"cradle-credits": "Created by $1 \u0026 $2. Based on $3 by $4.",
"cradle-custom-schemas": "My custom schemas (stored in user space)",
"cradle-default-edit-summary": "Update EntitySchema via Cradle",
"cradle-default-val-placeholder": "default QID/string",
"cradle-delete-schema-confirm": "Are you sure you want to delete the schema \"$1\"?",
"cradle-designer-custom-desc": "Design a new schema from scratch or by importing properties from an existing item to publish it as an EntitySchema (ShEx).",
"cradle-detected-schemas": "Detected schemas for this item:",
"cradle-direct-api-disabled-notice": "Direct API creation is currently disabled. Use Special:NewEntitySchema to create your schema.",
"cradle-edit-schema-desc": "Search for an existing EntitySchema (e.g. E10, Human) to edit its statements or ShEx code.",
"cradle-edit-summary": "Updated statements with [[Wikidata:Cradle-gadget|Cradle-gadget]] ([[EntitySchema:$1]])",
"cradle-edit-summary-label": "Summary:",
"cradle-edit-summary-placeholder": "Edit summary (e.g. Added statements)...",
"cradle-edit-tab": "Edit item",
"cradle-editing-schema-title": "Editing EntitySchema: $1",
"cradle-editor": "Cradle Editor",
"cradle-editor-unsaved-warning": "You have unsaved changes in this schema. Are you sure you want to leave?",
"cradle-enter-schema-title": "Enter or select an EntitySchema to edit this item:",
"cradle-error-at-least-one-language": "There must be at least one language.",
"cradle-export-shex": "Export ShEx (EntitySchema)",
"cradle-feedback-btn": "Feedback \u0026 bug reports",
"cradle-feedback-desc": "Have a suggestion, improvement, or found a bug in Cradle? Your report will be published as a new discussion topic on Wikidata talk:Cradle-gadget.",
"cradle-feedback-error": "Failed to post feedback: $1",
"cradle-feedback-include-diagnostics": "Include diagnostic details (Cradle version, browser, skin, page)",
"cradle-feedback-message-label": "Detailed description:",
"cradle-feedback-message-placeholder": "Describe your feedback or how to reproduce the issue in detail...",
"cradle-feedback-message-required": "Please enter a description or message.",
"cradle-feedback-open-talk-btn": "Open talk page",
"cradle-feedback-subject-label": "Subject:",
"cradle-feedback-subject-placeholder": "Brief summary of your suggestion or bug...",
"cradle-feedback-subject-required": "Please enter a subject.",
"cradle-feedback-submit-btn": "Publish",
"cradle-feedback-submitting": "Publishing to talk page...",
"cradle-feedback-success": "Feedback successfully posted to Wikidata talk:Cradle-gadget!",
"cradle-feedback-summary": "New feedback via Cradle gadget",
"cradle-feedback-title": "Suggestions and bug reports",
"cradle-feedback-type-bug": "Bug report",
"cradle-feedback-type-congratulations": "Congratulations",
"cradle-feedback-type-label": "Type:",
"cradle-feedback-type-question": "Question / general comment",
"cradle-feedback-type-suggestion": "Suggestion / feature request",
"cradle-fetching-wikidata-recoin": "Querying Wikidata and Recoin API...",
"cradle-hardselect-label": "Fixed options (Hardselect)",
"cradle-hardselect-placeholder": "hardselect QIDs (comma-separated, e.g. Q5,Q6)",
"cradle-import-from-item": "Import from item",
"cradle-importer-p106-available-badge": "No previous schema",
"cradle-importer-p106-no-schema": "No previous schema detected for this occupation (Ideal for new specialized schema).",
"cradle-importer-p106-schema-exists": "Existing schema detected for this occupation ($1). Review existing schema to avoid duplicates.",
"cradle-importer-select-occupation": "Select occupation:",
"cradle-importer-sort-alphabetical": "Alphabetical (A → Z)",
"cradle-importer-sort-label": "Sort properties:",
"cradle-importer-sort-pid": "Property ID (P1 → P...)",
"cradle-importer-sort-recoin": "Recoin frequency (highest first)",
"cradle-importer-target-mode-label": "Schema target type:",
"cradle-importer-target-p106": "Occupation specialization (P106)",
"cradle-importer-target-p31": "General class (P31)",
"cradle-label-required": "New item label is required!",
"cradle-link-p12861-checkbox": "Link schema to associated class ($1) via P12861 upon creation",
"cradle-link-p12861-derivation-skip": "P12861 will not be added to the target class because this schema is a derivation.",
"cradle-link-p12861-summary": "Add EntitySchema $1 (P12861) via Cradle",
"cradle-load-and-edit-schema": "Load schema for editing",
"cradle-load-item-btn": "Load item",
"cradle-load-schema": "Load schema",
"cradle-load-schema-error": "Error loading schema",
"cradle-loading-item": "Loading...",
"cradle-loading-schema": "Loading schema $1...",
"cradle-loading-templates": "Loading templates from Wikidata:Cradle...",
"cradle-login-required-schema": "Log in to create custom schemas.",
"cradle-mandatory-error": "Property $1 ($2) is mandatory!",
"cradle-method-predefined": "Use a predefined Cradle form",
"cradle-method-schema": "Use an EntitySchema ID (ShEx)",
"cradle-missing-optional-prop": "Optional schema property",
"cradle-missing-required-prop": "Required by schema (missing)",
"cradle-mode-code": "Code mode (ShEx)",
"cradle-mode-visual": "Visual mode (GUI)",
"cradle-monolingual-text-placeholder": "Text in language...",
"cradle-native-schema-title": "EntitySchema compliance",
"cradle-new-item-aliases": "Aliases (pipe-separated |, e.g. Marie Curie | Curie, Marie)...",
"cradle-new-item-desc": "Enter item description (e.g. Polish-French physicist)...",
"cradle-new-item-identity": "New item identity",
"cradle-new-item-identity-desc": "Provide the label and description for the new Wikidata item.",
"cradle-new-item-label": "Enter item label (e.g. Marie Curie)...",
"cradle-no-changes": "No changes detected!",
"cradle-no-custom-schemas": "You have no custom schemas yet.",
"cradle-no-results": "No schemas found.",
"cradle-open-created-schema": "View EntitySchema ($1)",
"cradle-open-newentityschema": "Go to Special:NewEntitySchema",
"cradle-or-enter-schema": "Or enter another EntitySchema ID:",
"cradle-orgroup-label": "Alternative group (OR):",
"cradle-preset-none": "No predefined values",
"cradle-prop-invalid-id": "Invalid property ID (e.g. P17)!",
"cradle-prop-placeholder": "e.g. P17",
"cradle-prop-search-placeholder": "Search property by name or PID (e.g. P17, country)",
"cradle-properties-list": "Form properties list:",
"cradle-publish-shex-failed": "Failed to publish EntitySchema: $1",
"cradle-publish-shex-success": "EntitySchema $1 published successfully on Wikidata!",
"cradle-publishing-shex": "Publishing EntitySchema to Wikidata...",
"cradle-qualifiers": "Qualifiers",
"cradle-rank": "Rank",
"cradle-rank-deprecated": "Deprecated",
"cradle-rank-normal": "Normal",
"cradle-rank-preferred": "Preferred",
"cradle-ref-url-placeholder": "Enter URL, DOI, ISBN or PMID...",
"cradle-references": "References",
"cradle-remove-qualifier": "Remove qualifier",
"cradle-remove-reference": "Remove reference",
"cradle-required-checkbox": "Required",
"cradle-save-changes": "Save changes",
"cradle-save-error": "Error saving item: $1",
"cradle-save-schema": "Save schema",
"cradle-save-schema-failed": "Failed to save schema: $1",
"cradle-save-schema-success": "EntitySchema $1 updated successfully on Wikidata!",
"cradle-save-success": "Claims successfully updated! Reloading...",
"cradle-saving-schema": "Saving changes to EntitySchema...",
"cradle-schema-aliases-placeholder": "Schema aliases (pipe-separated |, e.g. stadium | arena)...",
"cradle-schema-deleted": "Schema deleted successfully.",
"cradle-schema-desc": "Description",
"cradle-schema-desc-placeholder": "Schema description (e.g. Schema for football stadiums)...",
"cradle-schema-designer": "Cradle Schema Designer",
"cradle-schema-edit-loss-warning": "Switching to Visual mode will update properties from the ShEx code. Proceed?",
"cradle-schema-exists-custom": "A custom schema already exists for $1: \"$2\".",
"cradle-schema-exists-matched": "An existing EntitySchema was found for $1: $2 ($3).",
"cradle-schema-exists-notice": "Schema already exists",
"cradle-schema-exists-p12861": "An EntitySchema is already linked to $1 ($2) via P12861: $3.",
"cradle-schema-form-not-found": "Special:NewEntitySchema form was not found. Check your account permissions.",
"cradle-schema-linked-p12861-failed": "Could not link P12861 to $1: $2",
"cradle-schema-linked-p12861-notice": "Property P12861 successfully added to $1",
"cradle-schema-linked-p12861-success": "EntitySchema $1 linked to $2 via P12861!",
"cradle-schema-load-form-failed": "Could not load Special:NewEntitySchema.",
"cradle-schema-not-found": "Could not find the schema on the page!",
"cradle-schema-placeholder": "Search EntitySchema by name or ID (e.g. E10, Human)...",
"cradle-schema-prop-required": "You must add at least one property to the schema!",
"cradle-schema-saved": "Schema saved successfully.",
"cradle-schema-search-placeholder": "Search EntitySchema by name or ID (e.g. E10, Human)...",
"cradle-schema-target-item-label": "Associated class/item",
"cradle-schema-target-item-placeholder": "e.g. Q483110 (Stadium) or Q5 (Human)",
"cradle-schema-title": "Schema title",
"cradle-schema-title-required": "Schema title is required!",
"cradle-search-btn": "Search",
"cradle-search-community": "Search community schemas",
"cradle-search-placeholder": "Search item...",
"cradle-search-placeholder-community": "Search user schemas...",
"cradle-search-results": "Search Results:",
"cradle-search-value-placeholder": "Search QID to add...",
"cradle-searching": "Searching...",
"cradle-select-all": "Select all",
"cradle-select-p31-class": "Select associated class (P31) for this schema:",
"cradle-select-predefined": "-- Select a predefined form --",
"cradle-select-props-to-import": "Select properties to import:",
"cradle-set-as-base-schema-btn": "Set $1 as base schema for derivation",
"cradle-shex-copied-auto": "All ShEx code selected and copied to clipboard!",
"cradle-shex-invalid": "Invalid ShEx syntax:",
"cradle-shex-preview": "Generated ShEx (EntitySchema)",
"cradle-shex-syntax-invalid": "Invalid ShEx syntax: $1",
"cradle-shex-syntax-valid": "Valid ShEx syntax",
"cradle-shex-valid": "Valid ShEx syntax for Wikidata",
"cradle-sidebar-create-schema": "Create a new schema",
"cradle-sidebar-edit-schema": "Edit a schema",
"cradle-sidebar-feedback": "Feedback \u0026 bug reports",
"cradle-sidebar-header": "Schemas",
"cradle-sidebar-random-schema": "Random schema",
"cradle-sidebar-recent-schemas": "Recent changes",
"cradle-softselect-label": "Free suggestions (Softselect)",
"cradle-softselect-placeholder": "softselect QIDs (comma-separated, e.g. Q5,Q6)",
"cradle-special-title": "Cradle - Wikidata Schema Editor",
"cradle-subshape-classes-hint": "Allowed classes (wdt:P31) for internal sub-schema:",
"cradle-subshape-external-id-label": "External EntitySchema ID:",
"cradle-subshape-external-id-placeholder": "e.g. E10 or E10#country",
"cradle-subshape-mode-external": "External EntitySchema (IMPORT E...)",
"cradle-subshape-mode-internal": "Internal in this schema (@\u003CSubShape\u003E)",
"cradle-subshape-mode-label": "Sub-schema source:",
"cradle-subshape-name-label": "Sub-schema name:",
"cradle-subshape-name-placeholder": "Sub-schema name (e.g. country or ConservationStatus)",
"cradle-subtitle": "Modify entity claims using schemas",
"cradle-summary-create-update-schema": "Created/Updated Cradle schema: $1",
"cradle-tab-create-item": "Create items",
"cradle-tab-design-schema": "Design schemas",
"cradle-tab-edit-schema": "Edit schemas",
"cradle-tab-edit-schema-badge": "Experimental",
"cradle-tab-predefined": "Predefined form",
"cradle-tab-shex": "EntitySchema (ShEx)",
"cradle-use-base-schema-checkbox": "Set $1 as base schema for this derivation",
"cradle-user-menu-btn": "Create new item with Cradle",
"cradle-val-err-coords": "Invalid coordinates (-90 to 90 lat, -180 to 180 lon)",
"cradle-val-err-max": "At most $1 {{PLURAL:$1|value|values}} allowed",
"cradle-val-err-min": "Needs at least $1 {{PLURAL:$1|value|values}}",
"cradle-val-err-num": "Invalid number: $1",
"cradle-val-err-qid": "Invalid QID: $1",
"cradle-val-missing": "Missing!",
"cradle-val-optional-missing": "Optional (Not set)",
"cradle-val-optional-present": "Optional (Present)",
"cradle-val-present": "Present",
"cradle-validate-shex-btn": "Validate syntax",
"cradle-validation-error": "Please fix the following validation errors:\n\n",
"cradle-validation-summary": "Validation result for $1: $2 of $3 required {{PLURAL:$3|property|properties}} and $4 of $5 optional {{PLURAL:$5|property|properties}} present.",
"cradle-validation-tab": "Validation",
"cradle-validation-title": "Schema validation status",
"cradle-valtype-datetime": "Date / time (xsd:dateTime)",
"cradle-valtype-decimal": "Number / quantity (xsd:decimal)",
"cradle-valtype-geo": "Coordinates (geo:wktLiteral)",
"cradle-valtype-label": "Value type:",
"cradle-valtype-langstring": "Monolingual text (rdf:langString)",
"cradle-valtype-qid": "Wikidata item (QID)",
"cradle-valtype-string": "Free text (xsd:string)",
"cradle-valtype-subshape": "Sub-schema (@\u003CSubShape\u003E)",
"cradle-view-on-map": "View on map"
}
hvqq9ggjvwhqojkd3dka71vcem4jaw8
User:Danielyepezgarces/Gadget-cradle/i18n/es.json
2
346570
806928
2026-11-09T15:43:24Z
Danielyepezgarces
7347
Update es translation via Translatewiki / Cradle (v1.57.0)
806928
json
application/json
{
"@metadata": {
"authors": [
"Daniel Yepez Garces",
"Ismael Olea"
]
},
"cradle-add-language": "Añadir otro idioma",
"cradle-add-prop-btn": "Añadir",
"cradle-add-property": "Añadir propiedad",
"cradle-add-qualifier": "Añadir cualificador",
"cradle-add-ref-property": "Añadir propiedad a referencia",
"cradle-add-reference": "Añadir referencia",
"cradle-add-value": "Añadir valor",
"cradle-auto-cite": "Autocompletar vía Citoid",
"cradle-back": "Volver",
"cradle-base-schema-label": "Esquema base / Derivación (IMPORT)",
"cradle-base-schema-notice": "Esquema base existente detectado ($1). Puedes crear una derivación especializada (ej. Bombero derivado de Humano).",
"cradle-base-schema-placeholder": "ej. E10 (Humano) o E519",
"cradle-btn-delete": "Eliminar",
"cradle-btn-edit": "Editar",
"cradle-btn-edit-with-cradle": "Editar con Cradle",
"cradle-btn-load": "Cargar",
"cradle-cancel": "Cancelar",
"cradle-cardinality-1": "1 (Obligatorio, único)",
"cradle-cardinality-label": "Cardinalidad:",
"cradle-cardinality-opt-multi": "0..* / * (Opcional, múltiple)",
"cradle-cardinality-opt-single": "0..1 / ? (Opcional, único)",
"cradle-cardinality-req-multi": "1..* / + (Obligatorio, múltiple)",
"cradle-change-form": "Cambiar esquema",
"cradle-change-schema": "Cambiar esquema",
"cradle-citoid-loading": "Obteniendo metadatos (Citoid)...",
"cradle-citoid-success": "¡Metadatos cargados!",
"cradle-confirm-proceed": "¿Deseas continuar de todos modos?",
"cradle-constraint-citation": "Las declaraciones deben tener al menos una referencia.",
"cradle-constraint-distinct": "Restricción de valores distintos.",
"cradle-constraint-format": "Restricción de formato",
"cradle-constraint-inverse": "Restricción de propiedad inversa.",
"cradle-constraint-mandatory": "Restricción de valor obligatorio: Se debe proporcionar un valor para esta propiedad.",
"cradle-constraint-mandatory-alert": "La propiedad $1 ($2) tiene una restricción de valor obligatorio en Wikidata.",
"cradle-constraint-single": "Restricción de valor único: Solo se permite un único valor para esta propiedad.",
"cradle-constraint-type": "Restricción de tipo de entidad: Verifique que el valor sea del tipo de entidad requerido.",
"cradle-constraints-title": "Restricciones de Wikidata ($1)",
"cradle-coord-lat-placeholder": "ej. 8.76 u 8°45'36\"N",
"cradle-coord-lon-placeholder": "ej. -75.88 o 75°53'8\"W",
"cradle-coord-placeholder": "ej. 8°45'36\"N, 75°53'8\"W u 8.76, -75.88",
"cradle-coord-precision": "Precisión: $1",
"cradle-copy-shex": "Copiar ShEx",
"cradle-create-custom-schema-desc": "Busca un EntitySchema existente (ej. E10, Humano) para cargar sus declaraciones y crear un nuevo elemento.",
"cradle-create-entityschema-btn": "Publicar EntitySchema en Wikidata",
"cradle-create-item": "Crear elemento",
"cradle-create-schema": "Diseñar nuevo esquema",
"cradle-create-shex-designer": "Diseñar / Crear nuevo EntitySchema (ShEx)",
"cradle-create-success": "¡Elemento $1 creado con éxito! Redirigiendo...",
"cradle-create-summary": "Nuevo elemento creado con [[Wikidata:Cradle-gadget|Cradle-gadget]] (Plantilla: $1)",
"cradle-create-tab": "Crear nuevo",
"cradle-credits": "Creado por $1 y $2. Basado en $3 de $4.",
"cradle-custom-schemas": "Mis esquemas personalizados",
"cradle-default-edit-summary": "Actualización de EntitySchema vía Cradle",
"cradle-default-val-placeholder": "valor/QID por defecto",
"cradle-delete-schema-confirm": "¿Estás seguro de que deseas eliminar el esquema \"$1\"?",
"cradle-designer-custom-desc": "Diseña un nuevo esquema desde cero o importando propiedades de un elemento existente para publicarlo en Wikidata como un EntitySchema (ShEx).",
"cradle-detected-schemas": "Esquemas detectados para este elemento:",
"cradle-direct-api-disabled-notice": "La publicación directa por API está deshabilitada temporalmente. Usa Special:NewEntitySchema para crear tu esquema.",
"cradle-edit-schema-desc": "Busca un EntitySchema existente (ej. E10, Humano) para editar sus declaraciones o código ShEx.",
"cradle-edit-summary": "Declaraciones actualizadas con [[Wikidata:Cradle-gadget|Cradle-gadget]] ([[EntitySchema:$1]])",
"cradle-edit-summary-label": "Resumen:",
"cradle-edit-summary-placeholder": "Resumen de edición (ej. Declaraciones añadidas)...",
"cradle-edit-tab": "Editar elemento",
"cradle-editing-schema-title": "Editando EntitySchema: $1",
"cradle-editor": "Editor Cradle",
"cradle-editor-unsaved-warning": "Tienes cambios no guardados en este esquema. ¿Seguro que deseas salir?",
"cradle-enter-schema-title": "Introduce o selecciona un EntitySchema para editar este elemento:",
"cradle-error-at-least-one-language": "Debe haber al menos un idioma.",
"cradle-export-shex": "Exportar ShEx (EntitySchema)",
"cradle-feedback-btn": "Sugerencias y reporte de errores",
"cradle-feedback-desc": "¿Tienes una sugerencia, mejora o encontraste un error en Cradle? Tu mensaje se publicará como un nuevo tema de discusión en Wikidata talk:Cradle-gadget.",
"cradle-feedback-error": "Error al publicar en la página de discusión: $1",
"cradle-feedback-include-diagnostics": "Incluir información técnica de diagnóstico (versión de Cradle, navegador, apariencia, página)",
"cradle-feedback-message-label": "Descripción detallada:",
"cradle-feedback-message-placeholder": "Describe tu sugerencia detalladamente o los pasos para reproducir el error...",
"cradle-feedback-message-required": "Por favor, introduce una descripción o mensaje.",
"cradle-feedback-open-talk-btn": "Abrir página de discusión",
"cradle-feedback-subject-label": "Asunto:",
"cradle-feedback-subject-placeholder": "Resumen breve de tu sugerencia o error...",
"cradle-feedback-subject-required": "Por favor, introduce un asunto.",
"cradle-feedback-submit-btn": "Publicar",
"cradle-feedback-submitting": "Publicando en la página de discusión...",
"cradle-feedback-success": "¡Mensaje publicado con éxito en Wikidata talk:Cradle-gadget!",
"cradle-feedback-summary": "Nuevo mensaje vía Cradle gadget",
"cradle-feedback-title": "Sugerencias y reporte de errores",
"cradle-feedback-type-bug": "Reporte de error (Bug)",
"cradle-feedback-type-congratulations": "Felicitaciones",
"cradle-feedback-type-label": "Tipo:",
"cradle-feedback-type-question": "Pregunta / Comentario general",
"cradle-feedback-type-suggestion": "Sugerencia / Nueva función",
"cradle-fetching-wikidata-recoin": "Consultando Wikidata y Recoin API...",
"cradle-hardselect-label": "Opciones fijas (Hardselect)",
"cradle-hardselect-placeholder": "QIDs predefinidos (separados por coma, ej. Q5,Q6)",
"cradle-import-from-item": "Importar desde elemento",
"cradle-importer-p106-available-badge": "Sin esquema previo",
"cradle-importer-p106-no-schema": "Sin esquema previo para esta ocupación (Ideal para crear un nuevo esquema derivado).",
"cradle-importer-p106-schema-exists": "Se detectó un esquema existente para esta ocupación ($1). Revisa el esquema existente para evitar duplicados.",
"cradle-importer-select-occupation": "Selecciona la ocupación:",
"cradle-importer-sort-alphabetical": "Alfabético (A → Z)",
"cradle-importer-sort-label": "Ordenar propiedades:",
"cradle-importer-sort-pid": "Identificador (P1 → P...)",
"cradle-importer-sort-recoin": "Frecuencia Recoin (mayor a menor)",
"cradle-importer-target-mode-label": "Tipo de objetivo para el esquema:",
"cradle-importer-target-p106": "Especialización por ocupación (P106)",
"cradle-importer-target-p31": "Clase general (P31)",
"cradle-label-required": "¡La etiqueta del nuevo elemento es obligatoria!",
"cradle-link-p12861-checkbox": "Vincular esquema a la clase asociada ($1) mediante P12861 al publicar",
"cradle-link-p12861-derivation-skip": "No se añadirá P12861 a la clase asociada porque este esquema es una derivación.",
"cradle-link-p12861-summary": "Añadir EntitySchema $1 (P12861) mediante Cradle",
"cradle-load-and-edit-schema": "Cargar esquema para editar",
"cradle-load-item-btn": "Cargar elemento",
"cradle-load-schema": "Cargar esquema",
"cradle-load-schema-error": "Error al cargar o renderizar el esquema",
"cradle-loading-item": "Cargando...",
"cradle-loading-schema": "Cargando el esquema $1...",
"cradle-loading-templates": "Cargando plantillas desde Wikidata:Cradle...",
"cradle-login-required-schema": "Inicie sesión para crear esquemas personalizados.",
"cradle-mandatory-error": "¡La propiedad $1 ($2) es obligatoria!",
"cradle-method-predefined": "Usar un formulario predefinido de Cradle",
"cradle-method-schema": "Usar un ID de EntitySchema (ShEx)",
"cradle-missing-optional-prop": "Propiedad opcional del esquema",
"cradle-missing-required-prop": "Requerida por esquema (faltante)",
"cradle-mode-code": "Modo código (ShEx)",
"cradle-mode-visual": "Modo visual (GUI)",
"cradle-monolingual-text-placeholder": "Texto en idioma...",
"cradle-native-schema-title": "Cumplimiento de EntitySchema",
"cradle-new-item-aliases": "Alias (separados por plecas |, ej. Marie Curie | Curie, Marie)...",
"cradle-new-item-desc": "Introduce la descripción del elemento (ej. física polaca-francesa)...",
"cradle-new-item-identity": "Identidad del nuevo elemento",
"cradle-new-item-identity-desc": "Proporciona la etiqueta y descripción para el nuevo elemento de Wikidata.",
"cradle-new-item-label": "Introduce la etiqueta del elemento (ej. Marie Curie)...",
"cradle-no-changes": "¡No se detectaron cambios!",
"cradle-no-custom-schemas": "Aún no tienes esquemas personalizados creados.",
"cradle-no-results": "No se encontraron esquemas.",
"cradle-open-created-schema": "Ver EntitySchema ($1)",
"cradle-open-newentityschema": "Ir a Special:NewEntitySchema",
"cradle-or-enter-schema": "O introduce otro ID de EntitySchema:",
"cradle-orgroup-label": "Grupo alternativo (OR):",
"cradle-preset-none": "Sin valores predefinidos",
"cradle-prop-invalid-id": "¡ID de propiedad inválido (ej. P17)!",
"cradle-prop-placeholder": "ej. P17",
"cradle-prop-search-placeholder": "Buscar propiedad por nombre o PID (ej. P17, país)",
"cradle-properties-list": "Lista de propiedades del formulario:",
"cradle-publish-shex-failed": "Error al publicar EntitySchema: $1",
"cradle-publish-shex-success": "¡EntitySchema $1 publicado con éxito en Wikidata!",
"cradle-publishing-shex": "Publicando EntitySchema en Wikidata...",
"cradle-qualifiers": "Cualificadores",
"cradle-rank": "Rango",
"cradle-rank-deprecated": "En desuso",
"cradle-rank-normal": "Normal",
"cradle-rank-preferred": "Preferido",
"cradle-ref-url-placeholder": "Ingresar URL, DOI, ISBN o PMID...",
"cradle-references": "Referencias",
"cradle-remove-qualifier": "Eliminar cualificador",
"cradle-remove-reference": "Eliminar referencia",
"cradle-required-checkbox": "Obligatorio",
"cradle-save-changes": "Guardar cambios",
"cradle-save-error": "Error al guardar el elemento: $1",
"cradle-save-schema": "Guardar esquema",
"cradle-save-schema-failed": "Error al guardar el esquema: $1",
"cradle-save-schema-success": "¡EntitySchema $1 actualizado con éxito en Wikidata!",
"cradle-save-success": "¡Declaraciones actualizadas con éxito! Recargando...",
"cradle-saving-schema": "Guardando cambios en el EntitySchema...",
"cradle-schema-aliases-placeholder": "Alias del esquema separados por plecas (ej. estadio | cancha)...",
"cradle-schema-deleted": "Esquema eliminado correctamente.",
"cradle-schema-desc": "Descripción",
"cradle-schema-desc-placeholder": "Descripción del esquema (ej. Esquema para estadios de fútbol)...",
"cradle-schema-designer": "Diseñador de esquemas de Cradle",
"cradle-schema-edit-loss-warning": "Cambiar al modo visual actualizará las propiedades a partir del código ShEx. ¿Deseas continuar?",
"cradle-schema-exists-custom": "Ya existe un esquema personalizado para $1: «$2».",
"cradle-schema-exists-matched": "Se encontró un EntitySchema existente para $1: $2 ($3).",
"cradle-schema-exists-notice": "El esquema ya existe",
"cradle-schema-exists-p12861": "Ya hay un EntitySchema vinculado a $1 ($2) mediante P12861: $3.",
"cradle-schema-form-not-found": "No se encontró el formulario de Special:NewEntitySchema. Comprueba los permisos de tu cuenta.",
"cradle-schema-linked-p12861-failed": "No se pudo vincular P12861 a $1: $2",
"cradle-schema-linked-p12861-notice": "Propiedad P12861 añadida exitosamente a $1",
"cradle-schema-linked-p12861-success": "¡EntitySchema $1 vinculado a $2 mediante P12861!",
"cradle-schema-load-form-failed": "No se pudo cargar Special:NewEntitySchema.",
"cradle-schema-not-found": "¡No se pudo encontrar el esquema en la página!",
"cradle-schema-placeholder": "Buscar EntitySchema por nombre o ID (ej. E10, Humano)...",
"cradle-schema-prop-required": "¡Debe añadir al menos una propiedad al esquema!",
"cradle-schema-saved": "Esquema guardado correctamente.",
"cradle-schema-search-placeholder": "Buscar EntitySchema por nombre o ID (ej. E10, Humano)...",
"cradle-schema-target-item-label": "Elemento asociado",
"cradle-schema-target-item-placeholder": "Ej: Q483110 (Estadio) o Q5 (Humano)",
"cradle-schema-title": "Título del esquema",
"cradle-schema-title-required": "¡El título del esquema es requerido!",
"cradle-search-btn": "Buscar",
"cradle-search-community": "Buscar esquemas de otros usuarios",
"cradle-search-placeholder": "Buscar elemento...",
"cradle-search-placeholder-community": "Buscar esquemas de usuarios...",
"cradle-search-results": "Resultados de búsqueda:",
"cradle-search-value-placeholder": "Buscar QID de valor para añadir...",
"cradle-searching": "Buscando...",
"cradle-select-all": "Seleccionar todas",
"cradle-select-p31-class": "Seleccione la clase asociada (P31) para este esquema:",
"cradle-select-predefined": "-- Selecciona un formulario predefinido --",
"cradle-select-props-to-import": "Selecciona las propiedades a importar:",
"cradle-set-as-base-schema-btn": "Establecer $1 como esquema base para derivación",
"cradle-shex-copied-auto": "¡Todo el código ShEx fue seleccionado y copiado al portapapeles!",
"cradle-shex-invalid": "Sintaxis ShEx no válida:",
"cradle-shex-preview": "Código ShEx generado (EntitySchema)",
"cradle-shex-syntax-invalid": "Sintaxis ShEx inválida: $1",
"cradle-shex-syntax-valid": "Sintaxis ShEx válida",
"cradle-shex-valid": "Sintaxis ShEx válida para Wikidata",
"cradle-sidebar-create-schema": "Crear un esquema nuevo",
"cradle-sidebar-edit-schema": "Editar un esquema",
"cradle-sidebar-feedback": "Sugerencias y errores",
"cradle-sidebar-header": "Esquemas",
"cradle-sidebar-random-schema": "Esquema aleatorio",
"cradle-sidebar-recent-schemas": "Cambios recientes",
"cradle-softselect-label": "Sugerencias libres (Softselect)",
"cradle-softselect-placeholder": "sugerencias de QIDs (separados por coma, ej. Q5,Q6)",
"cradle-special-title": "Cradle - Wikidata Schema Editor",
"cradle-subshape-classes-hint": "Clases permitidas (wdt:P31) para el sub-esquema interno:",
"cradle-subshape-external-id-label": "ID del EntitySchema externo:",
"cradle-subshape-external-id-placeholder": "ej. E10 o E10#country",
"cradle-subshape-mode-external": "EntitySchema externo (IMPORT E...)",
"cradle-subshape-mode-internal": "Interno en este esquema (@\u003CSubForma\u003E)",
"cradle-subshape-mode-label": "Origen del sub-esquema:",
"cradle-subshape-name-label": "Nombre del sub-esquema:",
"cradle-subshape-name-placeholder": "Nombre del sub-esquema (ej. country o EstadoConservacion)",
"cradle-subtitle": "Modificar declaraciones utilizando esquemas",
"cradle-summary-create-update-schema": "Creado/Actualizado esquema de Cradle: $1",
"cradle-tab-create-item": "Crear elementos",
"cradle-tab-design-schema": "Diseñar esquemas",
"cradle-tab-edit-schema": "Editar esquemas",
"cradle-tab-edit-schema-badge": "Experimental",
"cradle-tab-predefined": "Formulario predefinido",
"cradle-tab-shex": "EntitySchema (ShEx)",
"cradle-use-base-schema-checkbox": "Establecer $1 como esquema base para esta derivación",
"cradle-user-menu-btn": "Crear elemento nuevo con Cradle",
"cradle-val-err-coords": "Coordenadas geográficas inválidas (-90 a 90 lat, -180 a 180 lon)",
"cradle-val-err-max": "Se {{PLURAL:$1|permite como máximo $1 valor|permiten como máximo $1 valores}}",
"cradle-val-err-min": "Requiere al menos $1 {{PLURAL:$1|valor|valores}}",
"cradle-val-err-num": "Número no válido: $1",
"cradle-val-err-qid": "QID no válido: $1",
"cradle-val-missing": "¡Falta!",
"cradle-val-optional-missing": "Opcional (Sin establecer)",
"cradle-val-optional-present": "Opcional (Presente)",
"cradle-val-present": "Presente",
"cradle-validate-shex-btn": "Validar sintaxis",
"cradle-validation-error": "Por favor, corrige los siguientes errores de validación:\n\n",
"cradle-validation-summary": "Resultado de la validación para $1: $2 de $3 {{PLURAL:$3|propiedad requerida|propiedades requeridas}} y $4 de $5 {{PLURAL:$5|propiedad opcional|propiedades opcionales}} presentes.",
"cradle-validation-tab": "Validación",
"cradle-validation-title": "Estado de validación de esquema",
"cradle-valtype-datetime": "Fecha / Tiempo (xsd:dateTime)",
"cradle-valtype-decimal": "Número / Medida (xsd:decimal)",
"cradle-valtype-geo": "Coordenadas (geo:wktLiteral)",
"cradle-valtype-label": "Tipo de valor:",
"cradle-valtype-langstring": "Texto en idioma (rdf:langString)",
"cradle-valtype-qid": "Elemento Wikidata (QID)",
"cradle-valtype-string": "Texto libre (xsd:string)",
"cradle-valtype-subshape": "Sub-esquema (@\u003CSubForma\u003E)",
"cradle-view-on-map": "Ver en mapa"
}
g83sqzlgt2jiicea19h48fwd3c81lm4
User:Danielyepezgarces/common.js
2
346571
806929
2026-11-09T15:43:25Z
Danielyepezgarces
7347
Set loader to Gadget-cradle-dev.js version 1.57.0 (dev)
806929
javascript
text/javascript
// User:Danielyepezgarces/common.js
// Cradle Wikidata Gadget Loader (DEV release on test.wikidata.org)
mw.loader.load("//test.wikidata.org/w/index.php?title=User:Danielyepezgarces/Gadget-cradle-dev.js&action=raw&ctype=text/javascript&version=1.57.0");
mbbi25hdabla1zg3co0miu5omogom9k
Q254693
0
346572
806930
2026-11-09T15:43:27Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806930
wikibase-item
application/json
{"type":"item","id":"Q254693","labels":{"en":{"language":"en","value":"manuscript codex"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q123172729"}},"aliases":[],"claims":[],"sitelinks":[]}
afahvl1nwvxac8yqnvrqbab429bn4np
Property:P100670
120
346573
806931
2026-11-09T15:43:29Z
Alexander Goldberg IL
9241
/* wbeditentity-create-property:0| */ MHM Pipeline: test.wikidata.org remap stub
806931
wikibase-property
application/json
{"type":"property","datatype":"wikibase-item","id":"P100670","labels":{"en":{"language":"en","value":"location of creation"}},"descriptions":[],"aliases":[],"claims":[]}
bjdkvvkbgge53uy1p6cyq43zxeqzxj0
Property:P100672
120
346574
806932
2026-11-09T15:43:32Z
Alexander Goldberg IL
9241
/* wbeditentity-create-property:0| */ MHM Pipeline: test.wikidata.org remap stub
806932
wikibase-property
application/json
{"type":"property","datatype":"string","id":"P100672","labels":{"en":{"language":"en","value":"catalog code (MHM string)"}},"descriptions":[],"aliases":[],"claims":[]}
qppeder0lfg76nqfssqttxdosb1jeb2
Q254694
0
346575
806933
2026-11-09T15:43:33Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806933
wikibase-item
application/json
{"type":"item","id":"Q254694","labels":{"en":{"language":"en","value":"digitized collection"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q60474998"}},"aliases":[],"claims":[],"sitelinks":[]}
00v2p0vq9xlu7856z5jg2w2xry8a71s
Q254698
0
346576
806934
2026-11-09T15:43:44Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806934
wikibase-item
application/json
{"type":"item","id":"Q254698","labels":{"en":{"language":"en","value":"Latin script"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q8229"}},"aliases":[],"claims":[],"sitelinks":[]}
nxpd37y55j2bi10msnfk6cwmoukw9d0
Q254703
0
346577
806935
2026-11-09T15:43:53Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806935
wikibase-item
application/json
{"type":"item","id":"Q254703","labels":{"en":{"language":"en","value":"Yemenite Script (hebrew script)"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q121094936"}},"aliases":[],"claims":[],"sitelinks":[]}
0uozbb57o8fnjufb3c26y8ldotvi8ue
Q254707
0
346578
806936
2026-11-09T15:43:59Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806936
wikibase-item
application/json
{"type":"item","id":"Q254707","labels":{"en":{"language":"en","value":"Yemen"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q805"}},"aliases":[],"claims":[],"sitelinks":[]}
rj6ymwk9kbrcy5oys7jksoaw5wjz8rt
Q254714
0
346579
806937
2026-11-09T15:44:10Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806937
wikibase-item
application/json
{"type":"item","id":"Q254714","labels":{"en":{"language":"en","value":"Amsterdam"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q727"}},"aliases":[],"claims":[],"sitelinks":[]}
1hriifaow93r2ctlr2ifi2koq5irkz3
Q254715
0
346580
806938
2026-11-09T15:44:11Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806938
wikibase-item
application/json
{"type":"item","id":"Q254715","labels":{"en":{"language":"en","value":"Karaite Judaism"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q208398"}},"aliases":[],"claims":[],"sitelinks":[]}
g1h85mgrhkzqrep095qvgxt2lavepl3
Q254718
0
346581
806939
2026-11-09T15:44:15Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806939
wikibase-item
application/json
{"type":"item","id":"Q254718","labels":{"en":{"language":"en","value":"autograph"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q9026959"}},"aliases":[],"claims":[],"sitelinks":[]}
03hhtsdf7fn1owr5o8n3nzzmwa9ynxr
Q254719
0
346582
806940
2026-11-09T15:44:17Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806940
wikibase-item
application/json
{"type":"item","id":"Q254719","labels":{"en":{"language":"en","value":"Elkan Nathan Adler"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q1170731"}},"aliases":[],"claims":[],"sitelinks":[]}
ncnl6qkv1j6yo9bumccv6rniwt8h7ah
Q254721
0
346583
806941
2026-11-09T15:44:21Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806941
wikibase-item
application/json
{"type":"item","id":"Q254721","labels":{"en":{"language":"en","value":"former owner"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q136357543"}},"aliases":[],"claims":[],"sitelinks":[]}
jv30en46uznegi34dmgv7bpnwzsmbof
Q254722
0
346584
806942
2026-11-09T15:44:24Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806942
wikibase-item
application/json
{"type":"item","id":"Q254722","labels":{"en":{"language":"en","value":"Modena"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q279"}},"aliases":[],"claims":[],"sitelinks":[]}
oxql7s52zpzvspi88u4rkafh1d2q61b
Q254724
0
346585
806943
2026-11-09T15:44:34Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806943
wikibase-item
application/json
{"type":"item","id":"Q254724","labels":{"en":{"language":"en","value":"composite manuscript"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q33308141"}},"aliases":[],"claims":[],"sitelinks":[]}
ggvxkaivs4k0x6zyh05lz2gye92yvwc
Q254725
0
346586
806944
2026-11-09T15:44:38Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806944
wikibase-item
application/json
{"type":"item","id":"Q254725","labels":{"en":{"language":"en","value":"manuscript fragment"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q30103158"}},"aliases":[],"claims":[],"sitelinks":[]}
9ladb3d926d4o2489uepxgcgcfd5rtj
Property:P100685
120
346587
806945
2026-11-09T15:44:41Z
Alexander Goldberg IL
9241
/* wbeditentity-create-property:0| */ MHM Pipeline: test.wikidata.org remap stub
806945
wikibase-property
application/json
{"type":"property","datatype":"string","id":"P100685","labels":{"en":{"language":"en","value":"folio(s) [citation qualifier]"}},"descriptions":[],"aliases":[],"claims":[]}
gahl6rogk92m332aoxujj71dnxl4cuk
Q254727
0
346588
806946
2026-11-09T15:44:43Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806946
wikibase-item
application/json
{"type":"item","id":"Q254727","labels":{"en":{"language":"en","value":"letter"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q133492"}},"aliases":[],"claims":[],"sitelinks":[]}
p6vxqfr78fdhei5n7as7e4b3qsapa3b
Q254729
0
346589
806947
2026-11-09T15:44:46Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806947
wikibase-item
application/json
{"type":"item","id":"Q254729","labels":{"en":{"language":"en","value":"sermon"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q60797"}},"aliases":[],"claims":[],"sitelinks":[]}
sn1wzvzmu2a46y0a1zfcn533xe5s8yx
Q254730
0
346590
806948
2026-11-09T15:44:47Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806948
wikibase-item
application/json
{"type":"item","id":"Q254730","labels":{"en":{"language":"en","value":"Hebrew square script"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q364727"}},"aliases":[],"claims":[],"sitelinks":[]}
5rtsq0xomud8tw3hjwumj2tnp6qs0l4
Q254731
0
346591
806949
2026-11-09T15:44:49Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806949
wikibase-item
application/json
{"type":"item","id":"Q254731","labels":{"en":{"language":"en","value":"Jewish philosophy"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q837795"}},"aliases":[],"claims":[],"sitelinks":[]}
dqre58zpdphwubh08hgkfetchfzkk7j
Q254732
0
346592
806950
2026-11-09T15:44:50Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806950
wikibase-item
application/json
{"type":"item","id":"Q254732","labels":{"en":{"language":"en","value":"disputation"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q1123131"}},"aliases":[],"claims":[],"sitelinks":[]}
t9rynyhfwu9f5guzqbmbddwbg5gra84
Q254737
0
346593
806951
2026-11-09T15:45:00Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806951
wikibase-item
application/json
{"type":"item","id":"Q254737","labels":{"en":{"language":"en","value":"Jewish ethics"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q174370"}},"aliases":[],"claims":[],"sitelinks":[]}
pssn5415natj2abfmiu05dk2iwwddv9
Q254738
0
346594
806952
2026-11-09T15:45:01Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: test.wikidata.org remap stub
806952
wikibase-item
application/json
{"type":"item","id":"Q254738","labels":{"en":{"language":"en","value":"Italy"}},"descriptions":{"en":{"language":"en","value":"MHM test stub for live Q38"}},"aliases":[],"claims":[],"sitelinks":[]}
pj97b25c469ej9fn4z8ncofi1e8nvge
Q254740
0
346595
806954
2026-11-09T17:01:02Z
PatternJournaler
9442
/* wbeditentity-create:2|en */ Acoustic Instrument, An acoustic instrument is a musical instrument that makes its sound entirely by physical vibration, with no electricity involved in producing or amplifying it.
806954
wikibase-item
application/json
{"type":"item","id":"Q254740","labels":{"en":{"language":"en","value":"Acoustic Instrument"}},"descriptions":{"en":{"language":"en","value":"An acoustic instrument is a musical instrument that makes its sound entirely by physical vibration, with no electricity involved in producing or amplifying it."}},"aliases":[],"claims":[],"sitelinks":[]}
2ot0ivwrftga95hjjru6yx5echhdgb8
806955
806954
2026-11-09T17:01:30Z
PatternJournaler
9442
/* wbsetdescription-set:1|en */ A musical instrument that makes its sound entirely by physical vibration, with no electricity involved in producing or amplifying it.
806955
wikibase-item
application/json
{"type":"item","id":"Q254740","labels":{"en":{"language":"en","value":"Acoustic Instrument"}},"descriptions":{"en":{"language":"en","value":"A musical instrument that makes its sound entirely by physical vibration, with no electricity involved in producing or amplifying it."}},"aliases":[],"claims":[],"sitelinks":[]}
l5qih5xc8kqlnm4igp63mcmjrtkcfye
806956
806955
2026-11-09T17:02:54Z
PatternJournaler
9442
/* wbsetclaim-create:2||1 */ [[Property:P10208]]: [[Q245564]]
806956
wikibase-item
application/json
{"type":"item","id":"Q254740","labels":{"en":{"language":"en","value":"Acoustic Instrument"}},"descriptions":{"en":{"language":"en","value":"A musical instrument that makes its sound entirely by physical vibration, with no electricity involved in producing or amplifying it."}},"aliases":[],"claims":{"P10208":[{"mainsnak":{"snaktype":"value","property":"P10208","hash":"860ac05c0cafac26c860de44ca58d7b2d6ee1530","datavalue":{"value":{"entity-type":"item","numeric-id":245564,"id":"Q245564"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254740$64316c87-40cc-b76f-e361-af396bcba61b","rank":"normal"}]},"sitelinks":[]}
k0ch4hsj7wgyfullzhymx39rvxspp6c
806961
806956
2026-11-09T17:11:14Z
PatternJournaler
9442
/* wbsetdescription-set:1|en */ musical instrument that makes its sound entirely by physical vibration, with no electricity involved in producing or amplifying it.
806961
wikibase-item
application/json
{"type":"item","id":"Q254740","labels":{"en":{"language":"en","value":"Acoustic Instrument"}},"descriptions":{"en":{"language":"en","value":"musical instrument that makes its sound entirely by physical vibration, with no electricity involved in producing or amplifying it."}},"aliases":[],"claims":{"P10208":[{"mainsnak":{"snaktype":"value","property":"P10208","hash":"860ac05c0cafac26c860de44ca58d7b2d6ee1530","datavalue":{"value":{"entity-type":"item","numeric-id":245564,"id":"Q245564"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254740$64316c87-40cc-b76f-e361-af396bcba61b","rank":"normal"}]},"sitelinks":[]}
3lqnh4lw85fd5gauf5cwawjeg92eh79
Q254741
0
346596
806957
2026-11-09T17:06:41Z
PatternJournaler
9442
/* wbeditentity-create:2|en */ Mandolin, small plucked string instrument of the lute family with eight strings in four paired courses
806957
wikibase-item
application/json
{"type":"item","id":"Q254741","labels":{"en":{"language":"en","value":"Mandolin"}},"descriptions":{"en":{"language":"en","value":"small plucked string instrument of the lute family with eight strings in four paired courses"}},"aliases":[],"claims":[],"sitelinks":[]}
8ctq9z17z0s34u2170u0yke9xpd7myz
806958
806957
2026-11-09T17:06:54Z
PatternJournaler
9442
/* wbsetlabel-set:1|en */ mandolin
806958
wikibase-item
application/json
{"type":"item","id":"Q254741","labels":{"en":{"language":"en","value":"mandolin"}},"descriptions":{"en":{"language":"en","value":"small plucked string instrument of the lute family with eight strings in four paired courses"}},"aliases":[],"claims":[],"sitelinks":[]}
10dzjehl9ok5gne4a4etumkx62fbqqp
806959
806958
2026-11-09T17:07:18Z
PatternJournaler
9442
/* wbsetclaim-create:2||1 */ [[Property:P10208]]: [[Q254740]]
806959
wikibase-item
application/json
{"type":"item","id":"Q254741","labels":{"en":{"language":"en","value":"mandolin"}},"descriptions":{"en":{"language":"en","value":"small plucked string instrument of the lute family with eight strings in four paired courses"}},"aliases":[],"claims":{"P10208":[{"mainsnak":{"snaktype":"value","property":"P10208","hash":"f6713d7d07a9d513eb352c0d4b9e327b16bc9ce7","datavalue":{"value":{"entity-type":"item","numeric-id":254740,"id":"Q254740"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254741$87b01dea-4a5e-c6dc-d9cc-11068f1cd70d","rank":"normal"}]},"sitelinks":[]}
d5126nzi1hbfqolf8x30uxhrqfhvagz
Q254742
0
346597
806960
2026-11-09T17:10:09Z
PatternJournaler
9442
/* wbeditentity-create:2|en */ Gibson F-5, mandolin model made by Gibson since 1922, designed by Lloyd Loar, with a carved top, f-holes and a scroll-shaped body
806960
wikibase-item
application/json
{"type":"item","id":"Q254742","labels":{"en":{"language":"en","value":"Gibson F-5"}},"descriptions":{"en":{"language":"en","value":"mandolin model made by Gibson since 1922, designed by Lloyd Loar, with a carved top, f-holes and a scroll-shaped body"}},"aliases":[],"claims":[],"sitelinks":[]}
tsdcv8xsvti1ua9hzwi82yfvcvb1psq
806962
806960
2026-11-09T17:13:23Z
PatternJournaler
9442
/* wbsetclaim-create:2||1 */ [[Property:P10208]]: [[Q254741]]
806962
wikibase-item
application/json
{"type":"item","id":"Q254742","labels":{"en":{"language":"en","value":"Gibson F-5"}},"descriptions":{"en":{"language":"en","value":"mandolin model made by Gibson since 1922, designed by Lloyd Loar, with a carved top, f-holes and a scroll-shaped body"}},"aliases":[],"claims":{"P10208":[{"mainsnak":{"snaktype":"value","property":"P10208","hash":"a709a5aedb18fb12ea42cfc2cde98d16ad5cf5a8","datavalue":{"value":{"entity-type":"item","numeric-id":254741,"id":"Q254741"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254742$4ad54893-449f-d75a-80cb-b4974f852429","rank":"normal"}]},"sitelinks":[]}
kwvz5j5f9w6mwihoflnpsciz2uiqxsq
806964
806962
2026-11-09T17:16:28Z
PatternJournaler
9442
/* wbsetclaim-create:2||1 */ [[Property:P98881]]: [[Q254743]]
806964
wikibase-item
application/json
{"type":"item","id":"Q254742","labels":{"en":{"language":"en","value":"Gibson F-5"}},"descriptions":{"en":{"language":"en","value":"mandolin model made by Gibson since 1922, designed by Lloyd Loar, with a carved top, f-holes and a scroll-shaped body"}},"aliases":[],"claims":{"P10208":[{"mainsnak":{"snaktype":"value","property":"P10208","hash":"a709a5aedb18fb12ea42cfc2cde98d16ad5cf5a8","datavalue":{"value":{"entity-type":"item","numeric-id":254741,"id":"Q254741"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254742$4ad54893-449f-d75a-80cb-b4974f852429","rank":"normal"}],"P98881":[{"mainsnak":{"snaktype":"value","property":"P98881","hash":"936f99d1f1c9f25cae300362089f23aa3defce72","datavalue":{"value":{"entity-type":"item","numeric-id":254743,"id":"Q254743"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254742$2b994276-4905-ee4f-8ba9-2ed2e9674969","rank":"normal"}]},"sitelinks":[]}
pxvuv77b38zgmms9k2c72uw0ajh414w
Q254743
0
346598
806963
2026-11-09T17:15:49Z
PatternJournaler
9442
/* wbeditentity-create:2|en */ gibson
806963
wikibase-item
application/json
{"type":"item","id":"Q254743","labels":{"en":{"language":"en","value":"gibson"}},"descriptions":[],"aliases":[],"claims":[],"sitelinks":[]}
5k5puvvvyj1lj3xqmamyacqmru7tlk5
Q254744
0
346599
806965
2026-11-09T17:20:41Z
PatternJournaler
9442
/* wbeditentity-create:2|en */ Chris Thile’s Gibson F-5 (#75316), 1924 Gibson F-5 mandolin owned by Chris Thile
806965
wikibase-item
application/json
{"type":"item","id":"Q254744","labels":{"en":{"language":"en","value":"Chris Thile\u2019s Gibson F-5 (#75316)"}},"descriptions":{"en":{"language":"en","value":"1924 Gibson F-5 mandolin owned by Chris Thile"}},"aliases":[],"claims":[],"sitelinks":[]}
jepeb33j2y5wc90rh2wo4d8us2rc5ue
806966
806965
2026-11-09T17:22:30Z
PatternJournaler
9442
/* wbsetlabel-set:1|en */ Gibson F-5 (#75316)
806966
wikibase-item
application/json
{"type":"item","id":"Q254744","labels":{"en":{"language":"en","value":"Gibson F-5 (#75316)"}},"descriptions":{"en":{"language":"en","value":"1924 Gibson F-5 mandolin owned by Chris Thile"}},"aliases":[],"claims":[],"sitelinks":[]}
ld7fdgybq6auz0l0jjnywduvuiren1a
806967
806966
2026-11-09T17:22:39Z
PatternJournaler
9442
/* wbsetclaim-create:2||1 */ [[Property:P82]]: [[Q254742]]
806967
wikibase-item
application/json
{"type":"item","id":"Q254744","labels":{"en":{"language":"en","value":"Gibson F-5 (#75316)"}},"descriptions":{"en":{"language":"en","value":"1924 Gibson F-5 mandolin owned by Chris Thile"}},"aliases":[],"claims":{"P82":[{"mainsnak":{"snaktype":"value","property":"P82","hash":"2046bdbfe02eecf182d76756dd49f211c60198ae","datavalue":{"value":{"entity-type":"item","numeric-id":254742,"id":"Q254742"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254744$9b95a5a3-479e-b3ce-a395-25ed573a2849","rank":"normal"}]},"sitelinks":[]}
cd32jnjddmgg7dylzmtvaqyon9gvpam
806969
806967
2026-11-09T17:25:48Z
PatternJournaler
9442
/* wbsetclaim-create:2||1 */ [[Property:P37]]: [[Q254745]]
806969
wikibase-item
application/json
{"type":"item","id":"Q254744","labels":{"en":{"language":"en","value":"Gibson F-5 (#75316)"}},"descriptions":{"en":{"language":"en","value":"1924 Gibson F-5 mandolin owned by Chris Thile"}},"aliases":[],"claims":{"P82":[{"mainsnak":{"snaktype":"value","property":"P82","hash":"2046bdbfe02eecf182d76756dd49f211c60198ae","datavalue":{"value":{"entity-type":"item","numeric-id":254742,"id":"Q254742"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254744$9b95a5a3-479e-b3ce-a395-25ed573a2849","rank":"normal"}],"P37":[{"mainsnak":{"snaktype":"value","property":"P37","hash":"32687008d35c3228f0ef7e7d74b5af497089a07d","datavalue":{"value":{"entity-type":"item","numeric-id":254745,"id":"Q254745"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P87":[{"snaktype":"value","property":"P87","hash":"9e50e1aba30ba2ab6c85da7e2a655de2156b7b11","datavalue":{"value":{"time":"+2007-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P87"],"id":"Q254744$723661a9-4a5e-c83e-8372-568088367e01","rank":"normal","references":[{"hash":"72db8d43d7144b94a60a84e56436bf43d25a17c3","snaks":{"P77107":[{"snaktype":"value","property":"P77107","hash":"73303785fd65c5ab6df29ed91710d130a598d99f","datavalue":{"value":{"text":"Chris Thile owns #75316","language":"en-us"},"type":"monolingualtext"}}],"P93":[{"snaktype":"value","property":"P93","hash":"78ee7b116ae503ead54f274c7008597153228e1e","datavalue":{"value":"https:\/\/www.vintageguitar.com\/3456\/chris-thile\/","type":"string"}}],"P88991":[{"snaktype":"value","property":"P88991","hash":"75fb871b7ea26621b1653013bdc251ed5e44b43c","datavalue":{"value":{"text":"Vintage Guitar\u00ae magazine","language":"en-us"},"type":"monolingualtext"}}],"P151":[{"snaktype":"value","property":"P151","hash":"03599f416a9486b63191046faf44d06ea274965f","datavalue":{"value":{"time":"+2010-04-28T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}],"P146":[{"snaktype":"value","property":"P146","hash":"aa8367a4c00817a87f3c6b1d8128b7864f7b3085","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P77107","P93","P88991","P151","P146"]}]}]},"sitelinks":[]}
bqgsgxcujulkal022f0z8por8c9y8jz
806971
806969
2026-11-09T17:31:16Z
PatternJournaler
9442
/* wbsetclaim-create:2||1 */ [[Property:P95312]]: 75316
806971
wikibase-item
application/json
{"type":"item","id":"Q254744","labels":{"en":{"language":"en","value":"Gibson F-5 (#75316)"}},"descriptions":{"en":{"language":"en","value":"1924 Gibson F-5 mandolin owned by Chris Thile"}},"aliases":[],"claims":{"P82":[{"mainsnak":{"snaktype":"value","property":"P82","hash":"2046bdbfe02eecf182d76756dd49f211c60198ae","datavalue":{"value":{"entity-type":"item","numeric-id":254742,"id":"Q254742"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254744$9b95a5a3-479e-b3ce-a395-25ed573a2849","rank":"normal"}],"P37":[{"mainsnak":{"snaktype":"value","property":"P37","hash":"32687008d35c3228f0ef7e7d74b5af497089a07d","datavalue":{"value":{"entity-type":"item","numeric-id":254745,"id":"Q254745"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P87":[{"snaktype":"value","property":"P87","hash":"9e50e1aba30ba2ab6c85da7e2a655de2156b7b11","datavalue":{"value":{"time":"+2007-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"qualifiers-order":["P87"],"id":"Q254744$723661a9-4a5e-c83e-8372-568088367e01","rank":"normal","references":[{"hash":"72db8d43d7144b94a60a84e56436bf43d25a17c3","snaks":{"P77107":[{"snaktype":"value","property":"P77107","hash":"73303785fd65c5ab6df29ed91710d130a598d99f","datavalue":{"value":{"text":"Chris Thile owns #75316","language":"en-us"},"type":"monolingualtext"}}],"P93":[{"snaktype":"value","property":"P93","hash":"78ee7b116ae503ead54f274c7008597153228e1e","datavalue":{"value":"https:\/\/www.vintageguitar.com\/3456\/chris-thile\/","type":"string"}}],"P88991":[{"snaktype":"value","property":"P88991","hash":"75fb871b7ea26621b1653013bdc251ed5e44b43c","datavalue":{"value":{"text":"Vintage Guitar\u00ae magazine","language":"en-us"},"type":"monolingualtext"}}],"P151":[{"snaktype":"value","property":"P151","hash":"03599f416a9486b63191046faf44d06ea274965f","datavalue":{"value":{"time":"+2010-04-28T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}],"P146":[{"snaktype":"value","property":"P146","hash":"aa8367a4c00817a87f3c6b1d8128b7864f7b3085","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P77107","P93","P88991","P151","P146"]}]}],"P95312":[{"mainsnak":{"snaktype":"value","property":"P95312","hash":"adcc0f7eeb29b21255d6c1b4f39e8317e4effb0f","datavalue":{"value":"75316","type":"string"}},"type":"statement","id":"Q254744$c1ea06e3-4267-1d8f-c22a-7db93ec5cb09","rank":"normal"}]},"sitelinks":[]}
rsv6djb36ldvro8z9qpz0i0mgyyrfaw
Q254745
0
346600
806968
2026-11-09T17:23:17Z
PatternJournaler
9442
/* wbeditentity-create:2|en */ Chris Thile
806968
wikibase-item
application/json
{"type":"item","id":"Q254745","labels":{"en":{"language":"en","value":"Chris Thile"}},"descriptions":[],"aliases":[],"claims":[],"sitelinks":[]}
4myt9x6dbpv1azojmm3hna1mew6ycso
806970
806968
2026-11-09T17:28:27Z
PatternJournaler
9442
/* wbsetclaim-create:2||1 */ [[Property:P82]]: [[Q497]]
806970
wikibase-item
application/json
{"type":"item","id":"Q254745","labels":{"en":{"language":"en","value":"Chris Thile"}},"descriptions":[],"aliases":[],"claims":{"P82":[{"mainsnak":{"snaktype":"value","property":"P82","hash":"c484cb57f5aa2723c4ee74abf40ac25c8d6b039c","datavalue":{"value":{"entity-type":"item","numeric-id":497,"id":"Q497"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254745$b42bfded-481f-14ce-a0ad-32fc53a461aa","rank":"normal"}]},"sitelinks":[]}
ikosdaw96kwvxg3vtki2nw3a86ua2nj
Q254814
0
346606
806998
2026-11-10T08:29:19Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +16 claims; local_id=QDraft_MS_990001042390205171
806998
wikibase-item
application/json
{"type":"item","id":"Q254814","labels":{"en":{"language":"en","value":"The Jewish Theological Seminary of America. New York, USA. Ms. 1841"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e6\u05e8\u05e4\u05ea\u05d9, Jewish Theological Seminary Library, Ms. 1841"}},"descriptions":{"en":{"language":"en","value":"French manuscript, 1634, The Jewish Theological Seminary of America, New York, Ms. 1841"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e6\u05e8\u05e4\u05ea\u05d9, 1634, Jewish Theological Seminary Library"}},"aliases":{"en":[{"language":"en","value":"Les Clavicules de Salomon"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"5438d03780f074f57855fb09f553644e63211cda","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9568","type":"string"}},"type":"statement","id":"Q254814$9A0A399C-BB73-47B1-A313-D60F0BF007B4","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254814$7D4CE91C-C46D-4BEA-AD26-E55C487DE037","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"92ab901877b0f1109498c08b2e2ce5a35fc9fc46","datavalue":{"value":{"entity-type":"item","numeric-id":254693,"id":"Q254693"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254814$BBA8E29F-D822-4046-8C8A-B0A32A8F3839","rank":"preferred","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"2942abbc7612d39655df8617d2269166b1aaf09b","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9568","type":"string"}},"type":"statement","id":"Q254814$A0E668DF-2880-4825-A2E6-23F4F16E0B89","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"62527837c89e378279bb66f515e0760c94f5c1af","datavalue":{"value":{"entity-type":"item","numeric-id":248986,"id":"Q248986"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254814$76BF9EBF-597D-4205-9A25-D24FDDE41BDC","rank":"preferred","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"96774b6203eff65c5c69b897b18a80a6eedccffc","datavalue":{"value":"Ms. 1841","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"62527837c89e378279bb66f515e0760c94f5c1af","datavalue":{"value":{"entity-type":"item","numeric-id":248986,"id":"Q248986"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254814$2C43B104-F70E-49A5-A98C-1CADB5519B47","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}},"type":"statement","id":"Q254814$9B306FD0-C486-45B9-BFD8-5FCA8BA0D539","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254814$12DA4862-417E-415A-B530-7F5189F474AF","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"ef53eeef75f7a6b9007acc30cbe49aa4851def7d","datavalue":{"value":{"text":"Les Clavicules de Salomon","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q254814$6785A93C-7DDA-405E-97D7-80F4F60A420E","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"a99ea06e76cca077ad4147d13645947984683801","datavalue":{"value":{"entity-type":"item","numeric-id":251728,"id":"Q251728"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254814$EDEF6895-9551-417F-ADAD-15183A69832F","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254814$628C25FF-0C9D-463A-9114-2B4A923C3C80","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"eebcd5b0e78b4f6022aacee57b67fa1e004757fe","datavalue":{"value":{"entity-type":"item","numeric-id":254698,"id":"Q254698"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254814$F33458A2-96F6-4AD4-8549-8EE19E14CF6E","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254814$BF3BE1E2-BAFE-4563-8E17-61449212144F","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"abe066959d4085f331f80e53b466bd354ac7db84","datavalue":{"value":{"time":"+1634-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q254814$B7F28A07-F745-42F9-8719-FCB74A2730B5","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"cfb4c4e99c127dbddbf791be73c218087bfbfdb9","datavalue":{"value":{"amount":"+122","unit":"http:\/\/test.wikidata.org\/entity\/Q248368"},"type":"quantity"}},"type":"statement","id":"Q254814$B92F36FF-964F-4129-92D9-63A788B4A430","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254814$612EBD52-A412-4C35-8650-D32C899343AE","rank":"normal","references":[{"hash":"2c2d90b48f533e424cdd021093877f283676ba4c","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"fe5914e0a0277fc6442a24b72478c4a257335cfd","datavalue":{"value":"990001042390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"73e134608de118eb96b350575294fa39a3363081","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001042390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
n1k4wihvdt3anydal0384rbj079z9hj
Q254823
0
346607
806999
2026-11-10T08:29:32Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +23 claims; local_id=QDraft_MS_990000953610205171
806999
wikibase-item
application/json
{"type":"item","id":"Q254823","labels":{"en":{"language":"en","value":"Ets Haim Library. Amsterdam, Netherlands. 47 E 1"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05d1\u05e8\u05d9, Ets Haim library, 47 E 1"}},"descriptions":{"en":{"language":"en","value":"Hebrew manuscript, 1685, Sephardi script, Ets Haim Library, Amsterdam, 47 E 1"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05d1\u05e8\u05d9, 1685, Ets Haim library"}},"aliases":{"he":[{"language":"he","value":"\u05d0\u05d1\u05e0\u05d9 \u05d6\u05db\u05e8\u05d5\u05df (\u05d7\u05dc\u05e7 \u05e9\u05dc\u05d9\u05e9\u05d9)"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"ae9c975b07c40dc9f85b09a7fe72a9f15bc5675c","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9476","type":"string"}},"type":"statement","id":"Q254823$71661223-323B-4058-997C-9A2F28ADD199","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254823$96777843-87A0-4725-A696-720B99D2FE10","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"92ab901877b0f1109498c08b2e2ce5a35fc9fc46","datavalue":{"value":{"entity-type":"item","numeric-id":254693,"id":"Q254693"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254823$4839FFC5-510D-46C2-B9D5-7574644EFEB2","rank":"preferred","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"84834b5a0ed48da16ab346b159e981eb99374d9b","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9476","type":"string"}},"type":"statement","id":"Q254823$ACD5AE0E-7099-42FD-A0C7-5F51867321D0","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"8f265c86fa2e31b827eede1dcf91a2fa2d86b603","datavalue":{"value":{"entity-type":"item","numeric-id":251674,"id":"Q251674"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254823$F040B394-F084-403D-8547-6199EBFBFFA7","rank":"preferred","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"113f68e490761ca6baf1ae9422326b14d365575b","datavalue":{"value":"47 E 1","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"8f265c86fa2e31b827eede1dcf91a2fa2d86b603","datavalue":{"value":{"entity-type":"item","numeric-id":251674,"id":"Q251674"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254823$362FA5F4-606B-4C16-AD9D-3D1A22C372A3","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}},"type":"statement","id":"Q254823$9F4C0A97-D711-4B98-A01A-7B86CA85B0E6","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254823$C6B818C8-E04A-472E-A273-E636AC594006","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"cbb437d65b5d601b0c8ba73a6f1c7642ea3ee4f0","datavalue":{"value":{"text":"\u05d0\u05d1\u05e0\u05d9 \u05d6\u05db\u05e8\u05d5\u05df (\u05d7\u05dc\u05e7 \u05e9\u05dc\u05d9\u05e9\u05d9)","language":"he"},"type":"monolingualtext"}},"type":"statement","id":"Q254823$5A26225F-0C25-40E6-ACDD-09C44BC23828","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100307":[{"mainsnak":{"snaktype":"value","property":"P100307","hash":"63c8ca34832e45263a6dfe3078da17ac53128cfd","datavalue":{"value":{"text":"\u05e2\u05dc \u05d0\u05d1\u05df \u05d4\u05e2\u05d6\u05e8","language":"he"},"type":"monolingualtext"}},"type":"statement","id":"Q254823$CF9A4EC9-587A-4D4E-A911-E448D94570F2","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254823$8DD98F14-49D0-4B43-B59B-C71403B9C55E","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254823$2D9D49C0-EBB3-4B87-B923-0CB0A29B8555","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100667":[{"mainsnak":{"snaktype":"value","property":"P100667","hash":"8039c29e95d07aad412091be4b5fb2f3b193d695","datavalue":{"value":{"entity-type":"item","numeric-id":251421,"id":"Q251421"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254823$5BEE813D-65F6-44E3-BB2A-6E3366BC2AB2","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"7aa16eef1917d3ea08e1869330ad38175d667df7","datavalue":{"value":{"time":"+1685-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","qualifiers":{"P98959":[{"snaktype":"value","property":"P98959","hash":"952828760d773985d2be9b6876009db027b11131","datavalue":{"value":"\u05ea\u05de\"\u05d4","type":"string"}}]},"qualifiers-order":["P98959"],"id":"Q254823$4D3AA96C-564E-4C2D-A7D1-8EC04B9EF7C3","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100670":[{"mainsnak":{"snaktype":"value","property":"P100670","hash":"b319b47da5ce9cbcae25b26e5b33f3023fb139c6","datavalue":{"value":{"entity-type":"item","numeric-id":254714,"id":"Q254714"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254823$4016859D-B470-4DD8-99D8-7DAE8518A428","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"df677d7b780cc38feb234a617cd0918a3dd0a290","datavalue":{"value":{"amount":"+78","unit":"http:\/\/test.wikidata.org\/entity\/Q248286"},"type":"quantity"}},"type":"statement","id":"Q254823$5C2FDC44-EE49-40A0-9485-FE00AB3EDFF4","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100311":[{"mainsnak":{"snaktype":"value","property":"P100311","hash":"287305ac8b12f87ca33dfb8d6189bf08dff8479c","datavalue":{"value":{"entity-type":"item","numeric-id":254718,"id":"Q254718"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254823$42B7BCD3-A057-4F73-9838-2F7A144B6520","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P1173":[{"mainsnak":{"snaktype":"value","property":"P1173","hash":"096648155315e9582a0c40cebbef9adadf797bc5","datavalue":{"value":{"entity-type":"item","numeric-id":248547,"id":"Q248547"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254823$FF90C3FF-06C0-4A01-A647-C0061AC11988","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100672":[{"mainsnak":{"snaktype":"value","property":"P100672","hash":"cb3457dc90bd75daad9531c6335663590bd8ca18","datavalue":{"value":"Catalogue Allony-Kupfer Belgium, Denmark, the Netherlands, Spain & Switzerland: EH 69","type":"string"}},"type":"statement","id":"Q254823$1C1A99B8-0E7D-45F7-AA2C-7B50F7FE0BB5","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100672","hash":"9bc0381c25dfd79d5c079580e88630d25a0a78db","datavalue":{"value":"Catalogue Fuks, Ets Haim: 63","type":"string"}},"type":"statement","id":"Q254823$7FF016C9-8FB5-4409-89E6-EBC93BB164B9","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100672","hash":"e606252f42f1ca430ae14df3d3765ce340635c41","datavalue":{"value":"\u05d0\u05dc\u05d5\u05e0\u05d9, \u05e0. \u05d5\u05e7\u05d5\u05e4\u05e4\u05e8, \u05d0., \u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05e6\u05dc\u05d5\u05de\u05d9 \u05db\u05ea\u05d1\u05d9-\u05d4\u05d9\u05d3 \u05d4\u05e2\u05d1\u05e8\u05d9\u05d9\u05dd \u05d1\u05de\u05db\u05d5\u05df. \u05d7\u05dc\u05e7 \u05d1 (\u05d9\u05e8\u05d5\u05e9\u05dc\u05d9\u05dd \u05ea\u05e9\u05db\"\u05d3) \u05de\u05e1. 69.","type":"string"}},"type":"statement","id":"Q254823$3E96486B-D5D3-4CA9-B824-7B9B945F609D","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100672","hash":"e8e73931cd52d21b03594272d21687ed8e69fafd","datavalue":{"value":"Fuks, L. and Mansfeld-Fuks, R.G., Catalogue of the manuscripts of Ets Haim \/Livraria Montezinos Sephardic Community of Amsterdam, Leiden 1975 (Hebrew & Judaic Manuscripts in Amsterdam Public Collections, II) no. 63.","type":"string"}},"type":"statement","id":"Q254823$F7DD0E49-1E24-4E2C-A198-16261E199AB4","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254823$F9E41EBA-57D4-4155-B6AD-6E4B9FCA5F06","rank":"normal","references":[{"hash":"50ed5ce96067460da0bdb74c4496035d3c26768b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7c2c82151d1249228f9bbbde64d46b4554a7c875","datavalue":{"value":"990000953610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bcd574bcc4e1e3f4f56f53c0b104dbbd57bc8247","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990000953610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
4twpke5dnzxvrqip0h4ye08gzkpow7u
Q254824
0
346608
807000
2026-11-10T08:29:34Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +21 claims; local_id=QDraft_MS_990001067870205171
807000
wikibase-item
application/json
{"type":"item","id":"Q254824","labels":{"en":{"language":"en","value":"The Jewish Theological Seminary of America. New York, USA. Ms. 3355"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05e8\u05d1\u05d9, Jewish Theological Seminary Library, Ms. 3355"}},"descriptions":{"en":{"language":"en","value":"Arabic manuscript, 1608, The Jewish Theological Seminary of America, New York, Ms. 3355"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05e8\u05d1\u05d9, 1608, Jewish Theological Seminary Library"}},"aliases":{"he":[{"language":"he","value":"\u05e4\u05e8\u05d5\u05e9 \u05db\u05ea\u05d5\u05d1\u05d9\u05dd \u05dc\u05d9\u05e4\u05ea \u05d1\u05df \u05e2\u05dc\u05d9 (\u05d0\u05d9\u05d5\u05d1)"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"89e7ca7ffb53595c179919ec7f42bc7a643684e2","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9612","type":"string"}},"type":"statement","id":"Q254824$098BF1DE-4781-4A16-B41F-EA168B2F849A","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254824$4F1FFA58-24EA-4642-9B27-3739C1A2DF18","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"92ab901877b0f1109498c08b2e2ce5a35fc9fc46","datavalue":{"value":{"entity-type":"item","numeric-id":254693,"id":"Q254693"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254824$27A04218-C013-4C78-85BD-E466993AD073","rank":"preferred","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"0a4ade32ee5fb84112b060d7a9d57dc82d48d18f","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9612","type":"string"}},"type":"statement","id":"Q254824$CBB33305-DF7C-4FF1-9C11-364EDD2D9E3D","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"62527837c89e378279bb66f515e0760c94f5c1af","datavalue":{"value":{"entity-type":"item","numeric-id":248986,"id":"Q248986"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254824$21016D82-7B45-48C5-A5ED-652CEC13FC8F","rank":"preferred","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"c10062da5f8af04a9e9bb827aee5afafa51613aa","datavalue":{"value":"Ms. 3355","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"62527837c89e378279bb66f515e0760c94f5c1af","datavalue":{"value":{"entity-type":"item","numeric-id":248986,"id":"Q248986"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254824$34959486-4D87-4D8A-ADF1-78126763DA8E","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}},"type":"statement","id":"Q254824$50C10B45-0C9F-4087-8252-780968FBFD1C","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254824$36BA1C6E-3C99-4E3B-A49B-5FCBB94B0E22","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"698de9fa521e1dff5e9fd7f83b3749bc038ed0a5","datavalue":{"value":{"text":"\u05e4\u05e8\u05d5\u05e9 \u05db\u05ea\u05d5\u05d1\u05d9\u05dd \u05dc\u05d9\u05e4\u05ea \u05d1\u05df \u05e2\u05dc\u05d9 (\u05d0\u05d9\u05d5\u05d1)","language":"he"},"type":"monolingualtext"}},"type":"statement","id":"Q254824$3943EAB2-C60A-48A8-91BF-4537D5470498","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"3aa1417ffb9dd5d637080bfe830ae5c9bdcbaa22","datavalue":{"value":{"entity-type":"item","numeric-id":248366,"id":"Q248366"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254824$8FF4C589-BF24-4251-B687-78B416996860","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254824$DE83480B-6E3C-45C2-ADEE-D5F0761A1B3A","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254824$9E33EF70-D306-4F0B-8A48-3772DAE4A4EE","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"661236414d0aee8e31ac230d6534ef54106596c6","datavalue":{"value":{"time":"+1608-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","qualifiers":{"P98959":[{"snaktype":"value","property":"P98959","hash":"498d9af9c9ab8ea67fecda6a7c7b3029a39e1c69","datavalue":{"value":"\u05e9\u05e1\"\u05d7 (1608)","type":"string"}}]},"qualifiers-order":["P98959"],"id":"Q254824$D35F5561-8522-42B1-9042-231A9846937B","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"5656d7f0ec08a5ab9269eabad678402b3f97a771","datavalue":{"value":{"amount":"+139","unit":"http:\/\/test.wikidata.org\/entity\/Q248286"},"type":"quantity"}},"type":"statement","id":"Q254824$DBF9E0AD-70DA-43ED-A988-A0EBC32DC231","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P1173":[{"mainsnak":{"snaktype":"value","property":"P1173","hash":"72f4a83eae786d7303279fad8d9bc8c6ec0c6f30","datavalue":{"value":{"entity-type":"item","numeric-id":254715,"id":"Q254715"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254824$D3681BB8-75C9-427E-867B-17ECBEA564F5","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100672":[{"mainsnak":{"snaktype":"value","property":"P100672","hash":"cad32fc7bf0eb5b0180bc48a925151228420c083","datavalue":{"value":"\u05e8\u05d0\u05d4 \u05de\u05d0\u05de\u05e8\u05d5 \u05e9\u05dc \u05d7' \u05d1\u05df \u05e9\u05de\u05d0\u05d9","type":"string"}},"type":"statement","id":"Q254824$E3752CD1-41D3-48A4-A597-02751678045F","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100672","hash":"90499dcfcf0cf7bd8baddf194082c2bbed057ff5","datavalue":{"value":"H. Ben Shammai, 'Some Judaeo-Arabic Karaite fragments in the British Museum Collection\", in: Bulletin of the School of Oriental and African Studies, Univ. of London, vol. 38, pt. 1, (1975), pp. 126-132.","type":"string"}},"type":"statement","id":"Q254824$3F9F68F4-C6F1-4951-AEBF-DD6454BFE497","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254824$E853DA74-26DA-4F07-922C-743EF242ECE9","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100234":[{"mainsnak":{"snaktype":"somevalue","property":"P100234","hash":"078c9391808ef80ef5026f369ed16b8b99fd2e9a"},"type":"statement","qualifiers":{"P98959":[{"snaktype":"value","property":"P98959","hash":"38f85475dff71ca60e931c7d0d215a8897c9295b","datavalue":{"value":"\u05d1\u05e8\u05db\u05d4, \u05d9\u05d5\u05e1\u05e3 \u05d1\u05df \u05e8\u05e6\u05d5\u05df \u05d1\u05df \u05e9\u05de\u05d5\u05d0\u05dc \u05d1\u05df \u05d0\u05d4\u05e8\u05df","type":"string"}}]},"qualifiers-order":["P98959"],"id":"Q254824$97795AA8-EF43-4C1B-A562-BC9959BED9E5","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100266":[{"mainsnak":{"snaktype":"value","property":"P100266","hash":"276ee3bbbb7bd11d79e0e02a4a7ba55968ba914b","datavalue":{"value":{"entity-type":"item","numeric-id":254719,"id":"Q254719"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"56ab468a2308d2ab7c300258e938e4a5ad235799","datavalue":{"value":{"entity-type":"item","numeric-id":254721,"id":"Q254721"},"type":"wikibase-entityid"}}],"P81772":[{"snaktype":"value","property":"P81772","hash":"0e734523548949d85d55394a4e85dc19b8187918","datavalue":{"value":"Ms. 101","type":"string"}}]},"qualifiers-order":["P100258","P81772"],"id":"Q254824$8EC469A5-610E-4C88-A4AE-04AC92CC2DC9","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100309":[{"mainsnak":{"snaktype":"value","property":"P100309","hash":"8b387d33ae0f6fff9ac81bd973dc4891f286bf4b","datavalue":{"value":{"text":"\u05d4\u05de\u05e2\u05ea\u05d9\u05e7: \u05d9\u05d5\u05e1\u05e3 \u05d1\u05df \u05e8\u05e6\u05d5\u05df \u05d1\u05df \u05e9\u05de\u05d5\u05d0\u05dc \u05d1\u05e8\u05db\u05d4.","language":"he"},"type":"monolingualtext"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fa1aa570a5cbd1786154960c9d003d559f811b46","datavalue":{"value":{"entity-type":"item","numeric-id":248293,"id":"Q248293"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254824$14511265-B761-4B46-B369-53BFBE83B017","rank":"normal","references":[{"hash":"ffd4ec06eae360c8cda4513d05d4d3263830198e","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"57868ee2e594cf5d31e165fb07cd239cc05c9424","datavalue":{"value":"990001067870205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"bc71e5ed00639ffe380f0dfe54c95a88982c0cd6","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001067870205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
jh1r3y4tidf5kj8yy3vapo43oej9ihn
Q254825
0
346609
807001
2026-11-10T08:29:45Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +22 claims; local_id=QDraft_MS_990001351390205171
807001
wikibase-item
application/json
{"type":"item","id":"Q254825","labels":{"en":{"language":"en","value":"Columbia University Library. New York, USA. Ms. X 893 Ab 71"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9, Columbia University Libraries, Ms. X 893 Ab 71"}},"descriptions":{"en":{"language":"en","value":"Portuguese manuscript, 1682, Columbia University Library, New York, Ms. X 893 Ab 71"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9, 1682, Columbia University Libraries"}},"aliases":{"en":[{"language":"en","value":"Compendio de diferentes materias"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"750dfe16cc132894f8212e3cfe9782a69155ad66","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10021","type":"string"}},"type":"statement","id":"Q254825$3EBF1EC9-3E82-471B-8CFB-C8A3BA34A7C5","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$56F0BC4A-6E99-4021-BE1D-7404C9791414","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"70d51fa9742fe645fa26e1b449fede701cfdcf82","datavalue":{"value":{"entity-type":"item","numeric-id":254724,"id":"Q254724"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$6B64A439-75B2-4C33-937A-2FC0104D1757","rank":"preferred","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"92ab901877b0f1109498c08b2e2ce5a35fc9fc46","datavalue":{"value":{"entity-type":"item","numeric-id":254693,"id":"Q254693"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$61D971BF-A0E1-46E0-B131-30B0DF9ACD76","rank":"preferred","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"64e70579f4773ea1efb5123f66332c2cd822eac8","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10021","type":"string"}},"type":"statement","id":"Q254825$90B4A4BA-2F81-46FB-AF22-11F4ABBF7DCE","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"b37b490d66e8732e1d7b082af4ae044e41671f1b","datavalue":{"value":{"entity-type":"item","numeric-id":248997,"id":"Q248997"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$7F8681BA-1426-4467-AB37-CE803610AC19","rank":"preferred","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"d722613cfe61d2ecaa8800fcdba990853f7a9447","datavalue":{"value":"Ms. X 893 Ab 71","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"b37b490d66e8732e1d7b082af4ae044e41671f1b","datavalue":{"value":{"entity-type":"item","numeric-id":248997,"id":"Q248997"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254825$33630F8A-70D3-4042-8C24-2F20E3D0123E","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}},"type":"statement","id":"Q254825$1FC48D3F-3F0E-4CFF-9A95-861E4F6A1747","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254825$833DB5D6-3C25-492B-B9C1-3C76F88244D9","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"e4caa42f40fd6fd17dd2c1296a8f0dfff0c568d8","datavalue":{"value":{"text":"Compendio de diferentes materias","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q254825$B7B4BB1F-A661-4501-ADB4-CE20B8379DC1","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"35638541800ea1f9f7adeba07d7586f1a0079e57","datavalue":{"value":{"entity-type":"item","numeric-id":251489,"id":"Q251489"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$6B773983-3965-4802-9B8B-35D1FBB62C62","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$AAFFAD54-B5B8-4C14-8A37-FE7BEE9CED77","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"eebcd5b0e78b4f6022aacee57b67fa1e004757fe","datavalue":{"value":{"entity-type":"item","numeric-id":254698,"id":"Q254698"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$2236DC0E-402E-45BC-BE73-7FDE2D77B337","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$6FE70374-5EC2-483D-B261-61398FC5D35E","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"43d309e24cd3f6d3e56bfe92887469bc9bbae3a6","datavalue":{"value":{"time":"+1682-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q254825$D1061862-473D-425C-812F-1C3CCD4612F5","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"93782a9da75e6f7c4ef043915de1447d7b9d53fc","datavalue":{"value":{"amount":"+76","unit":"http:\/\/test.wikidata.org\/entity\/Q248286"},"type":"quantity"}},"type":"statement","id":"Q254825$0221BF0D-E584-4E41-ACC9-380655C0F4DF","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P1173":[{"mainsnak":{"snaktype":"value","property":"P1173","hash":"00d12b386c9bc28155e1a7c4df6bc7f86b832f56","datavalue":{"value":{"entity-type":"item","numeric-id":254729,"id":"Q254729"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$C8CE9C05-7E83-4163-BAB3-60862DA1E868","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P1173","hash":"6cb695f61a19d14470a1007256f375fc53e95774","datavalue":{"value":{"entity-type":"item","numeric-id":254731,"id":"Q254731"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$D6CD3F1E-A581-403F-9A52-4A97FC7AE6E5","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P1173","hash":"87355f1cb289914792c151d7fc2a65ed228f7b01","datavalue":{"value":{"entity-type":"item","numeric-id":254732,"id":"Q254732"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254825$E2868B37-FE43-472E-92CA-A4A360A41E0A","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100672":[{"mainsnak":{"snaktype":"value","property":"P100672","hash":"79c5da45f652bf4d88c6afbbb0370a160f7f3429","datavalue":{"value":"I. Mendelsohn, Descriptive catalogue of Semitic manuscripts (mostly Hebrew) in the libraries of Columbia University (typewritten PH 3857, F 17153, F 18337), no. 9-10.","type":"string"}},"type":"statement","id":"Q254825$F4BCD963-841D-4CE1-B15B-33E1224D94DC","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254825$94468BDF-6AE3-4BC9-AD37-F0D32F80BAF4","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100309":[{"mainsnak":{"snaktype":"value","property":"P100309","hash":"83471898d3bb003da38a934adc5c32c87557789e","datavalue":{"value":{"text":"\u05d4\u05de\u05e2\u05ea\u05d9\u05e7: \"\u05d1' \u05e9\u05e0\u05d9\u05d0\u05d5\u05e8\" [=\u05d1\u05e0\u05d9\u05de\u05d9\u05df \u05e9\u05e0\u05d9\u05d0\u05d5\u05e8-\u05d2\u05d5\u05d3\u05d9\u05e0\u05d4].","language":"he"},"type":"monolingualtext"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fa1aa570a5cbd1786154960c9d003d559f811b46","datavalue":{"value":{"entity-type":"item","numeric-id":248293,"id":"Q248293"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254825$8DA5720F-E48A-4E46-8021-A4D3B9F23725","rank":"normal","references":[{"hash":"d2eb313d45ad67f99998ac8edc6927635b29afe3","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"b23b7d56d5228e4604ffdc1aad3b761ce7a0343e","datavalue":{"value":"990001351390205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"f19475d343b54d084f2b39abab223b8a8a183aef","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001351390205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
le3cmgcwy9i642f28km19cgfjjkdxsv
Q254827
0
346610
807002
2026-11-10T08:29:48Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +16 claims; local_id=QDraft_MS_990001366520205171
807002
wikibase-item
application/json
{"type":"item","id":"Q254827","labels":{"en":{"language":"en","value":"Nahum, Yehuda. Holon, Israel. Ms. 122"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05d1\u05e8\u05d9, Nahum, Yehuda, Ms. 122"}},"descriptions":{"en":{"language":"en","value":"Hebrew manuscript, 1653, Yemenite script, Nahum, Yehuda, Holon, Ms. 122"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05d1\u05e8\u05d9, 1653, Nahum, Yehuda"}},"aliases":{"he":[{"language":"he","value":"\u05ea\u05db\u05dc\u05d0\u05dc (\u05e7\u05d8\u05e2)"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"627f882c7f1b2e8667d9989b5cf5bf457439f292","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10048","type":"string"}},"type":"statement","id":"Q254827$AA5DFF11-181D-4D53-B69A-0F0110247E90","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254827$F1F0A5BD-C090-4369-8725-AD9765494820","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"9bc92f3096e558fd9cda106d01c5da991b5ea83b","datavalue":{"value":{"entity-type":"item","numeric-id":254725,"id":"Q254725"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254827$BE56A523-3AA5-4C9D-ACB2-620C1355A354","rank":"preferred","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"441474869113649d86fcf15dd15a84a4f12359e2","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10048","type":"string"}},"type":"statement","id":"Q254827$7217242D-BF6B-4217-AAA1-FD13F0AD46A9","rank":"normal"}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"e16fe59aa4436c67dbfe6b2e8ee3adc0dbf78740","datavalue":{"value":"Ms. 122","type":"string"}},"type":"statement","id":"Q254827$2450FC0C-476D-47AC-8F6A-76D40FF8BC8E","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}},"type":"statement","id":"Q254827$CD93A16B-D0A0-4524-930F-670377E9DD72","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254827$E9907578-DDA2-4EDE-9B61-F4D8059E5563","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"1b2bb39b8b185b21801c0f72f074a6d56c565c1d","datavalue":{"value":{"text":"\u05ea\u05db\u05dc\u05d0\u05dc (\u05e7\u05d8\u05e2)","language":"he"},"type":"monolingualtext"}},"type":"statement","id":"Q254827$81E52CE9-C2EF-4EDC-AFFD-375B00BE1521","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254827$9404B226-6316-4AA7-905D-80ADE575A1F4","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254827$B3DF6BEC-C379-48CE-9AC8-585F70CF11FC","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100667":[{"mainsnak":{"snaktype":"value","property":"P100667","hash":"dbfbee464cd82abe4e8458c68a98ca0d685f3170","datavalue":{"value":{"entity-type":"item","numeric-id":254703,"id":"Q254703"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254827$C7DECB20-C94C-4B25-ABC5-FE3356E7B7F8","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"9dcf0dbc9828cc607d37075da22fc18376d7cc84","datavalue":{"value":{"time":"+1653-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","qualifiers":{"P98959":[{"snaktype":"value","property":"P98959","hash":"ef31c82a75949428058697742461cf83667107f8","datavalue":{"value":"\u05ea\u05d9\"\u05d2","type":"string"}}]},"qualifiers-order":["P98959"],"id":"Q254827$9A58AF36-5E39-4399-A639-AA561775BB0F","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"a0f39039d547c99ffe35db6de598764a0268c51d","datavalue":{"value":{"amount":"+46","unit":"http:\/\/test.wikidata.org\/entity\/Q248286"},"type":"quantity"}},"type":"statement","id":"Q254827$29A4B2A7-D86D-4992-A3CD-E64582DB4270","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100672":[{"mainsnak":{"snaktype":"value","property":"P100672","hash":"71f1516dc57efbdc5550ac98533899051120fa24","datavalue":{"value":"Catalogue Nahum, Holon: 276","type":"string"}},"type":"statement","id":"Q254827$B3E8E14E-60D4-4B37-ADF2-067C84DCB327","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100672","hash":"84b3a4f034d1b9996b0e97a3780ed9d8dbb9213e","datavalue":{"value":"\u05d9' \u05dc' \u05e0\u05d7\u05d5\u05dd, \u05e6\u05d4\u05e8 \u05dc\u05d7\u05e9\u05d9\u05e4\u05ea \u05d2\u05e0\u05d6\u05d9 \u05ea\u05d9\u05de\u05df, \u05ea\u05dc-\u05d0\u05d1\u05d9\u05d1, \u05ea\u05e9\u05de\"\u05d5, \u05de\u05e1. 276.","type":"string"}},"type":"statement","id":"Q254827$C295942C-AC39-497E-84B2-31986AA59BD8","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254827$A6E94808-B2ED-479C-8252-F88DD010F21A","rank":"normal","references":[{"hash":"ef9ff932354dc551a454879835860b6d36ded88b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"4f18ddcf1afdd23d4c757d09945d6c298e0194b1","datavalue":{"value":"990001366520205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91111344606afae4e4356649310d104f8169db2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001366520205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
hezfxbwx8kdtzxu16qzawkjubda9z1x
Q254828
0
346611
807003
2026-11-10T08:29:50Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +20 claims; local_id=QDraft_MS_990001205430205171
807003
wikibase-item
application/json
{"type":"item","id":"Q254828","labels":{"en":{"language":"en","value":"The British Library. London, England. Or. 1475"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05d1\u05e8\u05d9, British Library, Or. 1475"}},"descriptions":{"en":{"language":"en","value":"Hebrew manuscript, 1605, Yemenite script, The British Library, London, Or. 1475"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05d1\u05e8\u05d9, 1605, British Library"}},"aliases":{"he":[{"language":"he","value":"\u05db\u05ea\u05d5\u05d1\u05d9\u05dd"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"48dec0007c1a4c839f39c34541418406be34a31e","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9823","type":"string"}},"type":"statement","id":"Q254828$A68AB73D-7404-43B4-B0FC-7CD0FC8294BA","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254828$FE0ED78A-2C89-4369-92C9-BEF9D211FBB5","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"92ab901877b0f1109498c08b2e2ce5a35fc9fc46","datavalue":{"value":{"entity-type":"item","numeric-id":254693,"id":"Q254693"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254828$8535010A-C1D7-449A-9AF2-85F7E7E8B430","rank":"preferred","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"35b5921f9ff161831eafc6afc32131e8c44904bc","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9823","type":"string"}},"type":"statement","id":"Q254828$597FADD3-C374-4D33-A56F-AFBBAF028BED","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"f5c563a19470be553fbd5f1c1e1f1cadbd02beed","datavalue":{"value":{"entity-type":"item","numeric-id":248982,"id":"Q248982"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254828$27A9FC08-FDAA-4458-A1A6-BB6B1B2B82F5","rank":"preferred","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"8b96ec4b79a08ae2eb6ac3daa2ce62b64bb6e19f","datavalue":{"value":"Or. 1475","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"f5c563a19470be553fbd5f1c1e1f1cadbd02beed","datavalue":{"value":{"entity-type":"item","numeric-id":248982,"id":"Q248982"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254828$5F521311-1694-4562-BD56-34355E9BC91B","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}},"type":"statement","id":"Q254828$959439E2-CE7F-40C7-9AC6-41434258A41E","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254828$AFAA942C-7A18-4D84-8DD7-062DA732EFB0","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"68acc94e715258aef9d039d8c44e81c0ed6124c8","datavalue":{"value":{"text":"\u05db\u05ea\u05d5\u05d1\u05d9\u05dd","language":"he"},"type":"monolingualtext"}},"type":"statement","id":"Q254828$5391ED29-592A-4658-A422-70350370278F","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254828$1674AC11-7E80-4B69-B6DD-AD4F0956E61D","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254828$AF02CEBE-AFFD-40F7-A8C4-D5117C3537A6","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100667":[{"mainsnak":{"snaktype":"value","property":"P100667","hash":"dbfbee464cd82abe4e8458c68a98ca0d685f3170","datavalue":{"value":{"entity-type":"item","numeric-id":254703,"id":"Q254703"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254828$52E67DB3-2666-46F7-A13B-95CF916F7813","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100667","hash":"a86f8ce55e3251629083be44d309fdd7af96fa8a","datavalue":{"value":{"entity-type":"item","numeric-id":254730,"id":"Q254730"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254828$81EAA0F5-6F82-47C9-9FF4-49089BDBD4AF","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"86da8461b912576ee461658d041fa648c8e2a5ed","datavalue":{"value":{"time":"+1605-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","qualifiers":{"P98959":[{"snaktype":"value","property":"P98959","hash":"06e9c3d6b5470e77dc27fb8a1ef6261d6d195370","datavalue":{"value":"\u05ea\u05ea\u05e7\u05d9\"\u05d5","type":"string"}}]},"qualifiers-order":["P98959"],"id":"Q254828$B5D2B83D-B400-43E8-8BAE-DFCC6D4C5856","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"07d551f89b8fbfeb368fda86c93f5aea2445632f","datavalue":{"value":{"amount":"+138","unit":"http:\/\/test.wikidata.org\/entity\/Q248286"},"type":"quantity"}},"type":"statement","id":"Q254828$26C92A59-215E-4378-AE65-F67BD48C0FC8","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100672":[{"mainsnak":{"snaktype":"value","property":"P100672","hash":"77c664ee99ab48bb0e78c387c85c8192ed87e786","datavalue":{"value":"Catalogue Margoliouth: 153","type":"string"}},"type":"statement","id":"Q254828$DEF42CE8-7FD2-42B1-890B-FA9391A5BDA5","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100672","hash":"0a55898e32d37b80683c6a324e9506ba4a925358","datavalue":{"value":"G. Margoliouth, Catalogue of the Hebrew and Samaritan manuscripts in the British Museum (London, 1899-1935, 4 vols)","type":"string"}},"type":"statement","id":"Q254828$BE8B5DC7-E9D1-4F4C-A3B3-6186D95CEADE","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254828$8C7597C1-BA41-477E-9F1B-D632493A1343","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100234":[{"mainsnak":{"snaktype":"somevalue","property":"P100234","hash":"078c9391808ef80ef5026f369ed16b8b99fd2e9a"},"type":"statement","qualifiers":{"P98959":[{"snaktype":"value","property":"P98959","hash":"aeaf4a0509de1a7dbc2072c3f79d2f3506beb251","datavalue":{"value":"\u05d5\u05e0\u05d4, \u05d0\u05d1\u05e8\u05d4\u05dd \u05d1\u05df \u05d9\u05d5\u05e1\u05e3 \u05d1\u05df \u05e1\u05e2\u05d3\u05d9\u05d4","type":"string"}}]},"qualifiers-order":["P98959"],"id":"Q254828$CBF9F000-72C0-4C9E-8107-3EE0697EDA51","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100309":[{"mainsnak":{"snaktype":"value","property":"P100309","hash":"2e8f4c0f7b54306fcace57a2cce16aa74e5e0722","datavalue":{"value":{"text":"\"\u05e0\u05e9\u05dc\u05dd \u05d6\u05d4 \u05d4\u05db\u05ea\u05d5\u05d1\u05d9\u05dd \u05d1\u05e2\u05d6\u05e8\u05ea \u05d4\u05d0\u05dc \u05d5\u05d1\u05e8\u05d7\u05de\u05d9\u05d5 \u05d1\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9 \u05d1\u05e9\u05dc\u05d5\u05e9\u05d4 \u05e2\u05e9\u05e8 \u05dc\u05d7\u05d3\u05e9 \u05ea\u05de\u05d5\u05d6 \u05e9\u05e0\u05ea \u05d0\u05ea\u05ea\u05e7\u05d9\u05d5 \u05e2\u05dc \u05e9\u05dd \u05d4\u05ea\u05dc\u05de\u05d9\u05d3\u05d9\u05dd \u05d4\u05d8\u05d5\u05d1\u05d9\u05dd \u05d4\u05d0\u05d4\u05d5\u05d1\u05d9\u05dd \u05d4\u05d7\u05d8\u05d5\u05d1\u05d9\u05dd \u05d0\u05d1\u05e8\u05dd \u05d5\u05d6\u05db\u05e8\u05d9\u05d0 \u05d5\u05d3\u05d5\u05d9\u05d3 \u05d1\u05e0\u05d9 \u05e9\u05dc\u05de\u05d4 \u05d1\u05df \u05d3\u05d5\u05d9\u05d3 \u05d4\u05d9\u05d3\u05d5\u05e2 \u05d0\u05dc\u05d8\u05d1\u05d9\u05e2\u05d4 \u05d4' \u05d9\u05d6\u05db\u05d4 \u05d0\u05d5\u05ea\u05dd \u05dc\u05d4\u05d2\u05d5\u05ea \u05d1\u05d5 \u05d5\u05dc\u05d3\u05e7\u05d3\u05e7 \u05d1\u05e2\u05e0\u05d9\u05e0\u05d9\u05d5 \u05d5\u05dc\u05d2\u05dc\u05d5\u05ea \u05de\u05e6\u05e4\u05d5\u05e0\u05d9\u05d5 \u05d5\u05d9\u05d6\u05db\u05d4 \u05d0\u05d5\u05ea\u05dd \u05dc\u05db\u05dc \u05de\u05d3\u05d4 \u05d8\u05d5\u05d1\u05d4 \u05d5\u05dc\u05e9\u05de\u05d7\u05ea \u05d1\u05d9\u05ea \u05d4\u05e9\u05d0\u05d5\u05d1\u05d4 \u05d0\u05e0\u05e1\"\u05dc \u05d0\u05e0\u05d9 \u05d4\u05e2\u05d1\u05d3 \u05d4\u05e6\u05e2\u05d9\u05e8 \u05d4\u05e7\u05dc \u05d4\u05e0\u05e7\u05dc \u05e7\u05d8\u05df \u05d4\u05e1\u05d5\u05e4\u05e8\u05d9\u05dd \u05e6\u05e2\u05d9\u05e8 \u05d4\u05ea\u05dc\u05de\u05d9\u05d3\u05d9\u05dd \u05d4\u05de\u05ea\u05d0\u05d1\u05e7 \u05d1\u05e2\u05e4\u05e8 \u05e8\u05d2\u05dc\u05d9 \u05d4\u05d7\u05db\u05de\u05d9\u05dd \u05d0\u05d1\u05e8\u05d4\u05dd \u05d1' \u05e8\u05d1 \u05d9\u05d5\u05e1\u05e3 \u05d1\u05df \u05e1\u05e2\u05d3\u05d9\u05d4 \u05d4\u05d9\u05d3\u05d5\u05e2 \u05d5\u05e0\"\u05d4 \u05d4' \u05d9\u05de\u05d7\u05d5\u05dc \u05dc\u05d9 \u05e2\u05dc \u05db\u05dc \u05de\u05d4 \u05e9\u05e9\u05d2\u05d9\u05ea\u05d9 \u05d5\u05d8\u05e2\u05d9\u05ea\u05d9 \u05d5\u05e0\u05e1\u05ea\u05e8 \u05de\u05e2\u05d9\u05e0\u05d9 \u05db\u05de\u05d0\u05de\u05e8 \u05e8\u05d1\u05d9\u05e0\u05d5 \u05d3\u05d5\u05d9\u05d3 \u05de\u05dc\u05da \u05d9\u05e9\u05e8\u05d0\u05dc \u05e9\u05d2\u05d9\u05d0\u05d5\u05ea \u05de\u05d9 \u05d9\u05d1\u05d9\u05df \u05de\u05e0\u05e1\u05ea\u05e8\u05d5\u05ea \u05e0\u05e7\u05d9\u05e0\u05d9 [...] \u05d9\u05d9\u05d9 \u05e6\u05d5\u05e8\u05d9 \u05d5\u05d2\u05d5\u05d0\u05dc\u05d9 \u05e9'\u05d5'\u05e9'\u05e8'\u05e9' \u05d1'\u05de'\u05e9' \u05dc' \u05db'\u05d9' \u05e2'\u05de'\u05e8'\u05d0.","language":"he"},"type":"monolingualtext"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fa1aa570a5cbd1786154960c9d003d559f811b46","datavalue":{"value":{"entity-type":"item","numeric-id":248293,"id":"Q248293"},"type":"wikibase-entityid"}}],"P100685":[{"snaktype":"value","property":"P100685","hash":"81d8b264ce6519ef845d17c31c1b55da368151f8","datavalue":{"value":"138\u05d1","type":"string"}}]},"qualifiers-order":["P100258","P100685"],"id":"Q254828$B0B8DFEB-3969-4069-AD75-BAA42CB7AC85","rank":"normal","references":[{"hash":"7ab006f6b9949eeb1ab46d8f9700bb4109f1ab06","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"7ee1e42cd7fe4d1e7cac8f3ea1da827ae70d47c8","datavalue":{"value":"990001205430205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"91cd25dc4ee698f313ad5e02b1729ee659479039","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001205430205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
r07ktg44eyfhh7grl9w6uvsu5liblxm
Q254829
0
346612
807004
2026-11-10T08:29:51Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +16 claims; local_id=QDraft_MS_990001078470205171
807004
wikibase-item
application/json
{"type":"item","id":"Q254829","labels":{"en":{"language":"en","value":"The Jewish Theological Seminary of America. New York, USA. Ms. 4144"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05d1\u05e8\u05d9, Jewish Theological Seminary Library, Ms. 4144"}},"descriptions":{"en":{"language":"en","value":"Hebrew manuscript, 1616, Italian script, The Jewish Theological Seminary of America, New York, Ms. 4144"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e2\u05d1\u05e8\u05d9, 1616, Jewish Theological Seminary Library"}},"aliases":{"he":[{"language":"he","value":"\u05ea\u05e4\u05dc\u05d5\u05ea \u05e9\u05e0\u05d0\u05de\u05e8\u05d5 \u05d1\u05d7\u05d1\u05e8\u05ea \u05de\u05e2\u05d9\u05e8\u05d9 \u05e9\u05d7\u05e8 \u05d1\u05de\u05d5\u05d3\u05d9\u05e0\u05d0"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"4acab373eb8696275cc30b1257b26aaf23e075a2","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9620","type":"string"}},"type":"statement","id":"Q254829$A6F1E708-90E9-413D-888B-A290EC1B7435","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254829$96B04658-4479-447D-865A-8102C2B6502C","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"92ab901877b0f1109498c08b2e2ce5a35fc9fc46","datavalue":{"value":{"entity-type":"item","numeric-id":254693,"id":"Q254693"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254829$5553A59B-B979-4DAC-BF98-5615D694B853","rank":"preferred","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"a567ae89aa53274803b63716f5a32b64f2d37f34","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q9620","type":"string"}},"type":"statement","id":"Q254829$731014B7-86E8-4AD2-BF67-4806FF8CF8AC","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"62527837c89e378279bb66f515e0760c94f5c1af","datavalue":{"value":{"entity-type":"item","numeric-id":248986,"id":"Q248986"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254829$B1183CD7-1445-4365-A904-88FAB9F97A64","rank":"preferred","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"542b1f49f82578c4a3dc706ce9c6af16123340f6","datavalue":{"value":"Ms. 4144","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"62527837c89e378279bb66f515e0760c94f5c1af","datavalue":{"value":{"entity-type":"item","numeric-id":248986,"id":"Q248986"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254829$F3DC8E1B-9570-4A55-8F5E-C879D5D68D70","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}},"type":"statement","id":"Q254829$BC2D4790-BBD9-436A-B9B7-8A612A5EFE03","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254829$4449DA9D-7873-410B-B875-505C3F87E48C","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"623aea88e76183681a9d77753069ad5e83e13b82","datavalue":{"value":{"text":"\u05ea\u05e4\u05dc\u05d5\u05ea \u05e9\u05e0\u05d0\u05de\u05e8\u05d5 \u05d1\u05d7\u05d1\u05e8\u05ea \u05de\u05e2\u05d9\u05e8\u05d9 \u05e9\u05d7\u05e8 \u05d1\u05de\u05d5\u05d3\u05d9\u05e0\u05d0","language":"he"},"type":"monolingualtext"}},"type":"statement","id":"Q254829$C2A6AEC0-7067-471B-92D2-7FF664EB99F7","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254829$A49C21EC-CB22-4240-9266-31E51041836F","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254829$36B9CC81-C1B0-4EF3-83C4-C0B1C2F1D8FE","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100667":[{"mainsnak":{"snaktype":"value","property":"P100667","hash":"be975d235a22100382c7348e98f7c8f1bc2ad327","datavalue":{"value":{"entity-type":"item","numeric-id":248516,"id":"Q248516"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254829$8B4060C3-A2A9-4B36-B63D-89863DAE99CB","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"7022e8cc9d1632c09f20d017b74a1af128c3bafe","datavalue":{"value":{"time":"+1616-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","qualifiers":{"P98959":[{"snaktype":"value","property":"P98959","hash":"5676bf39519fc7586a6590156f364fb25793e8fc","datavalue":{"value":"\u05e9\u05e2\"\u05d6 (1616)","type":"string"}}]},"qualifiers-order":["P98959"],"id":"Q254829$1BE23794-6464-44D7-8D41-D26700905EDB","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100670":[{"mainsnak":{"snaktype":"value","property":"P100670","hash":"aa54c8cef32a6ff0703b21ce4ea00fb280500f2f","datavalue":{"value":{"entity-type":"item","numeric-id":254722,"id":"Q254722"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254829$FB44AF56-4A14-4A8D-9C7C-538053F387C2","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"8a27aee372036e58abe28d017cb6403e92b7eb6d","datavalue":{"value":{"amount":"+33","unit":"http:\/\/test.wikidata.org\/entity\/Q248286"},"type":"quantity"}},"type":"statement","id":"Q254829$E7D279E4-FDCF-43C0-A083-58DD091844CB","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254829$2C8E1865-7207-4548-99CE-E356E1EC666B","rank":"normal","references":[{"hash":"e8f6645b5e0141db847ce4790bdda65ffc1d6f53","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"c3b15c6aa0c7a2098b9e10469cd65a9155198d17","datavalue":{"value":"990001078470205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"79cf74beced6993f0e816ab1ee9da04f71b3627f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001078470205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
6akbcp2uv240dpinx2spx99d6vqnsxi
Q254832
0
346613
807005
2026-11-10T08:30:01Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +13 claims; local_id=QDraft_MS_990001680850205171
807005
wikibase-item
application/json
{"type":"item","id":"Q254832","labels":{"en":{"language":"en","value":"Lower Saxony State Archives of Hannover. Hannover, Germany. Ms. Cod. Br. 23"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05d1\u05d9\u05d9\u05d3\u05d9\u05e9, Lower Saxony State Archives of Hannover, Ms. Cod. Br. 23"}},"descriptions":{"en":{"language":"en","value":"Yiddish manuscript, 1681, Lower Saxony State Archives of Hannover, Ms. Cod. Br. 23"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05d1\u05d9\u05d9\u05d3\u05d9\u05e9, 1681, Lower Saxony State Archives of Hannover"}},"aliases":{"he":[{"language":"he","value":"\u05d0\u05d2\u05e8\u05d5\u05ea \u05d1\u05d9\u05d9\u05d3\u05d9\u05e9"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"6d811e0de8185cc2270347af2b795da4efdc682c","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10173","type":"string"}},"type":"statement","id":"Q254832$D633E347-0901-40C5-8DD5-001D65A461C4","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254832$965C4099-8B26-4F73-B680-95DD816F4C8D","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"1711b7cc5eb2e94b9be50745c78444ae1cfd4d3f","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10173","type":"string"}},"type":"statement","id":"Q254832$6452AC75-4D23-455C-AFD5-F3F5DE413FFF","rank":"normal"}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"10ba6598b9c8c413f120f64bad318a7164646ff5","datavalue":{"value":"Ms. Cod. Br. 23","type":"string"}},"type":"statement","id":"Q254832$98B33E73-3D3D-4E85-889D-7D7E67A346B9","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}},"type":"statement","id":"Q254832$CA0CD63D-2E6D-4368-BEA8-01092B1615E3","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254832$0055D2B6-8281-42D3-8430-AE1E4D29C91C","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"38a76425ffaeea8fe99377ca4e0ee124463986a9","datavalue":{"value":{"text":"\u05d0\u05d2\u05e8\u05d5\u05ea \u05d1\u05d9\u05d9\u05d3\u05d9\u05e9","language":"he"},"type":"monolingualtext"}},"type":"statement","id":"Q254832$C42AF2F2-A941-40EC-A5CD-741E0F4AEF23","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"56f9f9a5aba5e9c39653dcd767f1c141fb2c86c7","datavalue":{"value":{"entity-type":"item","numeric-id":248459,"id":"Q248459"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254832$BC88CE8E-CF05-4876-91F9-696B64C8A88B","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254832$061E90C8-879B-4447-9BED-9EF4DD4728A4","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254832$EBF503C0-13D3-4767-B32D-2E8A135E6CFB","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"17ba1cc8e1e48ec3307214f927115a2078a48b98","datavalue":{"value":{"time":"+1681-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","qualifiers":{"P98959":[{"snaktype":"value","property":"P98959","hash":"7f2898496af1d504499a5ba2c69ad8043769bbbf","datavalue":{"value":"\u05ea\u05de\"\u05d0","type":"string"}}]},"qualifiers-order":["P98959"],"id":"Q254832$929B216F-166A-445B-B2EA-13E3A5F0BDAF","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100311":[{"mainsnak":{"snaktype":"value","property":"P100311","hash":"f9d0e19965f848d8fbc2fa2f2990d6995b06cfae","datavalue":{"value":{"entity-type":"item","numeric-id":254727,"id":"Q254727"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254832$83F44BC8-2169-43CC-83EC-312DA9142200","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254832$58CEB920-71B1-49CB-A9A7-AF4CB49BCABB","rank":"normal","references":[{"hash":"c2321033e6a8d38e619bdee0d5c218c6a2f86d87","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"022d656db744302612808a03bfed781cc91acbe4","datavalue":{"value":"990001680850205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"dcb3dd187bb297ebf5db76f019e6418f1ebffc17","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001680850205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
67owi93jejqd6lhp87hc0uj4kss6eek
Q254833
0
346614
807006
2026-11-10T08:30:02Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +15 claims; local_id=QDraft_MS_990032575610205171
807006
wikibase-item
application/json
{"type":"item","id":"Q254833","labels":{"en":{"language":"en","value":"Bibliotheca Rosenthaliana. Amsterdam, Netherlands. Ms. Rosenthaliana Pl-A-12"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9, Bibliotheca Rosenthaliana, Ms. Rosenthaliana Pl-A-12"}},"descriptions":{"en":{"language":"en","value":"Portuguese manuscript, 1690, Bibliotheca Rosenthaliana, Amsterdam, Ms. Rosenthaliana Pl-A-12"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9, 1690, Bibliotheca Rosenthaliana"}},"aliases":{"en":[{"language":"en","value":"Conselhos de \u00e9tica"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"c053b6b0fcafd399cbadd1b0791086ac89311d63","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10548","type":"string"}},"type":"statement","id":"Q254833$D1C89E27-7047-4577-B849-6378A87B25FB","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254833$26C27ECA-1C25-4912-9A94-5E0809C74F90","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"d7f31e751e8c41248383333d7494e10d11263950","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10548","type":"string"}},"type":"statement","id":"Q254833$0ED82867-B5AD-4AC9-A358-96C28250817F","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"17f0e3de10c24c6488f4fb2b21d52b7f4082c881","datavalue":{"value":{"entity-type":"item","numeric-id":251487,"id":"Q251487"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254833$9F40F5F6-C17C-4C64-977C-6EA803A2D147","rank":"preferred","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"e0da47ca917774d2c150293be5ab649874718ea0","datavalue":{"value":"Ms. Rosenthaliana Pl-A-12","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"17f0e3de10c24c6488f4fb2b21d52b7f4082c881","datavalue":{"value":{"entity-type":"item","numeric-id":251487,"id":"Q251487"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254833$6D2D9B1B-7410-4B5E-B119-B7EB62D5D396","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}},"type":"statement","id":"Q254833$C0455C6A-EDB2-45AD-87EB-BF971A69E286","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254833$965414E8-C90C-4DA8-834D-9FFD7B535A03","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"3278892066f3ecff9600154bb1158e29d328184d","datavalue":{"value":{"text":"Conselhos de \u00e9tica","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q254833$F7ADBC6A-91C3-4683-BFBF-247041F77C25","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"35638541800ea1f9f7adeba07d7586f1a0079e57","datavalue":{"value":{"entity-type":"item","numeric-id":251489,"id":"Q251489"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254833$0E78074C-3EDA-4221-8755-03E6E33E03C4","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254833$C4BFB283-DE07-44B8-BD21-85486CDB8CE6","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"eebcd5b0e78b4f6022aacee57b67fa1e004757fe","datavalue":{"value":{"entity-type":"item","numeric-id":254698,"id":"Q254698"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254833$9E247421-6728-48B6-AC79-8557C718FC57","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254833$BBD152D9-A45E-491E-9933-D72EB592BDD8","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"f28fb417db8bc48483995a8d5b114cf64741a745","datavalue":{"value":{"time":"+1690-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q254833$901D8A85-8F5A-4E89-80D8-4DF7CB030385","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P1173":[{"mainsnak":{"snaktype":"value","property":"P1173","hash":"d6ecd80ec3d4ec62ce6d5af51e3b9ede0fa7948a","datavalue":{"value":{"entity-type":"item","numeric-id":254737,"id":"Q254737"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254833$DD26E82C-1430-4194-BA66-ADB9CFE8C784","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254833$2C6EE52B-E134-47E8-A9EA-2A84428DDA9E","rank":"normal","references":[{"hash":"c56938dc62ec761c9d32f92ef8ede305a0967be9","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"5577159c6d6bc8316eccc9c80c1914ccb3431575","datavalue":{"value":"990032575610205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"9addb473682f7007ba7034e0b68f1c344b7def2c","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990032575610205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
m4iyez6cb2lp9bbeo22lvxi7pyihjjl
Q254834
0
346615
807007
2026-11-10T08:30:04Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +15 claims; local_id=QDraft_MS_990001710490205171
807007
wikibase-item
application/json
{"type":"item","id":"Q254834","labels":{"en":{"language":"en","value":"The National Library of the Czech Republic. Prague, Czech Republic. Ms. XVIII F 2"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05dc\u05d8\u05d9\u05e0\u05d9, The National Library of the Czech Republic, Ms. XVIII F 2"}},"descriptions":{"en":{"language":"en","value":"Latin manuscript, 1699, The National Library of the Czech Republic, Prague, Ms. XVIII F 2"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05dc\u05d8\u05d9\u05e0\u05d9, 1699, The National Library of the Czech Republic"}},"aliases":{"en":[{"language":"en","value":"Grammatica Hebraica"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"f83087fa292a03821f06288ca49e238945d10878","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10199","type":"string"}},"type":"statement","id":"Q254834$23493F37-A7C6-4F4E-9381-F37EE00236ED","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254834$0B2F2878-B820-4ED1-BFC9-3D6CB92E45D5","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"92ab901877b0f1109498c08b2e2ce5a35fc9fc46","datavalue":{"value":{"entity-type":"item","numeric-id":254693,"id":"Q254693"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254834$B0D866DF-259C-4E13-8FBA-4215925AC55F","rank":"preferred","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"6414c9b1e1b30f5e4428134afab084cde7b11a26","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10199","type":"string"}},"type":"statement","id":"Q254834$A9889A08-09B4-4B49-9EFC-1FF7726EA4F4","rank":"normal"}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"345f3395ff70c256e1c9454d4e4a6f32bde1bc55","datavalue":{"value":"Ms. XVIII F 2","type":"string"}},"type":"statement","id":"Q254834$B1A69432-52A0-44FE-9834-0FB2E193373E","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}},"type":"statement","id":"Q254834$BA583827-5CA0-4E16-BD8B-B4A8F5A6927B","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254834$3FFFB3AF-102D-404A-B9ED-6A0FF8FDA58F","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"014e493d08798af4b757e2ad10e661b6e5a2f8c9","datavalue":{"value":{"text":"Grammatica Hebraica","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q254834$E1709E5D-08F6-4318-A4E2-064F471FF892","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"2eec9e7f6a099680613437e21b91e3d32daecf36","datavalue":{"value":{"entity-type":"item","numeric-id":248487,"id":"Q248487"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254834$C9E840F8-02FE-46C6-BF36-35C2B9A85D8A","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254834$82370071-13DF-4FC1-B3AB-84C3750E771E","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"eebcd5b0e78b4f6022aacee57b67fa1e004757fe","datavalue":{"value":{"entity-type":"item","numeric-id":254698,"id":"Q254698"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254834$79AC85A8-DC65-42F1-AB47-FE173E89EC30","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254834$C69A8CD9-F214-4B24-A12E-3B61FC092016","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"f469ecc863c10307dcd4963b6be08f9ed33103c7","datavalue":{"value":{"time":"+1699-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q254834$F016F87B-DE4C-424B-8829-C9021344A669","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100670":[{"mainsnak":{"snaktype":"value","property":"P100670","hash":"b319b47da5ce9cbcae25b26e5b33f3023fb139c6","datavalue":{"value":{"entity-type":"item","numeric-id":254714,"id":"Q254714"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254834$1140E74B-19DE-4414-BBEC-F011649609FE","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"0730fe39a71ab63451f0f5138858e0217abdbff5","datavalue":{"value":{"amount":"+74","unit":"http:\/\/test.wikidata.org\/entity\/Q248286"},"type":"quantity"}},"type":"statement","id":"Q254834$A2800B27-194A-4E5F-8898-E8595FA85CCA","rank":"normal","references":[{"hash":"3a98837e0871edfba549b100ee95b0f5056dac8b","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f407dcdb42df943364b6597ff6d326e6b555f0c7","datavalue":{"value":"990001710490205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"8d2b58c6b32553840c4c2b57c149ca670a310311","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001710490205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
6h9crl51sv4niwt59ahgntg1fjely0w
Q254835
0
346616
807008
2026-11-10T08:30:05Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +16 claims; local_id=QDraft_MS_990001983830205171
807008
wikibase-item
application/json
{"type":"item","id":"Q254835","labels":{"en":{"language":"en","value":"Vatican Library. Vatican City, Vatican City State. Ms. ebr. 517"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05dc\u05d8\u05d9\u05e0\u05d9, Vatican Library, Ms. ebr. 517"}},"descriptions":{"en":{"language":"en","value":"Latin manuscript, 1666, Vatican Library, Vatican City, Ms. ebr. 517"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05dc\u05d8\u05d9\u05e0\u05d9, 1666, Vatican Library"}},"aliases":{"en":[{"language":"en","value":"Regole Facili della Lingua Hebraica"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"1c6fb4145f6d67f1c106dd0c06273ada12421db3","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10497","type":"string"}},"type":"statement","id":"Q254835$EB1106C7-D596-4244-A282-4545FF8C0E17","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254835$1757B4A4-B0BC-410B-9875-92D16D118C8C","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"e0c8463fa19acb99fee54be28294926f302573c8","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10497","type":"string"}},"type":"statement","id":"Q254835$EF9204C3-BE59-4E82-9C12-31772C0C19D8","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"707eeac8459ace8e2260da756174ffa97411c296","datavalue":{"value":{"entity-type":"item","numeric-id":251660,"id":"Q251660"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254835$C8682834-FDF7-4EF0-AE68-892BD469AB4B","rank":"preferred","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"109fb1b4298955324ac62296387c569df0b02d9e","datavalue":{"value":"Ms. ebr. 517","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"707eeac8459ace8e2260da756174ffa97411c296","datavalue":{"value":{"entity-type":"item","numeric-id":251660,"id":"Q251660"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254835$71FE0418-1BEF-4C5F-88D0-55AD7124DF91","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}},"type":"statement","id":"Q254835$98092850-820E-4669-A0B0-AB1DFD18869C","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254835$6E5FE4DF-91C6-4585-BF8A-930B52E559E7","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"d233c4ecfdfebce99ec5e01b69641d8831e46b0e","datavalue":{"value":{"text":"Regole Facili della Lingua Hebraica","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q254835$AA101A20-50F4-4E49-B1E6-8B12E8CCCE16","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"2eec9e7f6a099680613437e21b91e3d32daecf36","datavalue":{"value":{"entity-type":"item","numeric-id":248487,"id":"Q248487"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254835$904B1C9A-5F9D-46AC-B01B-ACE2ECFDCEE7","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254835$E5C9B9DA-AF12-4E1C-A24B-8F543F6FED5D","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254835$5DA1DEA7-0EBA-45ED-9C1C-C0F437E39805","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"28282e1a579920422a3cc0b5ca41da402e4c4eb7","datavalue":{"value":{"time":"+1666-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q254835$A5C6C25A-F870-4CBE-918E-51503CF92EC4","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100672":[{"mainsnak":{"snaktype":"value","property":"P100672","hash":"c9e4ce52ef27e18783ee4dc983b78ee9c4bcc9d5","datavalue":{"value":"Catalogue Allony-Loewinger Vatican: 517","type":"string"}},"type":"statement","id":"Q254835$14E65281-5CB1-4526-900C-6DD6703B6F99","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100672","hash":"b854929486b583d4641461de6ceba6b74065be77","datavalue":{"value":"\u05d0\u05dc\u05d5\u05e0\u05d9. \u05e0. \u05d5\u05dc\u05d5\u05d9\u05e0\u05d2\u05e8 \u05d3. \u05e9., \u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05e6\u05dc\u05d5\u05de\u05d9 \u05db\u05ea\u05d1\u05d9-\u05d4\u05d9\u05d3 \u05d4\u05e2\u05d1\u05e8\u05d9\u05d9\u05dd \u05d1\u05de\u05db\u05d5\u05df. \u05d7\u05dc\u05e7 \u05d2 : \u05db\u05ea\u05d1\u05d9-\u05d4\u05d9\u05d3 \u05e9\u05d1\u05e1\u05e4\u05e8\u05d9\u05d9\u05ea \u05d4\u05d5\u05d5\u05d0\u05d8\u05d9\u05e7\u05df (\u05d9\u05e8\u05d5\u05e9\u05dc\u05d9\u05dd \u05ea\u05e9\u05db\"\u05d7)","type":"string"}},"type":"statement","id":"Q254835$E9074C96-1C61-4764-AD1D-CCFF913D879F","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100672","hash":"a07d780df42e5f02d6239c92025f654f7970029e","datavalue":{"value":"Hebrew Manuscripts in the Vatican Library; Catalogue, ..., edited by Benjamin Richler, palaeographical and codicological descriptions by Malachi Beit-Ari\u00e9 in collaboration with Nurit Pasternak. Citt\u00e0 del Vaticano, Biblioteca Apostolica Vaticana, 2008 (Studi e Testi 438)","type":"string"}},"type":"statement","id":"Q254835$16F407FC-FEEC-4B83-A2EF-075E90F9CBF3","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254835$56244D90-F1AC-4D04-BD77-588F91DAABEF","rank":"normal","references":[{"hash":"4343068b3bd905959bc6577df78c783a1e106053","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"62e65dc9653e0fff4a535c40e36ab36b6cf62692","datavalue":{"value":"990001983830205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"85ed4214980725bfe81eeaa348716eabbd5df11f","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990001983830205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
sdtk2trqdjyes9svqbmdb1ci0xsrjfq
Q254837
0
346617
807009
2026-11-10T08:30:11Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +20 claims; local_id=QDraft_MS_990034372240205171
807009
wikibase-item
application/json
{"type":"item","id":"Q254837","labels":{"en":{"language":"en","value":"The National Library of Israel. Jerusalem, Israel. Ms. Var. 234"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05d0\u05d9\u05d8\u05dc\u05e7\u05d9, \u05d4\u05e1\u05e4\u05e8\u05d9\u05d9\u05d4 \u05d4\u05dc\u05d0\u05d5\u05de\u05d9\u05ea, Ms. Var. 234"}},"descriptions":{"en":{"language":"en","value":"Italian manuscript, 1694, paper, The National Library of Israel, Jerusalem, Ms. Var. 234"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05d0\u05d9\u05d8\u05dc\u05e7\u05d9, 1694, \u05d4\u05e1\u05e4\u05e8\u05d9\u05d9\u05d4 \u05d4\u05dc\u05d0\u05d5\u05de\u05d9\u05ea"}},"aliases":{"en":[{"language":"en","value":"Elementi grammaticali del caldaismo"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"7eff5076a6ac1c0b113fbeac435d16f50e7798e1","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10564","type":"string"}},"type":"statement","id":"Q254837$9169E644-886A-4313-862E-1CFDB85BE577","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254837$D7DFB2B7-1AC8-4025-AF61-76689691B894","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"92ab901877b0f1109498c08b2e2ce5a35fc9fc46","datavalue":{"value":{"entity-type":"item","numeric-id":254693,"id":"Q254693"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254837$1AE31BA4-C1AB-47BE-9F45-656399010B82","rank":"preferred","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"d07be1259977490ae0afd9f36bcdac9b7ce5c678","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10564","type":"string"}},"type":"statement","id":"Q254837$1022DA81-77DE-4427-8FDA-90ADE8C80B29","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"3abb69d0d3ea394b6d7ebcc81d6fb8a7f78c66c9","datavalue":{"value":{"entity-type":"item","numeric-id":248290,"id":"Q248290"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254837$BBD8A1B8-0953-4344-817D-2AC41CC3D84A","rank":"preferred","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"16c30ce72a8db4eef3272e52adc4a1909a6ab4e5","datavalue":{"value":"Ms. Var. 234","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"3abb69d0d3ea394b6d7ebcc81d6fb8a7f78c66c9","datavalue":{"value":{"entity-type":"item","numeric-id":248290,"id":"Q248290"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254837$89F3ED37-AFA5-4D57-AD50-58759F9630B5","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}},"type":"statement","id":"Q254837$43DA39E4-323F-4990-A87E-11C9091A2B87","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254837$AC9DB4DC-102C-4EB0-B2E6-A0C3490FAE57","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"1513992fa46adf019c1dc423c2f2d80768ab59c0","datavalue":{"value":{"text":"Elementi grammaticali del caldaismo","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q254837$F27EDFE2-5E9B-42AD-BC02-99BFF3649C93","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"a27de821d3bb4e36dc0206740d48b2564964be7c","datavalue":{"value":{"entity-type":"item","numeric-id":248297,"id":"Q248297"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254837$4CAA419E-B0C7-41B4-A736-7C68463F582D","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254837$FCA213DB-210E-4DDA-9592-2DBB32DAAFC3","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"eebcd5b0e78b4f6022aacee57b67fa1e004757fe","datavalue":{"value":{"entity-type":"item","numeric-id":254698,"id":"Q254698"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254837$F6C71AFE-C2A3-4F44-A490-B13E39187DA0","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254837$AB037A56-7862-4C8D-A7DF-BCDC8B51C28D","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"24eeba486cd2bfbb2dd97bfb26612f13dce92b07","datavalue":{"value":{"time":"+1694-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q254837$DF800226-6503-4B30-8D9C-EF18EE9E55EC","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100670":[{"mainsnak":{"snaktype":"value","property":"P100670","hash":"f0534143a2b45e68d02cd6a63fd08f076c828e47","datavalue":{"value":{"entity-type":"item","numeric-id":254738,"id":"Q254738"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254837$73594FFB-9AF2-4437-8461-017F0BAB2BB1","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81775":[{"mainsnak":{"snaktype":"value","property":"P81775","hash":"1ce81d8b23a67c9654b14ab32c5a40a683212c3e","datavalue":{"value":{"entity-type":"item","numeric-id":251484,"id":"Q251484"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254837$C1CE4282-341F-477A-B24F-09A99C410B36","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81773":[{"mainsnak":{"snaktype":"value","property":"P81773","hash":"87e1ee8d01ef77640c0527ba2b60d127d81dad6f","datavalue":{"value":{"amount":"+300","unit":"http:\/\/test.wikidata.org\/entity\/Q248615"},"type":"quantity"}},"type":"statement","id":"Q254837$3A1B64DD-D983-4200-81C4-AF80C24500EC","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81774":[{"mainsnak":{"snaktype":"value","property":"P81774","hash":"ca1a894ffab9249a35e61beabf60792d1b669d7f","datavalue":{"value":{"amount":"+210","unit":"http:\/\/test.wikidata.org\/entity\/Q248615"},"type":"quantity"}},"type":"statement","id":"Q254837$9DB73EF8-1EF5-4FB7-A713-A884EBC9548D","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"d2106866bcab1f8dc32563b2567f5cc2de09a1e4","datavalue":{"value":{"amount":"+16","unit":"http:\/\/test.wikidata.org\/entity\/Q248286"},"type":"quantity"}},"type":"statement","id":"Q254837$0F88D9A5-8E26-408F-B09A-B88CE4F4A164","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254837$B222D0F1-A69C-4C26-B0A2-49C6BCA9E7E5","rank":"normal","references":[{"hash":"8bbb24471756fddec7150c7bfbe6d82ade916e3d","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"f8d73aa9ba96f1bcc5814929f08aadf6df946bc3","datavalue":{"value":"990034372240205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"810a3c41fa43f7727ac19b70583375958178a0ff","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034372240205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
t11nwxkdeonzaq2x19sz4kdf79b0w14
Q254839
0
346618
807010
2026-11-10T08:30:16Z
Alexander Goldberg IL
9241
/* wbeditentity-create-item:0| */ MHM Pipeline: Create manuscript from NLI Hebrew Manuscripts catalog (Ktiv); +20 claims; local_id=QDraft_MS_990034376070205171
807010
wikibase-item
application/json
{"type":"item","id":"Q254839","labels":{"en":{"language":"en","value":"The National Library of Israel. Jerusalem, Israel. Ms. Var. 656"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05d0\u05d9\u05d8\u05dc\u05e7\u05d9, \u05d4\u05e1\u05e4\u05e8\u05d9\u05d9\u05d4 \u05d4\u05dc\u05d0\u05d5\u05de\u05d9\u05ea, Ms. Var. 656"}},"descriptions":{"en":{"language":"en","value":"Italian manuscript, 1678, paper, The National Library of Israel, Jerusalem, Ms. Var. 656"},"he":{"language":"he","value":"\u05db\u05ea\u05d1 \u05d9\u05d3 \u05d0\u05d9\u05d8\u05dc\u05e7\u05d9, 1678, \u05d4\u05e1\u05e4\u05e8\u05d9\u05d9\u05d4 \u05d4\u05dc\u05d0\u05d5\u05de\u05d9\u05ea"}},"aliases":{"en":[{"language":"en","value":"Ledger"}]},"claims":{"P100218":[{"mainsnak":{"snaktype":"value","property":"P100218","hash":"5cf6dd97525502250055943eeb87c5fb131043ec","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10566","type":"string"}},"type":"statement","id":"Q254839$CED873F2-7B5B-4C03-AAC8-73A8B488F229","rank":"normal"}],"P15":[{"mainsnak":{"snaktype":"value","property":"P15","hash":"bcc7f96f9eee5cbfe6c270fa82bb8995c0a4a028","datavalue":{"value":{"entity-type":"item","numeric-id":248282,"id":"Q248282"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254839$8371ADDA-777A-4CA8-BA35-9CAD860C689B","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P15","hash":"92ab901877b0f1109498c08b2e2ce5a35fc9fc46","datavalue":{"value":{"entity-type":"item","numeric-id":254693,"id":"Q254693"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254839$0B9B4977-7262-4980-94C8-2AEA7851272F","rank":"preferred","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P7711":[{"mainsnak":{"snaktype":"value","property":"P7711","hash":"c3f4503f24e8e6ca5cb69413f313a64323760a0d","datavalue":{"value":"https:\/\/mhm-hmo.wikibase.cloud\/wiki\/Item:Q10566","type":"string"}},"type":"statement","id":"Q254839$1F2E200D-43A4-4FD2-988E-079D933BC525","rank":"normal"}],"P94862":[{"mainsnak":{"snaktype":"value","property":"P94862","hash":"3abb69d0d3ea394b6d7ebcc81d6fb8a7f78c66c9","datavalue":{"value":{"entity-type":"item","numeric-id":248290,"id":"Q248290"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254839$6CE4A616-113B-45E7-856A-9AB84034901A","rank":"preferred","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81772":[{"mainsnak":{"snaktype":"value","property":"P81772","hash":"4aa1524a4f0808989f18f22557594fe18a50a1b5","datavalue":{"value":"Ms. Var. 656","type":"string"}},"type":"statement","qualifiers":{"P94862":[{"snaktype":"value","property":"P94862","hash":"3abb69d0d3ea394b6d7ebcc81d6fb8a7f78c66c9","datavalue":{"value":{"entity-type":"item","numeric-id":248290,"id":"Q248290"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P94862"],"id":"Q254839$09EB2845-7B22-4DB2-9377-31AD1A64882D","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100217":[{"mainsnak":{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}},"type":"statement","id":"Q254839$A08D809E-6231-44D3-A9BD-9C1877AAA133","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P791":[{"mainsnak":{"snaktype":"value","property":"P791","hash":"c9c21aaea42e434e1cf9accfb22d8c97b9f714fb","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P100258":[{"snaktype":"value","property":"P100258","hash":"fc1a0314d518617cf60469359dd96303208c7818","datavalue":{"value":{"entity-type":"item","numeric-id":254694,"id":"Q254694"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P100258"],"id":"Q254839$CB5210D1-D0DF-4AA7-9A24-DB23994DA06A","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77107":[{"mainsnak":{"snaktype":"value","property":"P77107","hash":"ce6699fd0b5f888b6d5d70d377798f8bc938afd5","datavalue":{"value":{"text":"Ledger","language":"en"},"type":"monolingualtext"}},"type":"statement","id":"Q254839$D55C7B92-BCC4-4865-B454-08DFDD5914CE","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P77090":[{"mainsnak":{"snaktype":"value","property":"P77090","hash":"a27de821d3bb4e36dc0206740d48b2564964be7c","datavalue":{"value":{"entity-type":"item","numeric-id":248297,"id":"Q248297"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254839$E96ED0FD-53F6-4F24-BC8A-ED9F0BA236ED","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P77090","hash":"7da5e8ec724a4d2aa459c0106a0eaef3f8a3b953","datavalue":{"value":{"entity-type":"item","numeric-id":248283,"id":"Q248283"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254839$8E247166-D339-435C-B843-D0C8DF54B504","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100662":[{"mainsnak":{"snaktype":"value","property":"P100662","hash":"eebcd5b0e78b4f6022aacee57b67fa1e004757fe","datavalue":{"value":{"entity-type":"item","numeric-id":254698,"id":"Q254698"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254839$1EA880B1-B23B-4404-89E2-D414C67FDB79","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]},{"mainsnak":{"snaktype":"value","property":"P100662","hash":"1ee595d81b1d4c872f7c72098eb4f75174893b45","datavalue":{"value":{"entity-type":"item","numeric-id":248284,"id":"Q248284"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254839$728BD55C-C104-4101-ADC5-7A99F1B1EA98","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P771":[{"mainsnak":{"snaktype":"value","property":"P771","hash":"f4f9ea7d3d0b6280bc01f24646c072121df635c0","datavalue":{"value":{"time":"+1678-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}},"type":"statement","id":"Q254839$FDEF12B2-1129-4397-922B-F069A02C7EF6","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100670":[{"mainsnak":{"snaktype":"value","property":"P100670","hash":"f0534143a2b45e68d02cd6a63fd08f076c828e47","datavalue":{"value":{"entity-type":"item","numeric-id":254738,"id":"Q254738"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254839$DD3A42B4-897B-48EC-8C20-BFF239D4F1EC","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81775":[{"mainsnak":{"snaktype":"value","property":"P81775","hash":"1ce81d8b23a67c9654b14ab32c5a40a683212c3e","datavalue":{"value":{"entity-type":"item","numeric-id":251484,"id":"Q251484"},"type":"wikibase-entityid"}},"type":"statement","id":"Q254839$B610D4F7-B371-4417-96D3-A82DC9D8C457","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81773":[{"mainsnak":{"snaktype":"value","property":"P81773","hash":"97b424d75fd37d26ed377ba623e3d86ab54dea0f","datavalue":{"value":{"amount":"+220","unit":"http:\/\/test.wikidata.org\/entity\/Q248615"},"type":"quantity"}},"type":"statement","id":"Q254839$EAB14327-4DE8-4CC3-869F-A8973B7F0BF5","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P81774":[{"mainsnak":{"snaktype":"value","property":"P81774","hash":"587e09cca02c448ac07212367e6f3b53843101f6","datavalue":{"value":{"amount":"+160","unit":"http:\/\/test.wikidata.org\/entity\/Q248615"},"type":"quantity"}},"type":"statement","id":"Q254839$F62D5414-EFFD-4E96-8E93-A3411243841E","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P97584":[{"mainsnak":{"snaktype":"value","property":"P97584","hash":"75c899dff375b5948bdd8deede127e110683c676","datavalue":{"value":{"amount":"+73","unit":"http:\/\/test.wikidata.org\/entity\/Q248286"},"type":"quantity"}},"type":"statement","id":"Q254839$EDF71CC6-B246-4619-8745-B36D973A9403","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}],"P100246":[{"mainsnak":{"snaktype":"value","property":"P100246","hash":"fe3a375c6bc508e352edb10df70e365df2fd3f4e","datavalue":{"value":{"entity-type":"item","numeric-id":248287,"id":"Q248287"},"type":"wikibase-entityid"}},"type":"statement","qualifiers":{"P634":[{"snaktype":"value","property":"P634","hash":"5d677d463517eda09a5a53bb391aef2006385ef4","datavalue":{"value":{"entity-type":"item","numeric-id":248288,"id":"Q248288"},"type":"wikibase-entityid"}}]},"qualifiers-order":["P634"],"id":"Q254839$BA4BC4A6-FFE2-45FA-BC8E-3701A095EB26","rank":"normal","references":[{"hash":"4ec1a0bf577d7a6b7933e55945ab27623d72c6f6","snaks":{"P149":[{"snaktype":"value","property":"P149","hash":"66d0085052a8bcff7e95f28959be0c493a7e3ef5","datavalue":{"value":{"entity-type":"item","numeric-id":248281,"id":"Q248281"},"type":"wikibase-entityid"}}],"P100217":[{"snaktype":"value","property":"P100217","hash":"9664b21687904fd74c9ecf03c3c426450e9b9317","datavalue":{"value":"990034376070205171","type":"string"}}],"P93":[{"snaktype":"value","property":"P93","hash":"88824d4bcc70f7ae14287652238fb39c107b506d","datavalue":{"value":"https:\/\/www.nli.org.il\/en\/discover\/manuscripts\/hebrew-manuscripts\/viewerpage?vid=NNL_ALEPH990034376070205171","type":"string"}}],"P388":[{"snaktype":"value","property":"P388","hash":"dfe56c25f265d2d0275209a090b8249a37af7b44","datavalue":{"value":{"time":"+2026-11-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http:\/\/www.wikidata.org\/entity\/Q1985727"},"type":"time"}}]},"snaks-order":["P149","P100217","P93","P388"]}]}]},"sitelinks":[]}
h2emhcrvubrmmahw4fdrvfm91v6nyzt