Ana içeriğe geç

FEEL

Karar modelindeki birçok ifade türüne standart, yürütülebilir anlamlar kazandırmayı amaçlayan, yeterince anlaşılır ifade dili (FEEL) şu özelliklere sahiptir:

  • Yan etkisiz
  • Sayılar, tarihler, dizeler, listeler ve bağlamlardan oluşan basit veri modeli
  • Geniş bir kitle için tasarlanmış basit söz dizimi

  • Üç değerli mantık (true, false, null)

Karar tabloları veya iş bilgisi modelleri için FEEL ifadeleri yazarken bu sayfayı dil başvurusu olarak kullanın.

Veri Türleri

FEEL aşağıdaki veri türlerini destekler:

  • sayı

  • dize

  • boolean

  • gün ve saat süresi

  • yıl ve ay süresi

  • saat

  • tarih ve saat

  • liste

  • bağlam

Süre ve date/time veri türlerinin değişmez değer söz dizimi yoktur. Bu değerler, yerleşik bir işlev kullanılarak dize gösteriminden oluşturulmalıdır (dönüştürme işlevlerine bakın).

Bağlamlar, Listeler ve Nitelikli Adlar

Bağlam, bağlam girdileri adı verilen anahtar-değer çiftlerinden oluşan bir eşlemedir. Bağlamı sınırlamak için küme parantezleri, girdileri ayırmak için virgüller ve anahtar ile değeri ayırmak için iki nokta üst üste kullanılarak yazılır. Anahtar, bir dize veya ad olabilir. Değer bir ifadedir.

Listeyi sınırlamak için köşeli parantezler, liste öğelerini ayırmak için virgüller kullanılır. Tek elemanlı bir liste, tek öğesine eşittir. Tüm FEEL ifadeleri için örnek: "[e]=e".

Bağlamlar ve listeler, başka bağlamlara ve listelere başvurarak yönlü döngüsüz bir grafik oluşturabilir. Adlandırma yol temellidir. Bir bağlam girdisinin nitelikli adı (QN) "N1.N2 ... Nn" biçimindedir; burada N1, kapsam içindeki bir bağlamın adıdır.

N1.N2 ... Nn yorumlanırken karşılaşılan iç içe listeler korunur. Örneğin,

1
2
3
    [{a: [{b: 1}, {b: [2.1, 2.2]}]}, {a: [{b: 3}, {b: 4}, {b: 5}]}].a.b =
    [[{b: 1}, {b: [2.1, 2.2]}], [{b: 3}, {b: 4}, {b: 5}]].b =
    [[1, [2.1, 2.1]],[ 3, 4, 5]]

İç içe listeler, yerleşik flatten() işlevi kullanılarak düzleştirilebilir.

Değişmez Değer ve Veri Türü Anlambilimi

Eşitlik

Genel olarak karşılaştırılacak değerler aynı türde olmalıdır. Örneğin; FEEL("1" = 1) = null

veri türü e1 = e2
liste listelerin uzunluğu aynı olmalı ve e1[n] = e2[n] eşit olmalıdır
bağlam bağlam aynı anahtar kümesine sahip olmalı ve her e1.key = e2.key eşit olmalıdır
aralık aralığın başlangıç ve bitiş noktaları aynı olmalıdır
sayı sayıların değerleri eşit olmalıdır
dize dize değerleri büyük/küçük harf duyarlılığıyla eşleşmelidir
tarih tüm tarih bileşenleri eşit olmalıdır
tarih ve saat tüm tarih ve saat bileşenleri eşit olmalıdır
saat tüm saat bileşenleri eşit olmalıdır
gün ve saat süresi süre değeri eşit olmalıdır
yıl ve ay süresi süre değeri eşit olmalıdır
boole hem e1 hem de e2 true veya false olmalıdır

sayı

FEEL sayıları ondalık biçime dayanır; tamsayı veya kayan noktalı veri türleri yoktur.

Değişmez değerler 10 tabanındaki rakamlardan ve isteğe bağlı bir ondalık ayırıcıdan oluşur. –INF, +INF ve NaN değişmez değerleri desteklenmez. -0 ile 0 arasında ayrım yoktur. number(from, grouping separator, decimal separator) yerleşik işlevi daha zengin bir değişmez değer biçimini destekler. Örneğin, FEEL(number("1.000.000,01", ".", ",")) = 1000000.01

NaN, positiveInfinity veya negativeInfinity için bir değer yoktur. Bunun yerine null kullanın.

FEEL İfadesi Değer
decimal(1,2) 1.00
.25 + 0.2 0.45
0.10 * 30.00 3.0000
1 + 3/2*2 - 2 ** 3 -4.0
1/3 0.333333333
decimal(1/3, 2) 0.22
1 = 1.0000 true
1.01 / 2 0.505
decimal(0.502, 2) 0.50
decimal(0.515, 2) 0.52
1.0*10**3 1000.0

{#_1}

dize

Dize değişmez değerleri çift veya tek tırnak içine alınmış karakter dizileri olabilir. Örneğin, "abc". Tüm dizeler UTF-8 kodlamasına göre karşılaştırılır.

boole

Boole değişmez değerleri true ve false.

time

FEEL'de saat değişmez değerleri bulunmaz; ancak saat değerleri bir dize değişmez değeri ve time yerleşik işlevi kullanılarak ifade edilebilir.

Saat değerlerinde isteğe bağlı bir saat dilimi farkı da bulunabilir. Saat dilimi farkı belirtilmezse saat, yerel günün saati olarak yorumlanır.

Saat veri türü ayrıca saat, dakika, saniye ve isteğe bağlı saat farkı için sayı dizisinden oluşan bir bağlam sağlar.

tarih

FEEL'de saat değişmez değerleri bulunmaz; ancak saat değerleri bir dize değişmez değeri ve date yerleşik işlevi kullanılarak ifade edilebilir.

Tarih değerlerinde saat dilimi farkı yoktur ve UTC saat diliminde yorumlanırlar.

Tarih veri türü ayrıca yıl, ay ve ayın günü için sayı dizisinden oluşan bir bağlam sağlar.

tarih ve saat

FEEL'de saat değişmez değerleri bulunmaz; ancak saat değerleri bir dize değişmez değeri ve date time yerleşik işlevi kullanılarak ifade edilebilir.

Tarih ve saat değerlerinde isteğe bağlı bir saat dilimi farkı da bulunabilir. Saat dilimi farkı belirtilmezse saat, UTC saat diliminde yorumlanır.

Tarih ve saat veri türü ayrıca yıl, ay, gün, saat, dakika, saniye ve isteğe bağlı saat farkı için sayı dizisinden oluşan bir bağlam sağlar.

gün ve saat süresi

FEEL'de saat değişmez değerleri bulunmaz; ancak saat değerleri bir dize değişmez değeri ve gün ve saat süresi yerleşik işlevi kullanılarak ifade edilebilir. Süre biçimi ISO 8601 süre sözdizimiyle ifade edilir.

Gün ve saat süresi veri türü ayrıca sürenin gün, saat, dakika ve saniyeleri için bir sayı dizisinden oluşan bağlam sağlar ve bu sayılar toplamları en aza indirilecek şekilde normalleştirilir. Örneğin; FEEL(duration("P0DT25H")) = P1DT1H

yıl ve ay süresi

FEEL'de saat değişmez değerleri bulunmaz; ancak saat değerleri bir dize değişmez değeri ve yıl ve ay süresi yerleşik işlevi kullanılarak ifade edilebilir. Süre biçimi ISO 8601 süre sözdizimiyle ifade edilir.

Gün ve saat süresi veri türü ayrıca sürenin yıl ve ayları için bir sayı dizisinden oluşan bağlam sağlar ve bu sayılar toplamları en aza indirilecek şekilde normalleştirilir. Örneğin; FEEL(duration("P0Y13M")) = P1Y1M

Listeler ve filtreler

Listeler değiştirilemez ve iç içe olabilir. Listenin ilk öğesine L[1] kullanılarak, son öğesine ise L[-1]kullanılarak erişilebilir. Listede öğe yoksa L[n] = null olur.

Listeler köşeli parantez içindeki bir boole ifadesiyle filtrelenebilir. Köşeli parantez içindeki ifade, liste öğesine "item" adıyla başvurabilir. Liste girdileri bir bağlam olduğunda, filtre ifadesinde öğe girdilerine "item" öneki olmadan başvurulabilir item önekini kullanmadan. Örneğin;

1
2
    [1, 2, 3, 4][item > 2] = [3, 4]
    [{x:1, y:2}, {x:2, y:3}][x=1] = {x:1, y:2}

Kolaylık sağlamak için sol tarafında bağlam listesi bulunan "." işleciyle yapılan seçim, seçimlerden oluşan bir liste döndürür. Örneğin;

1
    [{x:1, y:2}, {x:2, y:3}].y = [2,3]

Bağlam

Bağlam, bağlam girdileri olarak adlandırılan anahtar ve ifade çiftlerinden oluşan bir koleksiyondur. Anahtarlar dize değerleriyle eşlenir. context1 bağlamından key1 adlı bağlam girdisinin değerini seçme söz dizimi "context1.key1" şeklindedir.

m bağlamındaki anahtar-değer çiftlerinin listesini almak için aşağıdaki yerleşik işlev kullanılabilir: get entries(m).

Aralık

FEEL, değer aralıkları için kısa söz dizimini destekler.

FEEL İfadesi Değer
5 in ( <=5 ) true
5 in ( (5..10] ) false
5 in ( [5..10] ) true
5 in ( 4, 5, 6 ) true
5 in ( <5, >5 ) false
2012-12-31 in ( (2012-12-25..2013-02-14) ) true

{#_2}

Değilleme

Değilleme, yerleşik not işleviyle gerçekleştirilir. Değillemenin anlamı şöyledir:

a not(a)
true false
false true
diğer durumlarda null

İkili mantık

İkili mantık, "and" ve "or" anahtar sözcükleriyle ifade edilebilir. İkili mantığın anlamı şöyledir:

a b a and b a or b
true true true true
true false false true
true diğer durumlarda null true
false true false true
false false false false
false diğer durumlarda false null
diğer durumlarda diğer durumlarda null null

XML Veri Eşleme

FEEL, bağlamlarda XML veri bağlamını destekler. XML ad alanları desteklenmez ancak öğelere önek kullanılarak erişilebilir. Tüm XML değerleri dize değerleri olarak yorumlanır.

XML bağlam girdisi Açıklamalar
e : null boş öğe null değerine eşlenir.
n$e : null ad alanları yok sayılır ve girdiye erişmek için önek kullanılabilir.
v e : "v" değer içeren tek öğe
v1v2 e : ["v1","v2"] değer içeren yinelenen öğe
v1 e$a : "v"

e : "v1"
özniteliklerin önüne @ getirilir

öğe değerine adıyla erişilir
v1

v1

e$a : "v",

e.c : "v1"
özniteliklerin önüne @ getirilir

alt öğelere adlarıyla erişilir

Yerleşik İşlevler

Birlikte çalışabilirliği artırmak için FEEL, yerleşik işlevlerden oluşan bir kitaplık içerir. Yerleşik işlevlerin söz dizimi ve anlamı, FEEL uyumlu bir uygulama için zorunludur.

Dönüştürme İşlevleri

FEEL, farklı türlerdeki değerler arasında birçok dönüştürmeyi destekler. Dizelerin tarihlere, saatlere ve sürelere dönüştürülmesi özellikle önemlidir. Tarih, saat veya süre için değişmez değer gösterimi yoktur. Ayrıca 1,000.00 gibi biçimlendirilmiş sayılar, gruplama ayırıcı ve ondalık ayırıcı belirtilerek bir dizeden dönüştürülmelidir.

Ad ve Parametreler Parametre Açıklama Örnek
date(from) tarih dizesi from değerini tarihe dönüştürür date("2012-12-25") – date("2012-12-24") = duration("P1D")
date(from) tarih ve saat from değerini tarihe dönüştürür (saat bileşenlerini null olarak ayarlar) date(date and time("2012-12-25T11:00:00Z")) = date("2012-12-25")
date(year, month, day) yıl, ay, gün sayılardır yıl, ay ve gün bileşen değerlerinden bir tarih oluşturur date(2012, 12, 25) = date("2012-12-25")
date and time(date, time) date bir tarih veya tarih-saat değeridir; time bir saat değeridir verilen tarihten (saat bileşeni varsa yok sayarak) ve verilen saatten bir tarih-saat oluşturur date and time ("2012-12-24T23:59:00") = date and time (date("2012-12-24”), time(“T23:59:00"))
date and time(from) tarih-saat dizesi from değerini tarih-saat değerine dönüştürür date and time("2012-12-24T23:59:00") + duration("PT1M") = date and time("2012-12- 25T00:00:00")
time(from) saat dizesi from değerini saat değerine dönüştürür time("23:59:00z") + duration("PT2M") = time("00:01:00@Etc/UTC")
time(from) saat, tarih-saat tarih bileşenlerini yok sayarak from değerini saat değerine dönüştürür time(date and time("2012-12-25T11:00:00Z")) = time("11:00:00Z")
time(hour, minute, second, offset) hour, minute ve second sayıdır; offset gün ve saat süresi ya da null değeridir verilen bileşen değerlerinden bir saat oluşturur time(“T23:59:00z") = time(23, 59, 0, duration(“PT0H”))
number(from, grouping separator, decimal separator) dize, dize, dize from değerini sayıya dönüştürür number("1 000,0", " ", ",") = number("1,000.0", ",", ".")
string(from) null olmayan from değerini dizeye dönüştürür string(1.1) = "1.1" string(null) = null
duration(from) süre dizesi from değerini gün ve saat ya da yıl ve ay süresine dönüştürür date and time("2012-12-24T23:59:00") - date and time("2012-12-22T03:45:00") = duration("P2DT20H14M")

duration("P2Y2M") = duration("P26M")
years and months duration(from, to) ikisi de tarih-saat değeridir from ile to arasındaki yıl ve ay süresini döndürür years and months duration( date("2011-12-22"), date("2013-08-24") ) =

duration("P1Y8M")

Boole İşlevleri

Ad ve Parametreler Parametre Açıklama Örnek
boolean(from) dize boole dönüşümü boolean("true") = true

boolean("false") = false

boolean(true) = true
not(negand) boole mantıksal değilleme not(true) = false

not(null) = null

Dize İşlevleri

Ad ve Parametreler Parametre Açıklama Örnek
substring(string, start position, length?) dize, sayı start position konumundan başlayarak dizedeki length kadar (veya tüm) karakteri döndürür. İlk konum 1, son konum -1'dir substring("foobar",3) = "obar"
substring("foobar",3,3) = "oba"
substring("foobar", -2, 1) = "a"
string length(string) dize dizenin uzunluğunu döndürür string length("foo") = 3
upper case(string) dize büyük harfe dönüştürülmüş dizeyi döndürür upper case("aBc4") = "ABC4"
lower case(string) dize küçük harfe dönüştürülmüş dizeyi döndürür lower case("aBc4") = "abc4"
substring before (string, match) dize, dize string içindeki match ifadesinden önceki alt dizeyi döndürür substring before("foobar", "bar") = "foo"
substring before("foobar", "xyz") = ""
substring after (string, match) dize, dize string içindeki match ifadesinden sonraki alt dizeyi döndürür substring after("foobar", "ob") = "ar"
substring after("", "a") = ""
replace(input, pattern, replacement, flags?) dize düzenli ifade kalıbı eşleştirme ve değiştirme replace("abcd", "(ab)|(a)", "[1=$1][2=$2]") = "[1=ab][2=]cd"
contains(string, match) dize dize match ifadesini içeriyor mu? contains("foobar", "of") = false
starts with(string, match) dize dize match ifadesiyle başlıyor mu? starts with("foobar", "fo") = true
ends with(string, match) dize dize match ifadesiyle bitiyor mu? ends with("foobar", "r") = true
matches(input, pattern, flags?) dize input, düzenli ifade kalıbıyla eşleşiyor mu? matches("foobar", "^fo*b") = true
string join(list, delimiter?) liste, dize liste öğelerinin delimiter ile birleştirildiği dizeyi döndürür string join(["a","b","c"], ",") = "a,b,c"
split(string, delimiter) dize, dize delimiter ile bölünmüş dizelerden oluşan listeyi döndürür split("a,b,c", ",") = ["a","b","c"]

Liste İşlevleri

Ad ve Parametreler Parametre Açıklama Örnek
list contains(list, element) liste, null dahil anlamsal alandaki herhangi bir öğe liste element öğesini içeriyor mu? list contains([1,2,3], 2) = true
count(list) liste listenin boyutunu döndürür count([1,2,3]) = 3
min(list)
min(c1,..., cN), N >1 max(list)
max(c1,..., cN), N >1
(liste) karşılaştırılabilir öğeler en küçük öğeyi döndürür
en büyük öğeyi döndürür
min([1,2,3]) = 1
min(1,2,3) = 1
max([1,2,3]) = 3
max(1,2,3) = 3
sum(list)
sum(n1,..., nN), N >1
(liste) sayılar sayıların toplamını döndürür sum([1,2,3]) = 6
sum(1,2,3) = 6
mean(list)
mean(n1,..., nN), N >1
(liste) sayılar sayıların aritmetik ortalamasını döndürür mean([1,2,3]) = 2
mean(1,2,3) = 2
and(list)
and(b1,..., bN), N >1
(liste) Boole öğeleri Herhangi bir öğe false ise false; tüm öğeler true ise true; aksi hâlde null döndürür and([false,null,true]) = false and(false,null,true) = false
and([]) = true
and(0) = null
or(list)
or(b1,..., bN), N >1
(liste) Boole öğeleri Herhangi bir öğe true ise true; tüm öğeler false ise false; aksi hâlde null döndürür or([false,null,true]) = true
or(false,null,true) = true
or([]) = false
or(0) = null
sublist(list, start position, length?) liste, sayı1, sayı2 listenin uzunluğunda (veya tüm) öğelerini döndürür; list[başlangıç konumu]konumundan başlayarak. İlk konum 1, son konum -1'dir sublist([1,2,3], 1, 2) = [2]
append(list, item...) liste, null dahil herhangi bir öğe öğelerin eklendiği yeni listeyi döndürür append([1], 2, 3) = [1,2,3]
concatenate(list...) liste bağımsız değişkenlerin birleştirilmesiyle oluşan yeni listeyi döndürür concatenate([1,2],[3]) = [1,2,3]
insert before(list, position, newItem) liste, sayı1, null dahil herhangi bir öğe newItem öğesinin position konumuna eklendiği yeni listeyi döndürür insert before([1,3],1,2) = [1,2,3]
remove(list, position) liste, sayı1 belirtilen konumdaki öğe çıkarılmış liste remove([1,2,3], 2) = [1,3]
reverse(list) liste listeyi tersine çevir reverse([1,2,3]) = [3,2,1]
index of(list, match) liste, null dahil herhangi bir öğe eşleşmeyi içeren liste konumlarının artan sıralı listesini döndürür index of([1,2,3,2],2) = [2,4]
union(list...) liste yinelenenleri kaldırarak birleştirir union([1,2],[2,3]) = [1,2,3]
distinct values(list) liste yinelenenleri kaldırma distinct values([1,2,3,2,1] = [1,2,3]
flatten(list) liste iç içe listeleri düzleştirir flatten([[1,2],[[3]], 4]) = [1,2,3,4]

Sayısal işlevler

Ad ve Parametreler Parametre Açıklama Örnek
decimal(n, scale) sayı, sayı1 n değerini belirtilen ölçekle döndürür decimal(1/3, 2) = .33
decimal(1.5, 0) = 2
decimal(2.5, 0) = 2
  • Karar Modelleri
  • Karar Tablosu
  • Komut Dosyası Oluşturma | floor(n) | sayı | n değerinden küçük veya ona eşit en büyük tam sayıyı döndürür | floor(1.5) = 1
    floor(-1.5) = -2 | | ceiling(n) | sayı | n değerinden büyük veya ona eşit en küçük tam sayıyı döndürür | ceiling(1.5) = 2
    ceiling(-1.5) = -1 |