OASIS CAP
JSON schema
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2.json",
"title": "OASIS Common Alerting Protocol (CAP) 1.2",
"description": "JSON Schema representation of OASIS CAP 1.2 for emergency alerting and public warnings",
"type": "object",
"required": ["alert"],
"properties": {
"alert": {
"type": "object",
"required": ["identifier", "sender", "sent", "status", "msgType", "scope"],
"properties": {
"identifier": {
"type": "string",
"description": "The identifier of the alert message"
},
"sender": {
"type": "string",
"description": "The identifier of the sender of the alert message"
},
"sent": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[\\-+\\.]\\d{2}:\\d{2}$",
"description": "The time and date of the origination of the alert message (ISO 8601 with timezone offset)"
},
"status": {
"type": "string",
"enum": ["Actual", "Exercise", "System", "Test", "Draft"],
"description": "The code denoting the appropriate handling of the alert message"
},
"msgType": {
"type": "string",
"enum": ["Alert", "Update", "Cancel", "Ack", "Error"],
"description": "The code denoting the nature of the alert message"
},
"source": {
"type": "string",
"description": "The text identifying the source of the alert message"
},
"scope": {
"type": "string",
"enum": ["Public", "Restricted", "Private"],
"description": "The code denoting the intended distribution of the alert message"
},
"restriction": {
"type": "string",
"description": "The text describing the rule for limiting distribution of the alert message (required if scope is 'Restricted')"
},
"addresses": {
"type": "string",
"description": "The group listing of intended recipients of the alert message (required if scope is 'Private')"
},
"code": {
"type": "array",
"items": {
"type": "string"
},
"description": "Codes denoting special handling of the alert message"
},
"note": {
"type": "string",
"description": "The text describing the purpose or significance of the alert message"
},
"references": {
"type": "string",
"description": "The group listing identifying prior message(s) referenced by the alert message"
},
"incidents": {
"type": "string",
"description": "The group listing naming the referent incident(s) of the alert message"
},
"info": {
"type": "array",
"items": {
"$ref": "#/definitions/info"
},
"description": "Container for all component parts of the info sub-element of the alert message"
}
}
}
},
"definitions": {
"info": {
"type": "object",
"required": ["category", "event", "urgency", "severity", "certainty"],
"properties": {
"language": {
"type": "string",
"default": "en-US",
"description": "The code denoting the language of the info sub-element (RFC 3066)"
},
"category": {
"type": "array",
"items": {
"type": "string",
"enum": ["Geo", "Met", "Safety", "Security", "Rescue", "Fire", "Health", "Env", "Transport", "Infra", "CBRNE", "Other"]
},
"minItems": 1,
"description": "The code denoting the category of the subject event"
},
"event": {
"type": "string",
"description": "The text denoting the type of the subject event"
},
"responseType": {
"type": "array",
"items": {
"type": "string",
"enum": ["Shelter", "Evacuate", "Prepare", "Execute", "Avoid", "Monitor", "Assess", "AllClear", "None"]
},
"description": "The code denoting the type of action recommended for the target audience"
},
"urgency": {
"type": "string",
"enum": ["Immediate", "Expected", "Future", "Past", "Unknown"],
"description": "The code denoting the urgency of the subject event"
},
"severity": {
"type": "string",
"enum": ["Extreme", "Severe", "Moderate", "Minor", "Unknown"],
"description": "The code denoting the severity of the subject event"
},
"certainty": {
"type": "string",
"enum": ["Observed", "Likely", "Possible", "Unlikely", "Unknown"],
"description": "The code denoting the certainty of the subject event"
},
"audience": {
"type": "string",
"description": "The text describing the intended audience of the alert message"
},
"eventCode": {
"type": "array",
"items": {
"$ref": "#/definitions/keyValue"
},
"description": "A system-specific code identifying the event type"
},
"effective": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[\\-+\\.]\\d{2}:\\d{2}$",
"description": "The effective time of the information of the info sub-element"
},
"onset": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[\\-+\\.]\\d{2}:\\d{2}$",
"description": "The expected time of the beginning of the subject event"
},
"expires": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[\\-+\\.]\\d{2}:\\d{2}$",
"description": "The expiry time of the information of the info sub-element"
},
"senderName": {
"type": "string",
"description": "The text naming the originator of the alert message"
},
"headline": {
"type": "string",
"description": "The text headline of the alert message"
},
"description": {
"type": "string",
"description": "The text describing the subject event"
},
"instruction": {
"type": "string",
"description": "The text describing the recommended action"
},
"web": {
"type": "string",
"format": "uri",
"description": "The identifier of the hyperlink associating additional information with the alert message"
},
"contact": {
"type": "string",
"description": "The text describing the contact for follow-up and confirmation of the alert message"
},
"parameter": {
"type": "array",
"items": {
"$ref": "#/definitions/keyValue"
},
"description": "A system-specific additional parameter"
},
"resource": {
"type": "array",
"items": {
"$ref": "#/definitions/resource"
},
"description": "Container for all component parts of the resource sub-element"
},
"area": {
"type": "array",
"items": {
"$ref": "#/definitions/area"
},
"description": "Container for all component parts of the area sub-element"
}
}
},
"resource": {
"type": "object",
"required": ["resourceDesc", "mimeType"],
"properties": {
"resourceDesc": {
"type": "string",
"description": "The text describing the type and content of the resource"
},
"mimeType": {
"type": "string",
"description": "The identifier of the MIME content type and sub-type describing the resource (RFC 2046)"
},
"size": {
"type": "integer",
"minimum": 0,
"description": "The integer indicating the size of the resource in bytes"
},
"uri": {
"type": "string",
"format": "uri",
"description": "The identifier of the hyperlink for the resource"
},
"derefUri": {
"type": "string",
"description": "The base64-encoded data content of the resource"
},
"digest": {
"type": "string",
"description": "The code representing the digital digest of the resource (SHA-1)"
}
}
},
"area": {
"type": "object",
"required": ["areaDesc"],
"properties": {
"areaDesc": {
"type": "string",
"description": "The text describing the affected area"
},
"polygon": {
"type": "array",
"items": {
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?( -?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?)+$"
},
"description": "The paired values of points defining a polygon (WGS 84)"
},
"circle": {
"type": "array",
"items": {
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)? \\d+(\\.\\d+)?$"
},
"description": "The paired values of a point and radius defining a circle (WGS 84)"
},
"geocode": {
"type": "array",
"items": {
"$ref": "#/definitions/keyValue"
},
"description": "A system-specific code identifying the affected area"
},
"altitude": {
"type": "number",
"description": "The specific or minimum altitude of the affected area (WGS 84 in meters)"
},
"ceiling": {
"type": "number",
"description": "The maximum altitude of the affected area (WGS 84 in meters)"
}
}
},
"keyValue": {
"type": "object",
"required": ["valueName", "value"],
"properties": {
"valueName": {
"type": "string",
"description": "The identifier of the type of value"
},
"value": {
"type": "string",
"description": "The value of the named type"
}
}
}
}
}
Schema Structure
alert (object) [required]
├── identifier (string) [required]
├── sender (string) [required]
├── sent (datetime) [required]
├── status (enum) [required]
├── msgType (enum) [required]
├── source (string)
├── scope (enum) [required]
├── restriction (string) [conditional]
├── addresses (string) [conditional]
├── code (array of string)
├── note (string)
├── references (string)
├── incidents (string)
└── info (array of object)
├── language (string) [default: "en-US"]
├── category (array of enum) [required]
├── event (string) [required]
├── responseType (array of enum)
├── urgency (enum) [required]
├── severity (enum) [required]
├── certainty (enum) [required]
├── audience (string)
├── eventCode (array of keyValue)
├── effective (datetime)
├── onset (datetime)
├── expires (datetime)
├── senderName (string)
├── headline (string)
├── description (string)
├── instruction (string)
├── web (URI)
├── contact (string)
├── parameter (array of keyValue)
├── resource (array of object)
│ ├── resourceDesc (string) [required]
│ ├── mimeType (string) [required]
│ ├── size (integer)
│ ├── uri (URI)
│ ├── derefUri (string)
│ └── digest (string)
└── area (array of object)
├── areaDesc (string) [required]
├── polygon (array of string)
├── circle (array of string)
├── geocode (array of keyValue)
├── altitude (number)
└── ceiling (number)
คำอธิบายละเอียดของแต่ละส่วนใน OASIS CAP JSON Schema
1. ระดับสูงสุด: alert (ข้อความเตือนภัยหลัก)
เป็นส่วนรากฐานของทุกข้อความ CAP บังคับต้องมี 1 ชุดต่อ 1 JSON
| ฟิลด์ | บังคับ | รูปแบบ | คำอธิบายและวัตถุประสงค์ |
|---|---|---|---|
| identifier | ✅ ใช่ | string | รหัสเฉพาะของข้อความนี้ (unique) ใช้อ้างอิงเวลาอัพเดตหรือยกเลิก ควรเป็น UUID หรือรหัสที่ไม่ซ้ำในระบบ เช่น "NWS-TOR-2024-001" |
| sender | ✅ ใช่ | string | รหัสผู้ส่ง มักเป็น URL หรือ identifier ของหน่วยงาน เช่น "https://www.tmd.go.th" หรือ "noreply@ddpm.go.th" |
| sent | ✅ ใช่ | datetime | เวลาที่ส่งข้อความ รูปแบบ YYYY-MM-DDThh:mm:ss±hh:mm (ISO 8601 + timezone) เช่น "2024-01-15T09:30:00+07:00" |
| status | ✅ ใช่ | enum | สถานะของข้อความ บอกว่าเป็นเหตุการณ์จริงหรือทดสอบ • Actual = เหตุการณ์จริง• Exercise = การซ้อม• System = ข้อความระบบ• Test = ทดสอบ• Draft = ร่าง |
| msgType | ✅ ใช่ | enum | ประเภทข้อความ • Alert = แจ้งเตือนใหม่• Update = อัพเดตข้อมูล (ต้องอ้างอิง references)• Cancel = ยกเลิกการแจ้งเตือนเดิม• Ack = ยืนยันการรับทราบ• Error = แจ้งข้อผิดพลาด |
| scope | ✅ ใช่ | enum | ขอบเขตการเผยแพร่ • Public = สาธารณะ (ไม่มีข้อจำกัด)• Restricted = จำกัดกลุ่ม (ต้องระบุ restriction)• Private = เฉพาะกลุ่ม (ต้องระบุ addresses) |
| source | ❌ ไม่ | string | แหล่งที่มา เช่น "ระบบตรวจจับแผ่นดินไหวอัตโนมัติ" หรือ "เจ้าหน้าที่ดูแลเขื่อน A" |
| restriction | ⚠️ มีเงื่อนไข | string | กฎการจำกัดการเข้าถึง บังคับใช้เมื่อ scope = Restricted เช่น "สำหรับเจ้าหน้าที่ฝ่ายความมั่นคงเท่านั้น" |
| addresses | ⚠️ มีเงื่อนไข | string | รายการผู้รับ บังคับใช้เมื่อ scope = Private คั่นด้วยช่องว่าง เช่น "user1@example.com user2@example.com" |
| code | ❌ ไม่ | array | รหัสพิเศษ ของระบบ (เช่น รหัสหมวดหมู่ภายในองค์กร) |
| note | ❌ ไม่ | string | หมายเหตุ เช่น "ข้อความนี้ทดสอบระบบ" หรือคำอธิบายเพิ่มเติม |
| references | ❌ ไม่ | string | อ้างอิงข้อความก่อนหน้า ใช้เมื่อ msgType เป็น Update หรือ Cancel รูปแบบ: sender,identifier,sent คั่นด้วยช่องว่าง |
| incidents | ❌ ไม่ | string | รหัสเหตุการณ์ ใช้กรณีที่หลายข้อความ CAP เชื่อมโยงกับเหตุการณ์เดียวกัน |
| info | ❌ ไม่ | array | รายละเอียดเหตุการณ์ (ดูส่วนที่ 2) สามารถมีได้หลายภาษาหรือหลายระดับความรุนแรง |
2. ระดับรอง: info (รายละเอียดเหตุการณ์)
บรรจุข้อมูลสาระสำคัญของเหตุการณ์ 1 ชุด alert สามารถมี info ได้หลายชุด (เช่น ภาษาไทย/อังกฤษ หรือระดับความรุนแรงต่างกัน)
| ฟิลด์ | บังคับ | รูปแบบ | คำอธิบายและวัตถุประสงค์ |
|---|---|---|---|
| language | ❌ ไม่ | string | ภาษา ตาม RFC 3066 (ค่าเริ่มต้น en-US) เช่น "th-TH" สำหรับไทย |
| category | ✅ ใช่ | array | หมวดหมู่เหตุการณ์ (เลือกได้หลายอัน) • Geo = ธรณีวิทยา (แผ่นดินไหว, ภูเขาไฟ)• Met = อุตุนิยมวิทยา (พายุ, ฝน)• Safety = ความปลอดภัย• Security = ความมั่นคง• Rescue = กู้ภัย• Fire = เพลิงไหม้• Health = สาธารณสุข• Env = สิ่งแวดล้อม• Transport = คมนาคม• Infra = โครงสร้างพื้นฐาน• CBRNE = เคมี/ชีวะ/รังสี/นิวเคลียร์/ระเบิด• Other = อื่นๆ |
| event | ✅ ใช่ | string | ชื่อเหตุการณ์ เช่น "พายุโนรู" หรือ "แผ่นดินไหว" |
| responseType | ❌ ไม่ | array | คำแนะนำการปฏิบัติตัว • Shelter = หลบภัยในที่อยู่อาศัย• Evacuate = อพยพ• Prepare = เตรียมพร้อม• Execute = ปฏิบัติตาม• Avoid = หลีกเลี่ยง• Monitor = เฝ้าระวัง• Assess = ประเมินสถานการณ์• AllClear = ยกเลิกการเตือน• None = ไม่ต้องทำอะไร |
| urgency | ✅ ใช่ | enum | ความเร่งด่วน (เวลาที่เหลือปฏิบัติตัว) • Immediate = ทันที (ภายใน 1 ชม.)• Expected = คาดว่าจะเกิด (1-12 ชม.)• Future = อนาคต (มากกว่า 12 ชม.)• Past = ที่ผ่านมาแล้ว• Unknown = ไม่ทราบ |
| severity | ✅ ใช่ | enum | ความรุนแรง (ผลกระทบ) • Extreme = รุนแรงมาก (คุกคามชีวิต/ทรัพย์สินเสียหายหนัก)• Severe = รุนแรง (อันตรายถึงชีวิต ทรัพย์สินเสียหาย)• Moderate = ปานกลาง (อาจบาดเจ็บ/เสียหาย)• Minor = เล็กน้อย (ไม่น่ากลัว)• Unknown = ไม่ทราบ |
| certainty | ✅ ใช่ | enum | ความแน่นอน (ความมั่นใจในข้อมูล) • Observed = สังเกตเห็นแล้ว (เกิดขึ้นจริง)• Likely = มีความเป็นไปได้สูง (>50%)• Possible = อาจเกิดขึ้นได้ (แต่ไม่แน่นอน)• Unlikely = มีความเป็นไปได้ต่ำ• Unknown = ไม่ทราบ |
| audience | ❌ ไม่ | string | กลุ่มเป้าหมาย เฉพาะ เช่น "ประชาชนในเขตเทศบาลเมือง" หรือ "นักท่องเที่ยวบนภูเขา" |
| eventCode | ❌ ไม่ | array | รหัสเหตุการณ์เฉพาะระบบ ใช้คู่ key-value (เช่น รหัส TMD, รหัส DDPM) |
| effective | ❌ ไม่ | datetime | เวลาที่เริ่มมีผล ข้อความมีผลตั้งแต่เมื่อไหร่ |
| onset | ❌ ไม่ | datetime | เวลาที่คาดว่าเหตุการณ์จะเริ่ม เช่น พายุจะถึงฝั่ง |
| expires | ❌ ไม่ | datetime | เวลาหมดอายุ ข้อความจะไม่มีผลหลังจากเวลานี้ |
| senderName | ❌ ไม่ | string | ชื่อผู้ส่ง ที่อ่านเข้าใจ เช่น "กรมอุตุนิยมวิทยา" |
| headline | ❌ ไม่ | string | หัวข้อข่าว สั้นๆ ดึงดูดสายตา เช่น "เตือนพายุโนรูฝนตกหนัก กทม." |
| description | ❌ ไม่ | string | รายละเอียดเหตุการณ์ คำอธิบายยาวๆ ว่าเกิดอะไรขึ้น |
| instruction | ❌ ไม่ | string | คำแนะนำ ว่าประชาชนควรทำอย่างไร เช่น "เตรียมถุงยังชีพ เก็บของมีค่าให้สูง" |
| web | ❌ ไม่ | URI | ลิงก์ ไปยังหน้าข้อมูลเพิ่มเติม |
| contact | ❌ ไม่ | string | ข้อมูลติดต่อ เช่น "โทร. 02-xxx-xxxx" |
| parameter | ❌ ไม่ | array | พารามิเตอร์เฉพาะทาง เช่น ความเร็วลม, ความลึกใต้ดิน (ใช้คู่ key-value) |
| resource | ❌ ไม่ | array | ทรัพยากรแนบ รูปภาพ/เสียง (ดูส่วนที่ 3) |
| area | ❌ ไม่ | array | พื้นที่ได้รับผลกระทบ (ดูส่วนที่ 4) |
3. ระดับรอง: resource (ไฟล์แนบ/ทรัพยากร)
ใช้แนบรูปภาพ, เสียง, วิดีโอ หรือเอกสารประกอบ
| ฟิลด์ | บังคับ | รูปแบบ | คำอธิบาย |
|---|---|---|---|
| resourceDesc | ✅ ใช่ | string | คำอธิบายทรัพยากร เช่น "แผนที่เส้นทางอพยพ" หรือ "เสียงสัญญาณเตือน" |
| mimeType | ✅ ใช่ | string | ประเภทไฟล์ ตาม MIME type (RFC 2046) เช่น "image/jpeg", "audio/mpeg", "application/pdf" |
| size | ❌ ไม่ | integer | ขนาดไฟล์ เป็นหน่วยไบต์ (bytes) |
| uri | ❌ ไม่ | URI | ลิงก์ดาวน์โหลด URL ที่เข้าถึงไฟล์ได้ |
| derefUri | ❌ ไม่ | string | ข้อมูลฝังตัว ข้อมูลไฟล์เข้ารหัส base64 (ใช้เมื่อไม่มี uri หรือต้องการส่งติดมากับข้อความ) |
| digest | ❌ ไม่ | string | แฮชตรวจสอบ ค่า SHA-1 ของไฟล์ เพื่อยืนยันว่าไฟล์ไม่ถูกแก้ไขระหว่างทาง |
หมายเหตุ: ต้องมี uri หรือ derefUri อย่างน้อยหนึ่งอัน (แม้ใน schema จะไม่ได้บังคับไว้ แต่ตาม logic ควรมี)
4. ระดับรอง: area (พื้นที่มิติภูมิศาสตร์)
กำหนดขอบเขตพื้นที่ที่ได้รับผลกระทบ รองรับ 2D และ 3D
| ฟิลด์ | บังคับ | รูปแบบ | คำอธิบาย |
|---|---|---|---|
| areaDesc | ✅ ใช่ | string | ชื่อพื้นที่ เช่น "เขตบางเขน กรุงเทพฯ" หรือ "ตำบล x อำเภอ y" |
| polygon | ❌ ไม่ | array | รูปหลายเหลี่ยม แต่ละ item เป็น string ของคู่พิกัด "ละติจูด,ลองจิจูด" คั่นด้วยช่องว่าง ตัวอย่าง: "13.7563,100.5018 13.7600,100.5100 13.7500,100.5100" (ปิดท้ายที่จุดเริ่มต้นหรือไม่ก็ได้) |
| circle | ❌ ไม่ | array | วงกลม รูปแบบ "ละติจูด,ลองจิจูด รัศมี" (รัศมีเป็นหน่วยกิโลเมตร)ตัวอย่าง: "13.7563,100.5018 5.0" (วงกลม 5 กม. จากจุดศูนย์กลาง) |
| geocode | ❌ ไม่ | array | รหัสพื้นที่ ใช้คู่ key-value เช่น "FIPS" = "10001" หรือ "ISO3166-2" = "TH-10" |
| altitude | ❌ ไม่ | number | ความสูงต่ำสุด จากระดับน้ำทะเล (เมตร) ใช้กับ WGS 84 |
| ceiling | ❌ ไม่ | number | ความสูงสูงสุด (ต้องระบุคู่กับ altitude) สร้างช่วงความสูงที่มีผลกระทบ |
รูปแบบพิกัด (WGS 84): - ละติจูด: -90 ถึง 90 (ทิศเหนือเป็นบวก ใต้เป็นลบ) - ลองจิจูด: -180 ถึง 180 (ทิศตะวันออกเป็นบวก ตะวันตกเป็นลบ)
5. โครงสร้างย่อย: keyValue (คู่ค่าทั่วไป)
ใช้ซ้ำใน eventCode, geocode, parameter
| ฟิลด์ | บังคับ | รูปแบบ | คำอธิบาย |
|---|---|---|---|
| valueName | ✅ ใช่ | string | ชื่อตัวแปร/ระบบ เช่น "SAME", "FIPS", " intensity", "windSpeed" |
| value | ✅ ใช่ | string | ค่าของตัวแปร เช่น "CEM", "075", "7.5", "120" |
ตัวอย่างการใช้งานจริง (แผ่นดินไหว)
{
"alert": {
"identifier": "TMD-EARTHQUAKE-2024-0215-001",
"sender": "https://www.tmd.go.th",
"sent": "2024-02-15T14:30:00+07:00",
"status": "Actual",
"msgType": "Alert",
"scope": "Public",
"source": "เครือข่ายสถานีเขย่าไหวอัตโนมัติ",
"info": [
{
"language": "th-TH",
"category": ["Geo"],
"event": "แผ่นดินไหว",
"urgency": "Immediate",
"severity": "Severe",
"certainty": "Observed",
"headline": "แผ่นดินไหวขนาด 5.2 แมกนิจูด จ.เชียงใหม่",
"description": "เกิดแผ่นดินไหวขนาด 5.2 ความลึก 12 กม. ศูนย์กลางบริเวณอ.แม่ริม จ.เชียงใหม่ รู้สึกสั่นไหวในพื้นที่ใกล้เคียง",
"instruction": "หลบใต้โต๊ะแข็งแรง อย่าออกจากอาคารขณะสั่นไหว ระวังอาฟเตอร์ช็อก",
"parameter": [
{
"valueName": "magnitude",
"value": "5.2"
},
{
"valueName": "depth",
"value": "12"
}
],
"area": [
{
"areaDesc": "อำเภอแม่ริม จังหวัดเชียงใหม่",
"circle": ["18.9264,98.8912 15.0"],
"geocode": [
{
"valueName": "ISO3166-2",
"value": "TH-50"
}
]
}
],
"resource": [
{
"resourceDesc": "แผนที่ศูนย์กลางแผ่นดินไหว",
"mimeType": "image/png",
"uri": "https://www.tmd.go.th/images/eq-20240215.png"
}
]
}
]
}
}
References
- OASIS CAP 1.2 Specification: https://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2-os.html
- OASIS CAP 1.2 XML Schema: https://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2.xsd
- RFC 3066: Tags for the Identification of Languages
- RFC 2046: MIME Types
- WGS 84: World Geodetic System 1984 (EPSG:4326)
สร้างเมื่อ: 2024
มาตรฐาน: OASIS CAP v1.2
OASIS (อ่านว่า "โอเอซิส") ย่อมาจาก Organization for the Advancement of Structured Information Standards หรือชื่อภาษาไทยว่า "องค์กรส่งเสริมมาตรฐานข้อมูลโครงสร้าง" เป็นองค์กรไม่แสวงหาผลกำไรระดับโลกที่มีบทบาทสำคัญอย่างยิ่งในการกำหนดมาตรฐานเทคโนโลยีสารสนเทศที่เราใช้กันในปัจจุบัน
1. ประวัติการก่อตั้ง
จุดเริ่มต้น: ปี 1993 (ชื่อเดิม SGML Open)
- ก่อตั้งเมื่อ: ปี 1993 ในสหรัฐอเมริกา
- ชื่อเดิม: SGML Open - เริ่มต้นเป็นกลุ่มผู้ผลิตซอฟต์แวร์และผู้ใช้ที่ต้องการส่งเสริมการใช้ SGML (Standard Generalized Markup Language) ซึ่งเป็นมาตรฐาน ISO สำหรับการ markup เอกสารโครงสร้าง
- การประชุมครั้งแรก: กุมภาพันธ์ 1993 ที่งาน Winter TechDoc Conference ใน San Antonio, Texas
การเปลี่ยนชื่อและขยายขอบเขต: 1998
- เปลี่ยนชื่อเป็น OASIS: มีนาคม 1998 เมื่ออุตสาหกรรมเริ่มหันมาใช้ XML (Extensible Markup Language) แทน SGML องค์กรจึงเปลี่ยนชื่อเพื่อสะท้อนขอบเขตที่กว้างขึ้น
- ความหมายของชื่อ: "Organization for the Advancement of Structured Information Standards" เน้นที่การพัฒนามาตรฐานข้อมูลโครงสร้างทั้งหมด ไม่ใช่แค่ SGML อีกต่อไป
2. ลักษณะองค์กรและโครงสร้าง
สถานะทางกฎหมาย
- ประเภท: องค์กรไม่แสวงหาผลกำไร (Non-profit Consortium)
- รหัสภาษีสหรัฐฯ: 501(c)(6) - องค์กรการค้าและสมาคมการค้าที่ไม่แสวงหาผลกำไร
- ที่ตั้งสำนักงาน: Woburn, Massachusetts, สหรัฐอเมริกา (ย้ายมาที่อยู่ปัจจุบัน 400 TradeCenter Drive ในเดือนธันวาคม 2020)
ขนาดและขอบเขต
- สมาชิก: กว่า 5,000 ผู้เข้าร่วม จาก 600+ องค์กรและบุคคล ใน 100+ ประเทศ ทั่วโลก
- พนักงาน: ประมาณ 12 คน (ทำงานที่สำนักงานใหญ่)
- Technical Committees: กว่า 70 คณะกรรมการเทคนิคที่ทำงานอยู่ในปัจจุบัน
3. วัตถุประสงค์และพันธกิจ (ตั้งขึ้นเพื่ออะไร?)
OASIS ถูกตั้งขึ้นเพื่อแก้ปัญหาที่ใหญ่ที่สุดในโลกดิจิทัลยุคแรกๆ นั่นคือ "การขาดความสามารถในการทำงานร่วมกัน (Interoperability)" ระหว่างระบบต่างๆ
วัตถุประสงค์หลัก 5 ประการ:
พัฒนามาตรฐานเปิด (Open Standards)
- สร้างมาตรฐานที่เปิดเผย ไม่มีลิขสิทธิ์ข้อจำกัด ใครก็ใช้ได้ฟรี
- ไม่ใช่มาตรฐานเฉพาะของบริษัทใดบริษัทหนึ่ง (Non-proprietary)
ส่งเสริมความสามารถในการทำงานร่วมกัน (Interoperability)
- ให้ระบบคอมพิวเตอร์ที่แตกต่างกันสามารถแลกเปลี่ยนข้อมูลได้อย่างปลอดภัยและมีประสิทธิภาพ
- ลดการพึ่งพาซัพพลายเออร์รายเดียว (Vendor Lock-in)
สร้างกระบวนการที่โปร่งใสและเป็นประชาธิปไตย
- ใช้กระบวนการ "Lightweight, Open Process" ที่เน้นความเห็นฉันท์ (Consensus)
- สมาชิกเป็นผู้กำหนดวาระการทำงาน (Technical Agenda) ไม่ใช่เจ้าหน้าที่องค์กร
เชื่อมโยงไปสู่มาตรฐานระดับชาติและนานาชาติ (De Jure Standards)
- มาตรฐาน OASIS หลายตัวได้รับการอนุมัติเป็น ISO, IEC, หรือ ITU-T ในภายหลัง
- ตัวอย่าง: OpenDocument → ISO/IEC 26300, SAML → ITU-T X.1141, CAP → ITU-T X.1303
สนับสนุนโครงการ Open Source
- ให้โครงการ Open Source มีพื้นที่พัฒนาและเส้นทางสู่การเป็นมาตรฐานสากล
4. มาตรฐานที่สำคัญที่ OASIS ดูแล (นอกเหนือจาก CAP)
OASIS เป็นบ้านของมาตรฐานเทคโนโลยีที่ใช้กันทั่วโลกหลายสิบตัว :
ด้านความมั่นคงปลอดภัย (Cybersecurity)
- SAML (Security Assertion Markup Language) - มาตรฐานการยืนยันตัวตนและการอนุญาต Single Sign-On (SSO) ที่ใช้ทั่วโลก
- XACML (eXtensible Access Control Markup Language) - มาตรฐานการควบคุมสิทธิ์การเข้าถึง
- KMIP (Key Management Interoperability Protocol) - การจัดการกุญแจเข้ารหัส
- STIX/TAXII (Structured Threat Information Expression / Trusted Automated Exchange of Intelligence Information) - มาตรฐานการแลกเปลี่ยนข้อมูลภัยคุกคามไซเบอร์
- PKCS#11 - มาตรฐานการเข้ารหัสแบบ Public Key
ด้าน Internet of Things (IoT) และ Messaging
- MQTT (Message Queuing Telemetry Transport) - โปรโตคอลการสื่อสารสำหรับ IoT ที่เบาและมีประสิทธิภาพสูง
- AMQP (Advanced Message Queuing Protocol) - มาตรฐานการส่งข้อความระดับ enterprise
ด้านเอกสารและเนื้อหา (Content Technologies)
- OpenDocument Format (ODF) - มาตรฐานเอกสารออฟฟิศที่เป็น open standard (ใช้ใน LibreOffice) ได้รับการรับรองเป็น ISO/IEC 26300
- DITA (Darwin Information Typing Architecture) - สถาปัตยกรรมการเขียนเอกสารเทคนิค
- DocBook - มาตรฐานการ markup เอกสารเทคนิคและหนังสือ
ด้านธุรกิจและภาครัฐ
- UBL (Universal Business Language) - ภาษาธุรกิจสากลสำหรับการจัดซื้อจัดจ้างอิเล็กทรอนิกส์
- LegalXML - มาตรฐานการยื่นเอกสารศาลแบบอิเล็กทรอนิกส์
- ebXML (Electronic Business using eXtensible Markup Language) - มาตรฐานธุรกิจอิเล็กทรอนิกส์ที่ยื่นให้ ISO เป็น ISO 15000
ด้าน Cloud Computing และ Infrastructure
- TOSCA (Topology and Orchestration Specification for Cloud Applications) - มาตรฐานการจัดการ cloud
- OData (Open Data Protocol) - โปรโตคอลการเข้าถึงข้อมูลแบบ RESTful
5. กระบวนการทำงาน (How OASIS Works)
OASIS ใช้ระบบ Technical Committee (TC) ในการพัฒนามาตรฐาน :
- เสนอโครงการ: สมาชิกเสนอความต้องการพัฒนามาตรฐานใหม่
- จัดตั้งคณะกรรมการ: ตั้ง TC ขึ้นมาดำเนินการ (เลือกตั้งประธานและเจ้าหน้าที่เอง)
- พัฒนาร่าง: ทำงานร่วมกันแบบเปิดเผย มีการประชุมและแก้ไขข้อมูลบนแพลตฟอร์มออนไลน์
- รับฟังความคิดเห็นสาธารณะ (Public Review): เปิดให้ประชาชนทั่วไปแสดงความคิดเห็นก่อนอนุมัติ
- อนุมัติมาตรฐาน: เมื่อได้รับความเห็นฉันท์ (Consensus) จะประกาศเป็น OASIS Standard
- ส่งต่อองค์กรใหญ่: สามารถส่งมอบให้ ISO, ITU, IEC พิจารณาเป็นมาตรฐานสากลต่อไป
หลักการสำคัญ
- IPR Policy (Intellectual Property Rights): นโยบายสิทธิทรัพย์สินทางปัญญาที่ชัดเจน ป้องกันการฟ้องร้องเรื่องสิทธิบัตร
- Royalty-Free: มาตรฐานส่วนใหญ่ใช้ได้ฟรี ไม่ต้องเสียค่าลิขสิทธิ์
- ANSI-Accredited: กระบวนการของ OASIS ได้รับการรับรองจาก American National Standards Institute (ANSI)
6. ความสัมพันธ์กับองค์กรอื่น
OASIS ทำงานร่วมกับองค์กรมาตรฐานระดับโลกหลายแห่ง :
- ISO/IEC: ส่งมอบมาตรฐานไปรับรองเป็นมาตรฐานระหว่างประเทศ (เช่น OpenDocument, AMQP)
- ITU-T: สหภาพโทรคมนาคมระหว่างประเทศ (เช่น SAML เป็น X.1141, CAP เป็น X.1303)
- W3C: konsorsium เว็บโลก (ร่วมมือกันพัฒนา WebCGM)
- UN/CEFACT: คณะกรรมการสหประชาชาติว่าด้วยการ facilitation การค้า (ร่วมพัฒนา ebXML)
- EU: คณะกรรมาธิการยุโรปจัด OASIS เป็น "หนึ่งในสาม Consortium ICT ชั้นนำ" และอนุญาตให้อ้างอิงมาตรฐาน OASIS ในการจัดซื้อจัดจ้างภาครัฐ (ตาม EU Regulation 1025/2012)