PHP: Outlook tarzı kural motoru

2 Cevap php

Ben verileri yorumlamak için bir kural tabanlı bir sistem inşa etmeye çalışıyorum. Ancak, kuralları depolamak ve yorumlama için mantığını oluşturmak için bir yol üzerinde karar sorunlar yaşıyorum.

Şu anda, oldukça karmaşık bir veritabanı yapısı, ama kural veri depolama tüm yönleri ile ele alacağız. Fikir sistemi, MS Outlook kullanıcı kuralları eklemenizi sağlar şeklini taklit etmek mümkün olacak olmasıdır.

Şöyle Benim sorunlar şunlardır:

  1. Ne desen ben nesneler içinde bu kuralları saklamak için kullanıyor olmalıdır?
  2. Ben kurallarını çalıştırmak için eval () veya uygun nesne yönünü kullanmalı mıyım?

Ve örnek kural olabilir:

Bölgede Köpek must have yaka park

Her eleman (köpek, olmalıdır, yaka, alanda, park) Nerede yorumlanmalıdır mantık ayrı bir parçasıdır.

Yukarıdaki sorulara herhangi bir genel tavsiye çok takdir!

2 Cevap

Eğer bir "gerçek dünya" bağlamında açıklamak gibi bir sistem uygulamaya hiç, ama ben hobi projeleri olarak onlarla bir önemli miktarda oynamıştır. Benim tercih edilen yaklaşım iddialar yapmak ve onları kontrol etmek için Prolog gibi mantık dili çeşit kullanmaktır. Sen parkı bu bir köpek ne bir şey, ne anlama geldiğini, nerede için iddialar olurdu ve o zaman yazının altındaki parantez içinde tam olarak örnekteki gibi bir kural oldukça çok yapmak istiyorum. Benim Prolog size kullanışlı bir örnek vermek için çok paslı üzgünüm ... Ben çok uzun evde yetiştirilen çıkarsama dilleri ile oynuyorum.

Ben PHP5'ta hakkında emin değilim ama çoğu dilde gömmek için kullanılabilir Prolog tercümanlar vardır. Bir Prolog tercüman bulamazsanız eğer, birlikte oldukça kısa sırayla kendi yaratılış kuralı veri yapıları üzerinde forward-chaining inference yaptığı basit bir şey atmak olabilir. Eğer otomatik çıkarım bu notes ilginizi çekebilir.

Muhtemelen bu cevabı sizin için apaçık / çok önemsiz ama ben sadece bir Zend Framework uygulama benim geçerli mevcut projede böyle bir şey çözecek nasıl düşündüm. Ben filtre ve validatorChains ZF kullanımları düşündüm. Ben olası giriş nesneleri finit dizi, koşulları / kısıtları bir finit dizi ve eylemler finit dizi var varsayalım. Tüm şartlar memnun iseniz actionChain karşı nesnesini çalıştırmak, bu durumda ilk bir nesne örneğini olur ve koşulları (validators) zincirine karşı çalıştırın. Burada muhtemelen bazı eylemler diğerlerinden önce yapılmalıdır beri eylem öncelik sistemi bir tür uygulamak gerekir. 'Gibi bir bildirim göndererek' ve ardından söz konusu nesneyi 'Sil'. Yani ZF ben her koşul / kısıtlaması için özel bir doğrulayıcı kuracak. Ben Outlook sistemi ben validators çok genel sanmıyorum çok zeki anlamı olduğuna inanmıyorum.

Db gerçek kurallar, koşullar için bir ve eylemler için biri için bir tablo var olabilir. Ardından gerekli tüm koşulları ve eylemleri ile kural bağlayan iki çok-çok tablo var olabilir.