قالببندی
قالببندی فرآیند استفاده از الگوهای از پیش تعریفشده برای درج یا جایگزینی مقادیر بهصورت پویا در متن است. این الگوها بهعنوان مکاننما برای متغیرهایی عمل میکنند که میتوانند در مراحل بعدی با دادههای واقعی تکمیل شوند.
در زمینه موتور قوانین، از الگوها برای استخراج داده از پیامهای ورودی در زمان اجرا استفاده میشود. این موضوع بهویژه در پیکربندی گره قوانین مفید است، جایی که قالببندی امکان پیکربندی پویا را فراهم میکند؛ به این صورت که مقادیر ثابت در فیلدهای پیکربندی با مقادیر بلادرنگ از پیامهای ورودی جایگزین میشوند. این فرآیند، مدیریت دادهها را انعطافپذیرتر و خودکارتر میکند و امکان انجام عملیات شرطی بر اساس ورودیهای متغیر را آسانتر میسازد.
نحو
الگوها با علامت دلار ($) شروع میشوند و سپس براکتهایی که درون آنها یک نام کلید قرار دارد. برای کلیدهای پیام از براکتهای مربعی ([]) و برای کلیدهای فراداده پیام از براکتهای {} استفاده میشود. به عنوان مثال:
- messageKey] - مقدار کلید messageKey را از پیام ورودی استخراج میکند.
- ${metadataKey} - مقدار کلید metadataKey را از فراداده پیام ورودی استخراج میکند.
در مثال بالا، messageKey و metadataKey نمایانگر هر نام کلیدی هستند که ممکن است در پیام یا فراداده آن وجود داشته باشد.
مثال
بیایید یک مثال را مرور کنیم. اولین JSON پیام است، و دومین، فراداده پیام:
{
"temperature": 26.5,
"humidity": 75.2,
"soilMoisture": 28.9,
"windSpeed": 26.2,
"location": "riverside"
}
{
"deviceType": "weather_sensor",
"deviceName": "weather1",
"ts": "1685379440000"
}
فرض کنید که ما سرعت بادی غیرمعمول را شناسایی کردهایم و قصد داریم این دادههای تلهمتری را به یک API خارجی REST ارسال کنیم. هر خوانش باید با دستگاه و مکان خاصی مرتبط باشد - این اطلاعات تنها بهصورت بلادرنگ در دسترس هستند. میتوانیم از قالبها برای استخراج دادههای لازم و ساخت URL جهت ارسال دادهها استفاده کنیم:
example-base-url.com/report-reading location=$[location]&deviceName=${deviceName}
این قالب به صورت زیر حل خواهد شد:
example-base-url.com/report-reading?location=riverside&deviceName=weather1
قالبها برای سناریوهایی ایدهآل هستند که مقادیر خاص در زمان پیکربندی شناخته شده نیستند اما در زمان اجرا در دسترس خواهند بود.
نکات
- قالبها میتوانند با متن عادی ترکیب شوند. برای مثال: "مخازن سوخت تا $[fuelLevel]% پر شدهاند".
- میتوانید به کلیدهای تو در تو در یک شیء JSON با استفاده از نشانهگذاری نقطه دسترسی داشته باشید: $[object.key].
- اگر کلید مشخصشده وجود نداشته باشد یا مقدار مرتبط با آن کلید یک شیء یا آرایه باشد، رشته قالب بدون تغییر بازگردانده خواهد شد.
برای توضیح بیشتر، بیایید یک مثال را بررسی کنیم. این محتوای یک پیام است:
{
"number": 123.45,
"string": "text",
"boolean": true,
"array": [1, 2, 3],
"object": {
"property": "propertyValue"
},
"null": null
}
در اینجا یک جدول با مقایسه بین قالبها و مقادیر استخراجشده ارائه شده است:
مقدار استخراجشده |
قالب |
---|---|
123.45 |
$[number] |
text |
$[string] |
true |
$[boolean] |
$[array] |
$[array] |
$[object] |
$[object] |
propertyValue |
$[object.property] |
null |
$[null] |
$[doesNotExist] |
$[doesNotExist] |