{"id":1306,"date":"2014-04-14T00:24:38","date_gmt":"2014-04-13T23:24:38","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=1306"},"modified":"2014-04-14T01:08:27","modified_gmt":"2014-04-14T00:08:27","slug":"wikibase-datamodel-0-7-3-released","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/","title":{"rendered":"Wikibase DataModel 0.7.3 released"},"content":{"rendered":"<p>I am happy to announce the 0.7.3 release of <a href=\"https:\/\/github.com\/wmde\/WikibaseDataModel\">Wikibase DataModel<\/a>.<\/p>\n<p><strong>Wikibase DataModel<\/strong> is the canonical PHP implementation of the <a href=\"https:\/\/meta.wikimedia.org\/wiki\/Wikidata\/Data_model\">Data Model<\/a> at the heart of the <a href=\"http:\/\/wikiba.se\/\">Wikibase software<\/a>. It is primarily used by the Wikibase MediaWiki extensions, though has no dependencies whatsoever on these or on MediaWiki itself.<\/p>\n<p>This release contains a new API for working with labels, descriptions and terms, and it deprecates the old API for those.<\/p>\n<p>At the core of the <a href=\"https:\/\/github.com\/wmde\/WikibaseDataModel\/tree\/d507cf5bf64fe78e8a6469c68462ae9555135a96\/src\/Term\">new API<\/a> is a simple value object representing an until now unnamed domain concept: the part of an <em>Item <\/em>or a <em>Property<\/em> that has all those labels, descriptions and terms. The name we gave it is <em>Fingerprint<\/em>. (Credits and blame for the name go to <a href=\"https:\/\/twitter.com\/Nightrose\">Lydia<\/a> :)) The <em>Entity<\/em> class now has a <em>getFingerprint<\/em> and a <em>setFingerprint<\/em> method. <a href=\"https:\/\/github.com\/wmde\/WikibaseDataModel\/blob\/d507cf5bf64fe78e8a6469c68462ae9555135a96\/src\/Term\/Fingerprint.php#L1\"><em>Fingerprint<\/em><\/a> itself has <em>getLabels<\/em>, <em>getDescriptions<\/em> and <em>getAliases<\/em> methods. The first two return a <em>TermList<\/em>, which is made up from <em>Term<\/em> objects. The later returns an <em>AliasGroupList<\/em> which consists out of <em>AliasGroup<\/em> objects.<\/p>\n<p>Why these changes? What was wrong with this approach?<\/p>\n<pre class=\"lang:php decode:true\">$entity-&gt;setLabels( array( 'en' =&gt; 'foo', 'de' =&gt; 'bar' ) );<\/pre>\n<p>The old API is defined by no less than 17 methods in <em>Entity<\/em>. They add a lot of code to it, contributing to <em>Entity<\/em> being the highest complexity class in DataModel. That our core (DDD) entity is also our most scary class is obviously not good. Moving the responsibility to a value object inside of <em>Entity<\/em> is a clean way to tackle this problem, and is also more in line with how the other parts of <em>Entities<\/em>, such as they list of <em>Claims<\/em> are handled. On top of the complexity issue, the old API also does badly interface segregation wise. Most code dealing with Terms (ie <em>Labels<\/em>, <em>Descriptions<\/em> and <em>Aliases<\/em>) will not care about all the rest of <em>Entity<\/em>. Hence it makes no sense to have to feed it an entire <em>Entity<\/em> object while a <em>Fingerprint<\/em> or one of its composited in objects would make more sense.<\/p>\n<p><a href=\"https:\/\/scrutinizer-ci.com\/g\/wmde\/WikibaseDataModel\/statistics\/\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1309\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/dm-complexity\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png\" data-orig-size=\"437,203\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"dm-complexity\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png\" class=\"alignnone  wp-image-1309\" style=\"border: 1px solid black;\" alt=\"dm-complexity\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png\" width=\"437\" height=\"203\" srcset=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png 437w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity-300x139.png 300w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity-100x46.png 100w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity-150x69.png 150w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity-200x92.png 200w\" sizes=\"auto, (max-width: 437px) 100vw, 437px\" \/><\/a><\/p>\n<p>Another important reason to move into this direction is that I want to see <em>Entity<\/em> go. If you are familiar with the project, this might seem like a quite preposterous statement. Kill <em>Entity<\/em>? How can I possibly think that is a good idea, and how will the code be able to still work afterwards? In short, <em>Entity<\/em> tries to unify things that are quite different in a single class hierarchy. The difference between those objects creates creates a lot of weirdness. <em>Entity<\/em> contains a list of <em>Claim<\/em>, while <em>Item<\/em>, one of it&#8217;s derivatives, requires a list of <em>Statement<\/em>, <em>Statement<\/em> being a derivative of <em>Claim<\/em>. And not all <em>Entities<\/em> we foresee will have <em>Claims<\/em>, <em>Fingerprint<\/em>, etc. The only thing they will all have is an <em>EntityId<\/em>, and all we need to facilitate that is a simple <em>HasEntityId<\/em> interface. All the rest, including the <em>Fingerprint<\/em>, can be composited in by classes such as <em>Item<\/em> and <em>Property<\/em> that implement the appropriate interfaces. Those changes are for the next big release, so if you are using DataModel, it is recommended you switch to using the new <em>Fingerprint<\/em> API as soon as possible.<\/p>\n<p>And I&#8217;m still done with the list &#8211; <a href=\"http:\/\/www.youtube.com\/watch?v=OQSNhk5ICTI\">wow<\/a>. A final reason for the change is that the old API was not only ugly (weird function signatures in places), it was also quite inconsistent in its implementation. It has TODOs in there since the start of the project that state things such as &#8220;figure out if we care about duplicates&#8221; and &#8220;are empty strings valid?&#8221;. The new implementation properly takes care of these things, and does no in all cases where it should rather than only in assorted random functions. That those old TODOs remained there for nearly two years go to show how likely it is people &#8220;go back to fix it&#8221;.<\/p>\n<p>You can do everything you could do with the old implementation with the new one. There are however some things that might be slightly more cumbersome for now, especially in code that is taking in entire Entity objects while only needing a Fingerprint. As we migrate to the new implementation, it will become clear what convince functions will pay for themselves, so those will likely be added in the near future. At the same time several tasks are already easier to do now. The new value objects will also likely provide a good place to put functionality that was oddly places before.<\/p>\n<p>For a list of changes, see <a href=\"https:\/\/github.com\/wmde\/WikibaseDataModel\/blob\/master\/RELEASE-NOTES.md#version-073-2014-04-11\">the release notes<\/a>.<\/p>\n<p>And in anticipation of the next release, have some WMDE kittens:<\/p>\n<p><a href=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1314\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/2014-04-14-01-30-54\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54.jpg\" data-orig-size=\"3264,1840\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;2&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;HTC One X&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1397439054&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.63&quot;,&quot;iso&quot;:&quot;250&quot;,&quot;shutter_speed&quot;:&quot;0.0499&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"2014-04-14 01.30.54\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-1024x577.jpg\" class=\"alignnone  wp-image-1314\" alt=\"2014-04-14 01.30.54\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-1024x577.jpg\" width=\"660\" height=\"371\" srcset=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-1024x577.jpg 1024w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-300x169.jpg 300w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-100x56.jpg 100w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-150x84.jpg 150w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-200x112.jpg 200w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-450x253.jpg 450w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-600x338.jpg 600w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/2014-04-14-01.30.54-900x507.jpg 900w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I am happy to announce the 0.7.3 release of Wikibase DataModel. Wikibase DataModel is the canonical PHP implementation of the&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7,8],"tags":[181,195,197,215,311,316,317,318,305],"class_list":["post-1306","post","type-post","status-publish","format-standard","hentry","category-programming","category-software","tag-open-source","tag-php","tag-planet-wikimedia","tag-refactoring","tag-release","tag-software-design","tag-wikibase","tag-wikibase-datamodel","tag-wikidata"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Wikibase DataModel 0.7.3 released - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wikibase DataModel 0.7.3 released - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"I am happy to announce the 0.7.3 release of Wikibase DataModel. Wikibase DataModel is the canonical PHP implementation of the&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2014-04-13T23:24:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-04-14T00:08:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"Wikibase DataModel 0.7.3 released\",\"datePublished\":\"2014-04-13T23:24:38+00:00\",\"dateModified\":\"2014-04-14T00:08:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/\"},\"wordCount\":746,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/04\\\/dm-complexity.png\",\"keywords\":[\"Open Source\",\"PHP\",\"Planet Wikimedia\",\"Refactoring\",\"Release\",\"Software design\",\"Wikibase\",\"Wikibase DataModel\",\"wikidata\"],\"articleSection\":[\"Programming\",\"Software\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/\",\"name\":\"Wikibase DataModel 0.7.3 released - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/04\\\/dm-complexity.png\",\"datePublished\":\"2014-04-13T23:24:38+00:00\",\"dateModified\":\"2014-04-14T00:08:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/04\\\/dm-complexity.png\",\"contentUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/04\\\/dm-complexity.png\",\"width\":437,\"height\":203},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/04\\\/14\\\/wikibase-datamodel-0-7-3-released\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wikibase DataModel 0.7.3 released\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jeroendedauw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Wikibase DataModel 0.7.3 released - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/","og_locale":"en_US","og_type":"article","og_title":"Wikibase DataModel 0.7.3 released - Blog of Jeroen De Dauw","og_description":"I am happy to announce the 0.7.3 release of Wikibase DataModel. Wikibase DataModel is the canonical PHP implementation of the&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2014-04-13T23:24:38+00:00","article_modified_time":"2014-04-14T00:08:27+00:00","og_image":[{"url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png","type":"","width":"","height":""}],"author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"Wikibase DataModel 0.7.3 released","datePublished":"2014-04-13T23:24:38+00:00","dateModified":"2014-04-14T00:08:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/"},"wordCount":746,"commentCount":1,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png","keywords":["Open Source","PHP","Planet Wikimedia","Refactoring","Release","Software design","Wikibase","Wikibase DataModel","wikidata"],"articleSection":["Programming","Software"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/","url":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/","name":"Wikibase DataModel 0.7.3 released - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/#primaryimage"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png","datePublished":"2014-04-13T23:24:38+00:00","dateModified":"2014-04-14T00:08:27+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/#primaryimage","url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png","contentUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png","width":437,"height":203},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/14\/wikibase-datamodel-0-7-3-released\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"Wikibase DataModel 0.7.3 released"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-l4","jetpack-related-posts":[{"id":1165,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/12\/23\/wikibase-datamodel-released\/","url_meta":{"origin":1306,"position":0},"title":"Wikibase DataModel released!","author":"Jeroen","date":"2013-12-23","format":false,"excerpt":"I\u2019m happy to announce the 0.6 release of Wikibase DataModel. This is the first real release of this component. DataModel? Wikibase is the software behind Wikidata.org. At its core, this software is about describing entities. Entities are collections of claims, which can have qualifiers, references and values of various different\u2026","rel":"","context":"In \"Component\"","block_context":{"text":"Component","link":"https:\/\/www.entropywins.wtf\/blog\/tag\/component\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1453,"url":"https:\/\/www.entropywins.wtf\/blog\/2015\/08\/11\/wikibase-datamodel-services\/","url_meta":{"origin":1306,"position":1},"title":"Wikibase DataModel Services","author":"Jeroen","date":"2015-08-11","format":false,"excerpt":"I'm happy to announce the immediate availability of a new Wikibase library: Wikibase DataModel Services (which I'll in this blog post refer to as DMS). Rationale behind the library The main motivation for introducing this new library is to reduce technical debt and draw more solid architectural boundaries in the\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1401,"url":"https:\/\/www.entropywins.wtf\/blog\/2014\/09\/02\/wikibase-datamodel-1-0\/","url_meta":{"origin":1306,"position":2},"title":"Wikibase DataModel 1.0","author":"Jeroen","date":"2014-09-02","format":false,"excerpt":"I'm happy to announce the 1.0 release of Wikibase DataModel.\u00a0Wikibase DataModel is the canonical PHP implementation of the Data Model at the heart of the Wikibase software. This is a big release which has been some time in the making, even though many additions have been split of and included\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1327,"url":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/30\/wikibase-datamodel-entity-v2\/","url_meta":{"origin":1306,"position":3},"title":"Wikibase DataModel: Entity v2","author":"Jeroen","date":"2014-04-30","format":false,"excerpt":"In a recent blog post I introduced the new Term classes introduced in Wikibase DataModel 0.7.3. It also outlined plans for making some big changes to the Entity class and it's derivatives. We have now taken the most difficult step in the process, which is already resulting in much nicer\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"dm-complexity","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1524,"url":"https:\/\/www.entropywins.wtf\/blog\/2016\/01\/25\/replicator-a-cli-tool-for-wikidata\/","url_meta":{"origin":1306,"position":4},"title":"Replicator: Wikidata import tool","author":"Jeroen","date":"2016-01-25","format":false,"excerpt":"I'm happy to announce the first release of Replicator, a CLI tool for importing entities from Wikidata. Replicator was created for importing data from Wikidata into the QueryR REST API persistence. It has two big conceptual components: getting entities from a specified source, and then doing something with said entities.\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1484,"url":"https:\/\/www.entropywins.wtf\/blog\/2015\/11\/08\/wikidata-wikibase-json-dump-reader\/","url_meta":{"origin":1306,"position":5},"title":"Wikidata\/Wikibase Json Dump Reader","author":"Jeroen","date":"2015-11-08","format":false,"excerpt":"I've created a small PHP library to read from, and iterate through, Wikidata\/Wikibase JSON dumps. Wikidata is the free knowledge base that anyone can edit, and serves as a central data repository for Wikipedia and associated projects. Wikibase is a set of free open source software that powers Wikidata. You\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=1306"}],"version-history":[{"count":7,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1306\/revisions"}],"predecessor-version":[{"id":1315,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1306\/revisions\/1315"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=1306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=1306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=1306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}