İş Süreci Kurallarının JsonLogic ile Geliştirilmesi için bir Modelleme Ortamı Katira Soleymanzadeh1, Yiğit Bul2, Sedat Kulduk2, Sarper Bağcı2, Geylani Kardaş1 1 Ege Üniversitesi Uluslararası Bilgisayar Enstitüsü, 35100 Bornova, İzmir, Türkiye katirasole@gmail.com, geylani.kardas@ege.edu.tr 2 Hermes İnternet İletişim Yazılım San. ve Tic. A.Ş., Pasaport, İzmir, Türkiye {yigit.bul, sedat.kulduk, sarper.bagci}@hermesiletisim.net Özet. İş Süreci Yönetimi (BPM) yazılımlarında iş süreçleri ve iş akışlarına ait işletim kurallarının mantık tabanlı oluşturulması için JSON temelli JsonLogic yapısının BPM yazılımlarında yakın zamanda kullanılmaya başlandığı gözlemlenmektedir. Her ne kadar JsonLogic ile iş süreci kurallarının oluşturulması BPM’ler içerisinde bu kuralların çeşitli veritabanlarında saklanmasına ve paylaşımına imkan verse de bu kuralların metinsel sözdiziminin yazılım geliştiricilerin kullandığı genel amaçlı programlama dillerinden farklı olması, geliştiricilerin özellikle komplike iş kurallarının yazımı sırasında zorlanmalarına ve kural hazırlama sürecinin hem uzamasına hem de hatalara daha açık bir hale gelmesine neden olmaktadır. İş süreci kurallarının JsonLogic ile geliştirilmesinde karşılaşılan bu zorlukları minimize etmek amacıyla, bu çalışmada JsonLogic yapılarının bir model-güdümlü mimari kapsamında görsel modellenmesini ve sonra bu modellerden JsonLogic kurallarının otomatik oluşturulmasını sağlayacak bir alana-özgü modelleme dili ve bunu destekleyen bir araç tanıtılmaktadır. Sunulan modelleme ortamının örnek bir durum çalışması üzerinden gerçekleştirilen değerlendirmesinde, sadece JSON ile modelleme imkanı sunan ve JsonLogic’i desteklemeyen mevcut bir araca göre ilgili iş kurallarının daha az görsel bileşen ile daha kolay bir şekilde oluşturulabildiği gözlenmiştir. Anahtar Kelimeler: JsonLogic, Model-güdümlü Mimari, Alana-özgü Modelleme Dili, İş Süreci Yönetimi, İş Süreci Kuralı. A Modeling Environment for the Development of Business Process Rules with JsonLogic Abstract. Use of JSON-based JsonLogic structures has been recently emerged during the construction of the rules required in the business processes and busi- ness workflows inside the Business Process Management (BPM) software. Alt- hough, creating business process rules with JsonLogic enables both storing these rules in databases and sharing them between front-end and back-end sys- tems, the developers may encounter difficulties during the preparation of com- plicated business rules with JsonLogic due to its intricate textual syntax which is too different from the well-known general-purpose programming languages. This unfamiliar way of rule creation may also lead to a time-consuming and er- ror-prone development process. In order to eliminate these deficiencies and fa- cilitate the business rule creation with JsonLogic, we introduce a domain- specific modelling language and its supporting tool for the visual modelling and automatic generation of JsonLogic rule structures within a model-driven archi- tecture. The evaluation, performed inside a case study, showed that the pro- posed modelling environment is capable of the construction of business rules with far less number of components comparing with modelling the same rules in an existing tool for JSON. Keywords: JsonLogic, Model-driven Architecture, Domain-specific Modeling Language, Business Process Management, Business Process Rules. 1 Giriş İş Süreci Yönetimi (ing. Bussiness Process Management) (BPM) iş süreçlerinin tasarımı, hayata geçirilmesi ve yönetilmesi için çeşitli yöntem ve araçların kullanımını içermektedir. BPM’ler birçok alanda yaygın olarak kullanılan iş akışı yönetimi sistem ve yaklaşımlarının birer uzantısı olarak düşünülebilirler [1]. BPM yazılımlarında iş süreçleri ve iş akışlarına ait işletim kuralları çoğunlukla mantık tabanlı olarak kurgulanmakta ve yönetilmektedir [2]. Görev ve kaynakların durumunun belirlenmesi, bunların aktörlere atanması, işletimsel kısıtların belirtilmesi, süreçlerin yönlendirilmesi, olayların tetiklenmesi gibi bileşenler için kuralların oluşturulmasında tümevarım / tümden gelimli veya şartlı akıl yürütmeyi sağlayacak mantık kurgularına ihtiyaç vardır. Karmaşık iş süreci kurallarının mantık tabanlı oluşturulması için JavaScript Nesne Gösterimi (ing. JavaScript Object Notation) (JSON) [3] mantığı ve bunun üzerine geliştirilen JsonLogic [4] yapısının profesyonel BPM yazılımlarında yakın zamanda kullanılmaya başlandığı (örneğin IBM BPM [5], Camunda [6]) gözlemlenmektedir. Her ne kadar JsonLogic ile iş süreci kurallarının oluşturulması BPM’ler içerisinde bu kuralların çeşitli veritabanlarında saklanmasına ve paylaşımına imkan verse de bu kuralların metinsel sözdiziminin yazılım geliştiricilerin kullandığı genel amaçlı programlama dillerinden farklı olması, geliştiricilerin özellikle komplike iş kurallarının yazımı sırasında zorlanmalarına ve kural hazırlama sürecinin hem uzamasına hem de hatalara daha açık bir hale gelmesine neden olmaktadır. İş süreci kurallarının JsonLogic ile geliştirilmesinde karşılaşılan bu zorlukları minimize etmek amacıyla, bu çalışmada JsonLogic yapılarının bir model-güdümlü mimari kapsamında görsel modellenmesini ve sonra bu modellerden JsonLogic kurallarının otomatik oluşturulmasını sağlayacak bir alana-özgü modelleme dili ve bunu destekleyen bir araç tanıtılmaktadır. İş süreçlerinin ve iş akışlarının koreografisi ve yönetilmesinde model-güdümlü mühendislik yaklaşımlarının uzun bir süreden beri izlendiği görülmektedir [7]. BPM’ler için çeşitli model-güdümlü mimari uygulamaları ve modelleme dili geliştirme çalışmaları da (örneğin [8-12]) ilgili araştırma alanında güncelliğini korumaktadır. Ancak mevcut çalışmalarda iş süreci ve kurallarına ait mantığın JsonLogic ile modellenmesi ve üretilmesi göz önüne alınmamaktadır. Bildiğimiz kadarıyla ilk kez bu bildiride anlatılan çalışma ile JsonLogic yapılarının modellenmesi için bir üstmodel geliştirilmiştir ve bu üstmodeli temel alan bir görsel modelleme ortamı yazılım geliştircilere sağlanarak JsonLogic iş kurallarının otomatik elde edilmesi mümkün hale gelmektedir. Bildirinin 2. bölümünde kısaca JsonLogic hakkında bilgi verilmiştir. Geliştirilen JsonLogic üstmodeli 3. bölümde tanıtılmaktadır. Üstmodele dayalı olarak iş süreci kurallarının görsel modellenmesini sağlayan sözdizim ve işletimsel semantik sırasıyla 4. ve 5. bölümlerde anlatılmıştır. Geliştirilen dilin ve modelleme aracının kullanımını örnekleyen bir durum çalışması 6. bölümde yer almaktadır. 5. bölümde, ilgili literatürdeki önceki çalışmalar anlatılmış; mevcut çalışmalara göre farklar ve katkılar belirtilmiştir. Son bölümde çalışmadan elde edilen sonuçlar ve ileriye yönelik çalışma hedefleri yer almaktadır. 2 JsonLogic JSON, ilkel ve yapısal veri türlerine sahip, metin tabanlı ve dilden bağımsız bir veri değişim biçimidir [3]. Anahtar-değer çifti şeklinde tanımlanan JSON veri biçimi, diğer veri tiplerine göre (örneğin XML verisi) daha az yer kaplamaktadır. JsonLogic ise JSON mantığı üzerinde tanımlanan bir yapıdır ve karmaşık mantık kurallarını inşa etmek, onları birer JSON verisi olarak serileştirmek, uygulamaların ön-uç (ing. front- end) ve arka-uçları (ing. back-end) arasında paylaşmak ve veritabanlarında saklanmak için kullanılmaktadır [4]. Her JsonLogic kuralı bir JSON nesnesidir ve operatör-veri çifti biçiminde tanımlanmaktadır. Operatör bir JsonLogic yapısında anahtar konumunda iken bir veya bir dizi argüman değer konumunda yer almaktadır. Her bir argümanın kendisi de bir mantık kuralı olabilir ve böylece karmaşık kuralları JsonLogic ile tanımlamak mümkün olmaktadır. Her ne kadar tam bir programlama dili olmasa da JsonLogic özellikle kuralların birer veri şeklinde saklanmasına ve böylece kullanıcı etkileşimi ile dinamik olarak oluşturulabilmelerine imkan vermesi nedeniyle iş süreçlerinin kural tabanlı oluşturulmasında güçlü bir alternatif olmaktadır. Aşağıda basit bir JsonLogic iş kuralı örneği verilmiştir. Kuralda eğer bir kişinin e- posta adresi boş (ing. null) değilse ve bu kişeye gönderilen e-posta sayısı üçten azsa (yani kuralın işletim sonucu mantıksal doğru (ing. true) olacaksa), ilgili kişiye yeni bir e-posta gönderilecektir. JsonLogic kuralı: {"and" : [{ "!=" : [{“var” : “email_address”},null] },{ "<" : [{“var” : “number_of_sent_mail”},3] }] } JsonLogic kural ayrıştırıcıları (ing. parser) [4] yazılan kuralların otomatik olarak Python, JavaScript, PHP ve Ruby’ye dönüştürülmesine ve bu ortamlarda çalıştırılmalarına olanak sağlamaktadır. Örneğin yukarıda JsonLogic kullanılarak hazırlanan kuralın ayrıştırıcı kullanılarak elde edilen Python’daki eşdeğer kodu şu şekildedir: Python kodu: ( (email_address != null ) and (number_of_sent_mail < 3) ) 3 JsonLogic Yapıları için bir Üstmodel JsonLogic mantık kurallarının model-güdümlü olarak geliştirilmesini sağlamak amacıyla JsonLogic modellerinin oluşturulabileceği bir üstmodel (ing. metamodel) bu çalışmada hazırlanmıştır. Üstmodelin türetilmesi için JsonLogic yapıları [4] göz önüne alınmış; ve bu yapıların modellenmesini sağlayacak üstvarlıklar (ing. meta- entity) ve bunların ilişkileri bu üstmodel içerisinde tanımlanmıştır. Geliştirilen üstmodel Nesne Yönetim Grubu (ing. Object Management Group) (OMG) Üst-varlık Ortamı (ing. MetaObject Facility) (MOF) [13] uyumludur. Böylece bu üstmodele göre oluşturulan JsonLogic iş kuralı modelleri OMG Model-güdümlü Mimarisi (ing. Model-driven Architecture) (MDA) [14] kapsamında XML ile serileştirilebilir ve Eclipse Modelleme Çerçevesi [15] gibi üst-üstmodelini MOF’un oluşturduğu modelleme ortamlarında kullanılabilir. Şekil 1’de söz konusu üstmodel resmedilmiştir. Anlam kaymalarını önlemek amacıyla bildiride üstmodeldeki varlıklar ve ilişkiler İngilizce orjinal isimleri kullanılarak anlatılmaktadır ve metinde eğik (italik) olarak yazılmışlardır. Her bir JsonLogic Element temelde bir AccessingData, Operation veya Log olabilir. var, missing ve missing_some tiplerinden birine sahip olabilecek bir AccesingData elemanı, kullanıcı tarafından girilen verinin işlenmesini ve sonucun döndürülmesini sağlar. Genellikle nesne formatında olan her veri, özel ismi olan bir var kavramı ile tanımlanır. var kavramı kullanıcı tarafından sağlanan veriyi tanımlar. missing, JsonLogic modelinde tanımlanan bir veri dizisi içinde bulunmayan elemanları belirlemede kullanılır. missing_some girdi olarak verilen minimum sayı kadar verinin bir anahtar dizisi içerisinde olup olmadığını sorgulamayı sağlamaktadır. Tablo 1’de AccesingData çeşitlerinin JsonLogic kural cümlelerinin oluşturulmasında kullanımı ve örnek veriler üzerinde bu kuralların işletilmesi sonuçları listelenmiştir. Üstmodeldeki Operation üstvarlığının örnekleri bir JsonLogic modelindeki ana elemanları temsil etmektedir ve JsonLogic kuralları Operation çeşitleri kullanılarak oluşturulmaktadır. Üstmodelde bu varlığın Logic, Boolean, Numeric, Array ve String isimli beş alt tipi bulunmaktadır. Bu tiplerin de yine üstmodelde üst sınıf – alt sınıf kurgusu ile oluşturulan çeşitli alt tipleri vardır. Boolean üst-varlığı adından anlaşılacağı üzere mantıksal doğru ve yanlış testleri için modelde yer alır; or ve and alt-sınıflarına sahiptir. Logic’in tiplerini modelde if, ==, ===, !=, !==, ! ve !! varlıkları temsil eder. if klasik programlama dillerinde olduğu gibi bir koşulu ve bu koşulun doğru veya yanlış olması durumunda karşılık gelen işlemleri JsonLogic’te göstermek için kullanılır. Logic’in geriye kalan diğer alt sınıfları ise girdi yapılan veriler arasındaki eşitlik ya da eşitsizlik durumlarını kontrol etmeyi sağlar. Şekil 1. JsonLogic yapıları için bir üstmodel Tablo 1. AccessingData çeşitleri ile hazırlanan bazı JsonLogic kural örnekleri JsonLogic Örnek Kural Örnek Veri İşletim Üstvarlığı Sonucu var {"var":"name"} {"name":"Ali","age":32} Ali missing {"missing":["name", "age", {"name":"Ali"} ["age", “count”]} "count"] missing_some {"missing_some":[3, ["name", {"name":"Ali", "age":32} [] "age", "count", "Tel"]]} Numeric işlem türleri (min, max, between, vb.) girdiler arasındaki büyüklük, küçüklük gibi durumların kontrolünü ve bir veri kümesindeki en küçük veya en büyük verinin belirlenmesini sağlayan yapıların JsonLogic’te oluşturulmasını sağlar. Veriler üzerindeki cebirsel işlemler Numeric’in diğer bir alt sınıfı olan Arithmetic tipindeki üstvarlıklar ile modelde temsil edilmiştir. map, reduce, merge gibi Array işlemleri diziler şeklinde ifade edilen veri kümleri üzerine uygulanır. Örneğin map bir dizi içerisindeki her elemana bir işlemin (toplama, çarpma, vb.) uygulanmasını sağlarken reduce bir dizideki tüm elemanları tek bir elemana indirger. merge ise birden fazla diziyi birleştirir. Üstmodelde mantık kurallarında yer alan kelimeler üzerindeki işlemleri String varlığının alt sınıfları temsil etmektedir. Her bir in varlığı tanmlanan bir kuralda veri konumunda olan ilk argümanın “String” tipinde olan ikinci argümanın içinde olup olmamasını test eder. Argümanların birleştirilmesi cat işlemi ile sağlanır. “String” parçalarını elde etmek için substr işlemleri uygulanır. Tablo 2’de bazı Operation çeşitlerinin JsonLogic iş kuralı cümlelerinin oluşturulmasında kullanımı ve örnek veriler üzerinde bu kuralların işletilmesi sonuçları listelenmiştir. Tablo 2. Operation çeşitleri ile hazırlanan bazı JsonLogic kural örnekleri JsonLogic Üstvarlığı Örnek Kural Örnek Veri İşletim ve Alt sınıfı Sonucu Logic if {"if" : [{"==" : [{“var”: {"conut":3} send sms “count”}, 3]}, send email, send sms]} ==, ===, {"!=":[{“var”:“name”},"Ali"]} {“name”: Ali} true !=, !==, !, !! Boolean or ve and {"and":[{"==":[{“var”:“count},3 {"conut":3, false ]}, {"==" : [{“var”: “name”}, “name”:Ali,“age” Ali]}, {"<": [{“var”: “age”}, :32} 30]}]} Numeric >, >=, < {"<=" : [{“var”: “age”}, 30]} {“age”:32} false ve <= between {"<": [30, [{“var”: “age”}, 30], {“age”:32} true 40]} // 30":[1,{"var":" null true some, "}, 5]} ]} none merge {"merge":[{"var":"count"},{"var {"count":3, [3,"Ali",32] " : "name"},{"var" : "age"}]} "name":"Ali","ag e":32} in {"in":["Ali",["Ahmet", "Ayşe", null true "Ali", "Gül"] ]} String in {"in":["bahar","baharmevsimi"]} null true cat {"cat":["send",{"var":"type"}]} {"type":"email"} "send email" substr {"substr": [" Email sent by Ali", null "Ali" 15]} Son olarak, geliştirilen üstmodelde yer alan Log üstvarlığı örnekleri (ing. instance) özellikle karmaşık JsonLogic kurallarının kontrolü ve hata ayıklamasında çıktıların görüntülenmesi amacıyla kullanılmaktadır. Mantıksal doğru / yanlış, sayı veya kelime tiplerinde çıktılar üretebilir. 4 Görsel Somut Sözdizimin Oluşturulması Bir önceki bölümde tanıtılan üstmodele uygun olarak yazılım geliştiricilerin JsonLogic tabanlı olarak iş süreci kurallarını görsel bir şekilde oluşturması için bu çalışmada aynı zamanda görsel bir somut sözdizim geliştirilmiştir. Alana-özgü diller (ing. Domain-specific language) (DSL) [16] oluşturulurken genellikle bir üstmodele bağlı dil soyut sözdizimini türetme ve devamında bu sözdizimdeki kavramlar ve bunların örnek modeller üzerindeki temsilleri arasında bir eşleme sağlayan bir somut sözdizimin geliştirilmesi süreçleri izlenmektedir. Bizim de bu çalışmada amacımız JsonLogic ile iş süreci kurallarının geliştirilmesinde kullanılabilecek bir DSL’i oluşturmaktır. Geliştirilen somut sözdizim JsonLogic öğelerinin kodlanması yerine görsel olarak modellenmesini sağladığından ortaya konan dilin DSL’den ziyade bir alana-özgü modelleme dili (ing. domain-specific modeling language) (DSML) ([17]) olduğunu belirtmekte yarar vardır. 3. bölümde verilen üstmodel OMG MDA’ine [14] göre platforma-özel modelleme seviyesinde bulunmaktadır ve JsonLogic için geliştirdiğimiz DSML’in soyut sözdizimini oluşturmaktadır. DSML’in kullanılmasını sağlayan somut sözdizim MetaEdit+ [18] veya Eclipse tabanlı GMF [19], Sirius [20] gibi model-güdümlü yazılım geliştirme ortamları kullanılarak oluşturulabilir. Daha önce bu ortamları kullanarak gerçekleştirilen DSL / DSML geliştirme çalışmalarımızdan (örneğin [21- 23]) MOF uyumlu soyut sözdizimlerin bu araçların bünyesine kolaylıkla dahil edilebilindiğini ve aynı entegre ortamlar içerisinde DSML semantiklerinin de tanımlanabildiğini gözlemledik. Öte yandan modellemenin web tabanlı ve çevrimiçi yapılması ve yazılım modellerine birden çok kullanıcı tarafından müdahele gibi ihtiyaçlar düşünüldüğünde sözü edilen bu araçlar çoğu zaman yetersiz kalmaktadır ve kullanımları karmaşıklaşmaktadır. Tüm bu ihtiyaçlar göz önünde bulundurularak JsonLogic DSML’inin somut sözdizimi bu çalışmada Blockly [24] görsel blok programlama ortamı üzerine inşa edilmiştir. Blocly ([24-25]), Scratch [26], Snap! [27] gibi programlama kütüphaneleri ve araçları son yıllarda giderek popülerleşen blok tabanlı görsel programlamanın önemli temsilcileridir. Blockly’de yazılım bileşenleri birbirine bağlanabilen görsel bloklar şeklinde tasarlanabilir. Web tabanlı ortamı içerisinde bileşenler bir paletten sürükle-bırak tekniği ile modelleme ortamına taşınabilir ve birer blok olarak modellenebilir. Bloklar halinde oluşturulan bu yazılım bileşenleri Blockly’nin destek verdiği Python, JavaScript, PHP ve Lua gibi dillerde implementasyona çevrilebilir [28]. Ayrıca JSON yapısını üretmek üzere bir Blockly kütüphanesi de bulunmaktadır [29]. Tüm bu özellikler Blockly’nin bu çalışmada JsonLogic DSML’inin görsel modelleme ortamını geliştirmek için kullanılmasına neden olmuştur. Somut sözdizimin oluşturulması için bir önceki bölümde verilen JsonLogic üstmodeli varlıklarını ve ilişkilerini gösterecek görsel notasyonlar belirlenmiştir. Bir kısım üstmodel kavramı için doğrudan bir görsel notasyon (blok sembolü) belirlenirken geriye kalan kavramlar, blok sembolü türetilmiş kavramların kapsayacağı şekilde model ortamına dahil edilmektedir. Tablo 3’te JsonLogic DSML’inin görsel somut sözdizimi için bu çalışma kapsamında belirlenen notasyonların bir kısmı görülmektedir. Tablo 3. JsonLogic DSML’i somut sözdiziminin bazı kavramları ve gösterimleri Kavram Gösterim Kavram Gösterim Kavram Gösterim if and less max between == min var !! Şekil 2’de JsonLogic tabanlı iş süreci kurallarının model-güdümlü geliştirilmesini sağlayan web tabanlı aracımıza ait bir ekran görüntüsü verilmiştir. Blockly ortamı üzerinde geliştirilen araçta sol tarafta JsonLogic somut sözdizimi için belirlediğimiz görsel notasyonların listesi bir palet içerisinde bulunmaktadır. Palet içerisinde benzer anlama sahip modelleme bileşenleri aynı kategori içerisine alınmıştır. Bir yazılım geliştirici bu paletten JsonLogic model elemanlarını sürükle- bırak yöntemi ile araçta orta kısımda bulunan modelleme alanına taşıyarak bu elemanlardan istenilen sayıda örnekler (ing. instance) oluşturabilir. Geliştirilen araç üzerinde JsonLogic iş kuralı modelleri oluşturulurken bir takım statik semantik kontrolleri de otomatik olarak gerçekleştirilmektedir. Bölüm 3’te verilen JsonLogic üstmodeli varlıkları ve ilişkileri için tanımlı olan bazı kısıtlara göre kontroller gerçekleştirilmekte ve somut sözdizim gösterimi farklılaşmaktadır. Örneğin, “if” kavramına ait görsel Blockly notasyonunun girişi birden fazla olabileceği için “+” operatörü kullanılarak istenen sayıda girdi eklenebilir. Ancak kıyaslama kavramlarının (örneğin “==, !, !!”) girdisi maksimum iki ile sınırlı olduğu için modelleme aracı bir geliştiricinin sadece ikili-giriş blokla gösterim yapmasına izin vermektedir. Modelleme sırasında girdi tipi kontrolleri de (“var, string, number, array, true ve false” gibi) araç tarafından yapılmaktadır. Örneğin, “var” kavramı bir girişli bloktur ve kullanıcıdan gelen veriyi tanımlar. Diğer girdiler, sonlu bir bloktan tanımlanır ve hiç giriş kısmı yoktur. Bir diğer statik semantik kontrol örneği “between” bileşeni için verilebilir. “between”’in üstmodeldeki tanımlamasına göre üçten fazla girdisi olamayacağı için araç bu bileşenin örneklerinin maksimum üç girişli blok ile modele dahil edilmesine izin verir. Ayrıca “between” kavramının girdileri sadece “number” ve “var” olabilir ve modelleme alanında blok tasarımları yapılırken “between” örnekleri için sadece bu tiplerde girdilerin tanımlanmasına izin verilir. Söz konusu bu kısıt kontrollerinin modelleme sırasında otomatik olarak gerçekleştirilmesi geliştiricilerin daha doğru JsonLogic kurallarını elde etmelerine yardımcı olmaktadır. Şekil 2. JsonLogic modelleme ortamından bir görünüm 5 JsonLogic Kurallarının Otomatik Üretilmesi Bir DSML ile modellenen yazılımların işletilebilir kodlarının elde edilmesi için bir dizi dönüşüm kuralına dayalı bir semantik kurgulanabilir [30]. Bu çalışmada JsonLogic DSML’i ile hazırlanan modellerden JsonLogic yapılarının ve iş süreci kurallarının otomatik üretilmesi için bir işletimsel semantik de tanımlanmıştır. Hazırlanan iş kuralı modelleri bloklarla modellendikten sonra bu modeller üzerinde işletilen modelden metne kurallar ilgili modellere karşılık gelen JsonLogic’in otomatik üretilmesini sağlarlar. Bu amaçla bir dizi dönüşüm kuralını JavaScript dilini kullanarak hazırladık. Örneğin aşağıdaki JavaScript dönüşüm kodu geliştirilen bir Blockly JsonLogic modeli üzerindeki her bir “if” örneği için karşılık gelen JsonLogic yapısını üretmektedir: 1. Blockly.JSON['if_logic'] = function(block) { 2. var if_logic = {}; 3. var array = []; 4. for(var i = 0; i