KCL Programlama Dilinde Doğrulama

Jan 09 2023
Giriş Kusion Yapılandırma Dili (KCL), açık kaynaklı, kısıtlamaya dayalı bir kayıt ve işlevsel dildir. KCL, olgun programlama dili teknolojisi ve uygulamasıyla çok sayıda karmaşık yapılandırmanın yazılmasını geliştirir ve yapılandırma, daha basit mantık yazımı, hızlı otomasyon ve iyi ekolojik genişleme etrafında daha iyi modülerlik, ölçeklenebilirlik ve kararlılık oluşturmaya kendini adamıştır.

Giriş

Kusion Yapılandırma Dili (KCL) , açık kaynaklı, kısıtlamaya dayalı bir kayıt ve işlevsel dildir. KCL, olgun programlama dili teknolojisi ve uygulamasıyla çok sayıda karmaşık yapılandırmanın yazılmasını geliştirir ve yapılandırma, daha basit mantık yazımı, hızlı otomasyon ve iyi ekolojik genişleme etrafında daha iyi modülerlik, ölçeklenebilirlik ve kararlılık oluşturmaya kendini adamıştır.

ön koşul

KCL'yi yükleyin:

KCL'nin her sürümü çeşitli işletim sistemlerini ve mimarileri içerir. Bu ikili sürümler, Github'dan manuel olarak indirilip kurulabilir ve {install-location}/kclvm/binPATH ortamına eklenebilir .

export PATH=$PATH:{install-location}/kclvm/bin

JSON/YAML gibi yapılandırma biçimleri oluşturmak için KCL kodunu kullanmanın yanı sıra KCL, JSON/YAML verilerinin biçim doğrulamasını da destekler. Bir yapılandırma dili olarak KCL, OpenAPI'nin neredeyse tüm özelliklerini kapsar .

KCL'de, yapılandırma verilerini doğrulamak için bir yapı tanımı kullanılabilir. Aynı zamanda, kontrol bloğu aracılığıyla kullanıcı tanımlı kısıtlama kurallarını destekler ve şema tarafından tanımlanan öznitelikleri kontrol etmek ve doğrulamak için şemada doğrulama ifadeleri yazar. JSON/YAML girişinin karşılık gelen şema yapısı tanımını ve kısıtlamalarını karşılayıp karşılamadığını kontrol etmek çok açık ve basittir .

Şemada, checkher şema özniteliğinin doğrulama kurallarını yazmak için anahtar kelimeyi kullanabiliriz. Kontrol bloğundaki her satır bir koşullu ifadeye karşılık gelir. Koşul sağlandığında, doğrulama başarılı olur. , "check error message"Kontrol başarısız olduğunda görüntülenecek mesajı belirtmek için koşullu ifadenin ardından gelebilir . İşte kısıtlama ifadeleri içeren bir şema örneği.

import regex

schema Sample:
    foo: str  # Required, cannot be None/Undefined, and the type must be str
    bar: int  # Required, cannot be None/Undefined, and the type must be int
    fooList: [int]  # Required, cannot be None/Undefined, and the type must be int list
    color: "Red" | "Yellow" | "Blue"  # Required, literal union type, and must be one of "Red", "Yellow", "Blue".
    id?: int  # Optional, can be None/Undefined, the type must be int
    check:
        0 <= bar < 100  # bar must be greater than or equal to 0 and less than 100
        0 < len(fooList) < 100  # fooList cannot be None/Undefined, and the length must be greater than 0 and less than 100
        regex.match(foo, "^The.*Foo$")  # regular expression matching
        bar in range(100)  # bar can only range from 1 to 99
        bar in [2, 4, 6, 8]  # bar can only take 2, 4, 6, 8
        bar % 2 == 0  # bar must be a multiple of 2
        all foo in fooList {
            foo > 1
        }  # All elements in fooList must be greater than 1
        any foo in fooList {
            foo > 10
        }  # At least one element in fooList must be greater than 10
        abs(id) > 10 if id  # check expression with if guard, when id is not empty, the absolute value of id must be greater than 10

​

Bir JSON biçim dosyası var data.json:

{
    "name": "Alice",
    "age": "18",
    "message": "This is Alice",
    "data": {
        "id": "1",
        "value": "value1"
    },
    "labels": {
        "key": "value"
    },
    "hc": [1, 2, 3]
}

schema User:
    name: str
    age: int
    message?: str
    data: Data
    labels: {str:}
    hc: [int]
        
    check:
        age > 10

schema Data:
    id: int
    value: str

$ kcl-vet data.json schema.k
Validate succuss!

Gelecek Planı

KCL doğrulama yeteneklerinin iyileştirilmesi kademeli olarak "statik" yönüne odaklanacaktır, yani derleme zamanında, resmi doğrulama yeteneği ile birleştiğinde, verilerin kısıtlamaları karşılayıp karşılamadığını, kısıtlamaların birbiriyle çelişip çelişmediğini doğrudan analiz edebilir. vb. ve IDE aracılığıyla gerçek zamanlı olarak gösterilebilir.

Ayrıca KCL modellerinin ve kısıtlamalarının bir paket olarak yönetilebilmesini bekliyoruz (bu pakette yalnızca KCL dosyaları vardır). Örneğin, Kubernetes modelleri ve kısıtlamaları kullanıma hazır olarak kullanılabilir. Kullanıcılar konfigürasyonlar oluşturabilir veya mevcut konfigürasyonları doğrulayabilir ve KCL kalıtımı yoluyla kullanıcıların istediği modelleri ve kısıtlamaları kolayca genişletebilir.

Daha Fazla Belge