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&section=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&section=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