กลับไปหน้าบทความ

อ่าน 8 นาที

รายการอสังหาริมทรัพย์

ใน เฟรมเวิร์ก การเขียนโปรแกรม macOS , iOS , NeXTSTEP และ GNUstep ไฟล์ รายการคุณสมบัติ ( Property List Files) คือไฟล์ที่จัดเก็บ อ็อบเจ็กต์ ที่ถูกทำให้เป็นรูปแบบอนุกรม (Serialized...

รายการอสังหาริมทรัพย์

รายการอสังหาริมทรัพย์
นามสกุลไฟล์
.plist
สื่อประเภทอินเทอร์เน็ต
application/x-plist
ตัวระบุประเภทมาตรฐาน (UTI)com.apple.property-list
พัฒนาโดยApple ComputerและGNUstep ( เดิมชื่อNeXT)
ประเภทของรูปแบบการแปลงอ็อบเจ็กต์ พจนานุกรมเป็นรูปแบบอนุกรม (Serialization )

ในเฟรมเวิร์กการเขียนโปรแกรมmacOS , iOS , NeXTSTEPและGNUstep ไฟล์ รายการคุณสมบัติ ( Property List Files) คือไฟล์ที่จัดเก็บอ็อบเจ็กต์ที่ถูกทำให้เป็นรูปแบบอนุกรม (Serialized Object Files) ไฟล์รายการคุณสมบัติใช้ ส่วนขยายชื่อไฟล์ . propertylist และมักเรียกกันว่าไฟล์ p-list.plist

ไฟล์รายการคุณสมบัติมักใช้เพื่อจัดเก็บการตั้งค่าของผู้ใช้ นอกจากนี้ยังใช้เพื่อจัดเก็บข้อมูลเกี่ยวกับบันเดิลและแอปพลิเคชันซึ่งเป็นหน้าที่ของresource forkใน Mac OS รุ่นเก่า

รายการคุณสมบัติยังใช้สำหรับ สตริง การแปลเพื่อการพัฒนา ไฟล์เหล่านี้ใช้ส่วนขยาย.stringsหรือ.stringsdictส่วนขยายแรกเป็น plist แบบเก่าที่ "ลดขนาด" ซึ่งมีเพียงพจนานุกรมเดียวโดยไม่มีวงเล็บปีกกา (ดูpropertyListFromStringsFileFormat ) [ 1 ]ในขณะที่ส่วนขยายหลังเป็น plist ที่สมบูรณ์แบบXcodeยังใช้ส่วนขยายสำหรับ plist แบบเก่าที่ใช้เป็นไฟล์โครงการ ด้วย.pbxproj

ตัวแทน

เนื่องจากข้อมูลที่แสดงโดยรายการคุณสมบัติค่อนข้างเป็นนามธรรมรูปแบบไฟล์พื้นฐานจึงสามารถนำไปใช้ได้หลายวิธี กล่าวคือNeXTSTEPใช้รูปแบบหนึ่งในการแสดงรายการคุณสมบัติ และ เฟรมเวิร์ก GNUstepและmacOS ในภายหลัง ได้นำเสนอรูปแบบที่แตกต่างกันออกไป

เน็กซ์สเต็ป

ภายใต้ระบบ NeXTSTEPรายการคุณสมบัติถูกออกแบบมาให้มนุษย์อ่านและแก้ไขได้ด้วยตนเอง โดยแปลงเป็นASCIIด้วยไวยากรณ์ที่คล้ายกับภาษาโปรแกรมOPENSTEPก็ใช้รูปแบบเดียวกันนี้ด้วย

  • สตริงจะถูกแสดงในรูปแบบตัวอักษร C: "This is a plist string\n"; อนุญาตให้ใช้สตริงที่เรียบง่ายกว่าและไม่ใส่เครื่องหมายคำพูดได้ ตราบใดที่สตริงนั้นประกอบด้วยตัวอักษรและตัวเลข และหนึ่งใน_$/: .-
  • ข้อมูลไบนารีแสดงในรูปแบบ: . ช่องว่างและข้อความแสดงความคิดเห็นระหว่างรหัสเลขฐานสิบหกคู่จะถูกละเว้น< [hexadecimal codes in ASCII] >
  • อาร์เรย์แสดงด้วยรูปแบบ: ( "1", "2", "3" ). สามารถเว้นเครื่องหมายจุลภาคท้ายได้
  • พจนานุกรมมีรูปแบบดังนี้: { "key" = "value"; ... }ด้านซ้ายต้องเป็นสตริง แต่ไม่จำเป็นต้องใส่เครื่องหมายคำพูด
  • สามารถแสดงความคิดเห็นได้ในรูปแบบ: /* This is a comment */และ// This is a line comment.
  • เช่นเดียวกับในภาษาซี ช่องว่างโดยทั่วไปไม่มีผลต่อไวยากรณ์ คำสั่งที่แสดงค่าจะจบด้วยเครื่องหมายเซมิโคลอน

ข้อจำกัดประการหนึ่งของรูปแบบรายการคุณสมบัติ NeXT ดั้งเดิมคือไม่สามารถแสดงวัตถุ NSValue (ตัวเลข บูลีน ฯลฯ) ได้ ส่งผลให้ค่าเหล่านี้ต้องถูกแปลงเป็นสตริงและกู้คืนแบบ "คลุมเครือ" โดยแอปพลิเคชัน[ 2 ]ข้อจำกัดอีกประการหนึ่งคือไม่มีการกำหนดการเข้ารหัส 8 บิตอย่างเป็นทางการ[ 3 ]

ยู ทิลิตี้ defaultsซึ่งเปิดตัวใน OPENSTEP (1996) สามารถใช้จัดการไฟล์ plist ที่ใช้สำหรับจัดเก็บการตั้งค่า (เรียกว่าdefaultsใน NeXTSTEP จึงเป็นที่มาของชื่อ) บนบรรทัดคำสั่งผ่านโดเมนการตั้งค่า และยูทิลิตี้นี้สามารถใช้แก้ไขไฟล์ plist ใดๆ ก็ได้ ยูทิลิตี้นี้แทนที่คำสั่งเก่า 3 คำสั่ง (dread, dwrite และ dremove) [ 4 ]

จีเอ็นยูสเต็ป

GNUstep ใช้รูปแบบ NeXTSTEP โดยมีการเพิ่มเติมเพื่อแสดงประเภทข้อมูล NSValue และ NSDate รายการประเภทใหม่มีรูปแบบ<* T ...>โดยที่Tคือรหัสประเภทตัวอักษรตัวเดียว ตัวอย่างเช่น NSValue ของ Boolean YES จะแสดงเป็น<*BY>และออบเจ็กต์ NSDate จะแสดงเป็น< *BY> [ 5 ] [ 6 ] ข้อมูลไบนารียังสามารถใช้รูปแบบ base64ที่มีประสิทธิภาพมากกว่าได้เป็น<[ b64... ]>ปัญหา 8 บิตได้รับการแก้ไขโดยปริยายเช่นกัน เนื่องจากการใช้งานส่วนใหญ่ใช้ UTF-8 <*DYYYY-MM-DD HH:MM:SS +ZZZZ>

GNUstep ยังมีรูปแบบไบนารีของตัวเองด้วย คือNSPropertyListGNUstepBinaryFormatซึ่งใช้งานในNSSerializationรูปแบบนี้ถูกกำหนดแบบเรียกซ้ำเหมือนกับรูปแบบข้อความ โดยมีตัวระบุประเภทไบต์เดียวอยู่หน้าข้อมูลบางส่วน รองรับรูปแบบการจัดเก็บสตริง ผ่าน สวิตช์shouldBeCompact ของ ส่วนขยาย GS [ 7 ]

ใน GNUstep มีตัวจัดการ plist อิสระสองตัว ได้แก่CFPropertyListในlibs-core-base (CoreFoundation) และNSPropertyListในlibs-base (Foundation Kit) ทั้งสองตัวรองรับรูปแบบไบนารีและ XML ที่ใช้โดย macOS ในระดับหนึ่ง แต่ตัวหลังมีความสมบูรณ์มากกว่ามาก ตัวอย่างเช่น รูปแบบเฉพาะของ GNUstep สองรูปแบบจะได้รับการจัดการเฉพาะในตัวหลังเท่านั้น[ 8 ]

GNUstep มีชุดเครื่องมือบรรทัดคำสั่ง plist ที่ใช้NSPropertyListรวมถึงเวอร์ชันของpl [ 9 ]และค่าเริ่มต้น[ 4 ]

ระบบปฏิบัติการ macOS

แม้ว่า macOS จะสามารถอ่านรูปแบบ NeXTSTEP ได้เช่นกัน แต่ Apple ก็เลือกที่จะใช้รูปแบบใหม่สองรูปแบบของตนเองแทน รูปแบบหนึ่งเป็นแบบ XML และอีกรูปแบบหนึ่งเป็นแบบไบนารี นอกจากนี้ Apple ยังมีรูปแบบ JSON ที่ใช้งานร่วมกันได้บางส่วน ( NSJSONSerialization ) อีกด้วย

ประวัติศาสตร์

ในMac OS X 10.0รูปแบบ NeXTSTEP ถูกยกเลิกและ มีการแนะนำรูปแบบ XML ใหม่ โดยมีDTD สาธารณะ ที่กำหนดโดยAppleรูปแบบ XML รองรับอักขระที่ไม่ใช่ ASCII และการจัดเก็บออบเจ็กต์ NSValue (ซึ่งแตกต่างจากรูปแบบรายการคุณสมบัติ ASCII ของ GNUstep ที่รูปแบบรายการคุณสมบัติ ASCII ของ Apple ไม่รองรับ) [ 10 ]

เนื่องจากไฟล์ XML ไม่ใช่รูปแบบการจัดเก็บข้อมูลที่ประหยัดพื้นที่ที่สุดMac OS X 10.2จึงได้แนะนำรูปแบบใหม่ที่ไฟล์รายการคุณสมบัติจะถูกจัดเก็บเป็นไฟล์ไบนารี โดยเริ่มตั้งแต่Mac OS X 10.4 รูปแบบ นี้จึงเป็นรูปแบบเริ่มต้นสำหรับไฟล์การตั้งค่า ในMac OS X 10.7 ได้มีการเพิ่ม การรองรับการอ่านและเขียนไฟล์ใน รูปแบบ JSONอย่างไรก็ตาม JSON และรายการคุณสมบัติไม่ได้เข้ากันได้อย่างสมบูรณ์ ตัวอย่างเช่น รายการคุณสมบัติมีประเภทข้อมูลวันที่และข้อมูลทั่วไป ซึ่งรูปแบบ JSON ไม่รองรับ ในทางกลับกัน JSON อนุญาตให้ใส่nullค่าได้ ในขณะที่รายการคุณสมบัติไม่รองรับค่าว่าง (null) อย่างชัดเจน

เครื่องมือ

เครื่องมือ ค่าเริ่มต้นแบบเก่าจาก NeXTSTEP ยังคงใช้งานได้ คำสั่ง /usr/libexec/PlistBuddyมีตัวแก้ไข plist แบบโต้ตอบ นอกจากนี้ยังสามารถเขียนสคริปต์ได้[ 11 ]

ยู ทิลิตี้ plutil (ที่เปิดตัวในMac OS X 10.2 ) สามารถใช้ตรวจสอบไวยากรณ์ของรายการคุณสมบัติ หรือแปลงไฟล์รายการคุณสมบัติจากรูปแบบหนึ่งไปเป็นอีกรูปแบบหนึ่ง นอกจากนี้ยังรองรับการแปลง plist เป็นอ็อบเจ็กต์ลิเทอรัล Objective-C หรือ Swift [ 12 ]เช่นเดียวกับ Cocoa NSPropertyListSerializationที่ใช้เป็นพื้นฐาน มันรับอินพุตแบบ "เก่า" แต่ไม่ได้แปลงเป็นประเภทนี้ (Cocoa NSSerializerจากก่อน Mac OS X 10.2 จะส่งเอาต์พุตแบบเก่า)

ยู ทิลิตี้ plถูกนำมาใช้ใน Mac OS X v10.5 โดยรับอินพุตใดๆ ก็ได้และพยายามสร้าง plist แบบ "เก่า" [ 13 ] [ a ] ​​เช่นเดียวกับเวอร์ชัน GNUstep ดูเหมือนว่าจะใช้ คุณสมบัติ descriptionของประเภท Foundation ที่พบใน plist ซึ่ง Apple ได้ระบุไว้เพื่อสร้าง plist แบบเก่าที่ถูกต้อง[ b ]

ในแง่ของกลไกภายใน Apple มีตัวแยกวิเคราะห์แบบโอเพนซอร์สสำหรับรูปแบบเก่า XML และไบนารีในโค้ด C Core Foundationในชื่อ CFPropertyList อย่างไรก็ตาม ยูทิลิตี้ทั้งหมดและส่วนใหญ่ของระบบใช้ตัวแยกวิเคราะห์ NSPropertyList แบบปิดซอร์สจาก Obj-C Foundation Kit การเขียนใหม่ในภาษา Swift เป็นโอเพนซอร์ส แต่ไม่รับประกันว่าจะเหมือนกันทุกประการ

รูปแบบ

รายการคุณสมบัติ XMLและJSONสามารถแก้ไขได้ด้วยตนเองในโปรแกรมแก้ไขข้อความใดๆ นอกจากนี้ Apple ยังให้การสนับสนุนในXcodeสำหรับการแก้ไขรายการคุณสมบัติในโปรแกรมดู/แก้ไขแบบลำดับชั้นที่สามารถจัดการ plist ที่จัดรูปแบบเป็นไบนารีหรือXML ได้ แต่ไม่ใช่JSONตั้งแต่ Mac OS X 10.4 เป็นต้นไป Apple ได้จัดเตรียม อินเทอร์เฟซ AppleScriptสำหรับการอ่านไฟล์รายการคุณสมบัติผ่านแอปพลิเคชัน System Events ตั้งแต่Mac OS X 10.5 เป็นต้นไป Apple ได้จัดเตรียม อินเทอร์เฟซ AppleScriptสำหรับการแก้ไข การสร้าง และการเขียนไฟล์รายการคุณสมบัติด้วยเช่นกัน[ 14 ]

สำหรับรูปแบบ XML แท็ก คลาส Foundation ที่เกี่ยวข้อง และประเภท CoreFoundation รวมถึงรูปแบบการจัดเก็บข้อมูลมีดังต่อไปนี้:

ชั้นเรียนพื้นฐาน ประเภท CoreFoundation แท็ก XML รูปแบบการจัดเก็บข้อมูล
เอ็นเอสสตริงซีเอฟสตริง<สตริง>สตริงที่เข้ารหัส UTF-8
หมายเลข NSNหมายเลข CFN<จริง>ค่าทศนิยม รองรับสัญกรณ์เลขยกกำลังและค่าพิเศษNaN ( nan ) และInfinity ( inf , +inf , -infหรือเขียนอีกแบบว่าinfinity ) รูปแบบทั้งหมดนี้ไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก
<จำนวนเต็ม>ค่าจำนวนเต็มในรูปแบบเลขฐานสิบ ( 255 ) หรือเลขฐานสิบหก ( 0xFF ) รูปแบบหลังไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก
หมายเลข NSNCFBoolean<จริง/>, <เท็จ/>ไม่มีข้อมูล (มีเฉพาะแท็ก)
วันที่ NSDCFDate<วันที่>สตริงที่จัดรูปแบบตาม มาตรฐาน ISO 8601
NSDataซีเอฟดาต้า<ข้อมูล>ข้อมูลที่เข้ารหัส Base64
NSArrayซีเอฟอาร์เรย์<อาร์เรย์>สามารถมีองค์ประกอบย่อยได้หลายรายการ และสามารถว่างเปล่าได้
NSDictionaryCFDictionary<คำทำนาย>แท็ก <key>สลับกับแท็กองค์ประกอบ plist สามารถเว้นว่างได้

รูป แบบ ไฟล์ไบนารีได้รับการบันทึกไว้ในบล็อกความคิดเห็นในไฟล์ซอร์สโค้ด C ของ Core Foundation ( CF/CFBinaryPList.c ) สำหรับการใช้งาน plist ไบนารีแบบโอเพนซอร์สของ Apple ในไลบรารี Foundation [ 15 ] Apple อธิบายการใช้งานว่าเป็นแบบทึบแสงในเอกสารหน้าคู่มือ plist(5) [ 16 ]ซึ่งหมายความว่าไม่ควรพึ่งพารูปแบบนี้ ในรูปแบบไฟล์ไบนารี หมายเลขวิเศษ (ไบต์แรกๆ ของไฟล์ที่ระบุว่าเป็นไฟล์ plist ที่ถูกต้อง) คือข้อความbplistตามด้วยไบต์สองไบต์ที่ระบุเวอร์ชันของรูปแบบ

ไฟล์ไบนารีสามารถจัดเก็บข้อมูลบางอย่างที่ไม่สามารถบันทึกได้ในรูปแบบไฟล์ XML หรือ JSON ประเภทไบนารีของอาร์เรย์ เซต และพจนานุกรม ประกอบด้วยตัวชี้ – รายการ objref และ keyref – ที่ใช้ดัชนีในตารางออบเจ็กต์ในไฟล์ ซึ่งหมายความว่าไฟล์ plist ไบนารีสามารถบันทึกข้อเท็จจริงที่ว่า – ตัวอย่างเช่น – อาร์เรย์และพจนานุกรมที่แยกจากกันซึ่งถูกแปลงเป็นไฟล์นั้น มีองค์ประกอบข้อมูลเดียวกันจัดเก็บอยู่ สิ่งนี้ไม่สามารถบันทึกได้ในไฟล์ XML การแปลงไฟล์ไบนารีดังกล่าวจะทำให้สำเนาขององค์ประกอบข้อมูลถูกวางลงในไฟล์ XML นอกจากนี้ ไฟล์ไบนารียังมีประเภท UID ที่ใช้ระบุรายการข้อมูลเมื่อถูกแปลงเป็นอนุกรม รายการข้อมูลทั้งหมดที่สามารถจัดเก็บได้ซึ่งนำมาจากไฟล์ซอร์สโค้ด C มีดังต่อไปนี้:

รูปแบบออบเจ็กต์ plist ไบนารี (ณ CoreFoundation 1153) [ 15 ]
ชั้นเรียนพื้นฐาน ประเภท CoreFoundation ประเภทวัตถุ ไบต์มาร์กเกอร์ ข้อมูลที่เข้ารหัส
ไม่มีไม่มีnull (v"1?"+) 0000 0000ไม่มีข้อมูล
หมายเลข NSNCFBooleanบูล0000 1000 (เท็จ) 0000 1001 (จริง)ไม่มีข้อมูล
NSURLซีเอฟอาร์แอลurl (v"1?"+) 0000 1100 (สตริงพื้นฐาน) 0000 1101 (สตริง)สตริง: สตริง URL ที่เข้ารหัสแบบเรียกซ้ำ (เช่นเดียวกับ "รูปแบบออบเจ็กต์สตริง"); สตริงพื้นฐาน: เหมือนกัน แต่มีการเข้ารหัส URL พื้นฐานก่อน
เอ็นเอสยูอิดซีฟูอิดuuid (v"1?"+) 0000 1110UUID ขนาด 16 ไบต์
เติม0000 1111ไม่มีอะไรเลย - แค่แผ่นรองเฉยๆ
หมายเลข NSNหมายเลข CFNอินท์0001 nnnnจำนวนไบต์คือ2^nnnnไบต์แบบบิ๊กเอนเดียน (1, 2, 4 หรือ 8)
หมายเลข NSNหมายเลข CFNจริง0010 nnnnจำนวนไบต์คือ2^nnnnไบต์แบบบิ๊กเอนเดียน (4 หรือ 8)
วันที่ NSDCFDateวันที่0011 0011ข้อมูลต่อไปนี้เป็นเลขทศลอย 8 ไบต์ แบบ big-endian แสดงหน่วยเป็นวินาที นับจากวันที่ 1 มกราคม 2001 ( ยุค Core Data )
NSDataซีเอฟดาต้าข้อมูล0100 nnnn [int]nnnn คือจำนวนไบต์ ยกเว้น 1111 ซึ่งในกรณีนั้นจะตามด้วยจำนวนเต็มและจำนวนไบต์
เอ็นเอสสตริงซีเอฟสตริงสตริง0101 nnnn [int]สตริง ASCII, nnnn คือจำนวนอักขระ ถ้าไม่ใช่ 1111 ให้เป็นจำนวนเต็ม แล้วจึงเป็นไบต์
เอ็นเอสสตริงซีเอฟสตริงสตริง0110 nnnn [int]สตริง Unicode, nnnn คือจำนวนอักขระ ถ้าไม่ใช่ 1111 ให้เป็นจำนวนเต็ม แล้วแปลงเป็น uint16_t แบบ big-endian 2 ไบต์
เอ็นเอสสตริงซีเอฟสตริงสตริง (v"1?"+) 0111 nnnn [int]สตริง UTF-8, nnnn คือจำนวนอักขระ ถ้าไม่ใช่ 1111 ให้เป็นจำนวนเต็ม แล้วจึงเป็นไบต์
ยูไอดี1000 nnnnnnnn+1 คือจำนวนไบต์แบบ big-endian (1, 2, 4 หรือ 8) จำนวนเต็มที่ไม่มีเครื่องหมาย สร้างโดยNSKeyedArchiver เท่านั้น (ดูด้านล่าง) [ 17 ]
NSArrayซีเอฟอาร์เรย์อาร์เรย์1010 nnnn [int]objref* nnnn คือจำนวนนับ เว้นแต่จะเป็น '1111' จากนั้นจำนวนนับจะตามมา
NSOrderedSetordset (v"1?"+) 1011 nnnn [int]objref* nnnn คือจำนวนนับ เว้นแต่จะเป็น '1111' จากนั้นจำนวนนับจะตามมา
NSSetซีเอฟเซ็ตตั้งค่า (v"1?"+) 1100 nnnn [int]objref* nnnn คือจำนวนนับ เว้นแต่จะเป็น '1111' จากนั้นจำนวนนับจะตามมา
NSDictionaryCFDictionaryพจนานุกรม1101 nnnn [int]keyref* objref* nnnn คือจำนวนนับ เว้นแต่จะเป็น '1111' จากนั้นจำนวนนับจะเป็นจำนวนเต็ม

โปรดสังเกตหมายเหตุv"1?"+ในหลายประเภท ซึ่งหมายความว่าไบต์ตัวบ่งชี้จะพบได้เฉพาะในไฟล์ที่มีเวอร์ชันรูปแบบไม่ต่ำกว่าหมายเลขวิเศษ "1?" เท่านั้น วิธีการแยกวิเคราะห์ที่แน่นอนนั้นคลุมเครือกว่าวิธีการแยกวิเคราะห์ประเภทเก่า เนื่องจาก CFBinaryPlist รองรับเฉพาะเวอร์ชัน "0?" เท่านั้น ในทางปฏิบัติ ประเภทเหล่านี้แทบจะไม่เคยพบเห็น เนื่องจาก NSKeyedArchiver สามารถดึงข้อมูลเหล่านี้ได้อยู่แล้ว

ตารางค่าออฟเซ็ตจะอยู่ถัดจากตารางวัตถุ จากนั้นจะตามด้วยส่วนท้ายที่ประกอบด้วยข้อมูลเกี่ยวกับขนาดและตำแหน่งของตารางทั้งสอง

การแปลงเป็น plist

เนื่องจากรายการคุณสมบัติไม่ได้บันทึกข้อมูลและประเภทข้อมูลทั้งหมดที่จำเป็นในการอธิบายวัตถุใดๆ จึงมักมีการเข้ารหัสและถอดรหัสเพิ่มเติมอีกชั้นหนึ่ง ข้อกำหนด OpenStep จะสร้างนามธรรมให้กับการดำเนินการซีเรียลไลซ์NSObject ใดๆ ภายใต้ โปรโตคอล NSCodingคลาสใดๆ ที่ใช้โปรโตคอลนี้สามารถให้คลาสย่อยNSCoderซีเรียลไลซ์อินสแตนซ์ของตนเป็นรูปแบบอื่นได้[ 18 ]มีตัวเข้ารหัสหลักสองตัวสำหรับวัตถุประสงค์ในการซีเรียลไลซ์วัตถุเป็น plist:

  • NSArchiverเป็นคลาสที่แปลงอ็อบเจ็กต์ให้เป็นบล็อกข้อมูลไบนารีคล้ายกับโครงสร้างแบบแท็ก (tagged struct) คลาสนี้เป็นส่วนหนึ่งของ OpenStep แม้ว่าจะยังไม่มีการกำหนดรูปแบบที่แน่นอน ในทางปฏิบัติ เราสามารถใช้คลาสนี้เพื่อแปลงอ็อบเจ็กต์เป็นข้อมูลไบนารีแล้วบันทึกลงไฟล์ (โดยข้ามขั้นตอนการสร้างไฟล์ plist) หรือฝังข้อมูลลงในไฟล์ plist ก็ได้ การอ่านและการเขียนข้อมูลต้องอยู่ในลำดับเดียวกับที่เขียน การเปิดตัวNSKeyedArchiverทำให้การใช้งาน NSArchiver ไม่จำเป็นอีกต่อ ไป
  • NSKeyedArchiverซึ่งเปิดตัวใน Mac OS X 10.2 แปลงวัตถุเป็นNSDictionaryการปรับปรุงหลักของรูปแบบนี้สำหรับโปรแกรมเมอร์คือการเข้าถึงสมาชิกไม่ใช่ตามลำดับที่กำหนด แต่โดยใช้คีย์สตริง ภายในแล้ว มันจะจำลองรูปแบบ plist แบบไบนารีโดยการจัดเก็บอาร์เรย์ตารางวัตถุที่เรียกว่า$objects ไว้ ในพจนานุกรม ส่วนอื่นๆ ทั้งหมด รวมถึงข้อมูลคลาส จะถูกอ้างอิงโดยตัวชี้ UID รายการ $topภายใต้พจนานุกรมจะชี้ไปยังวัตถุระดับบนสุดที่โปรแกรมเมอร์ต้องการเข้ารหัส[ 17 ]

การใช้ archiver ช่วยให้สามารถเข้ารหัสชนิดข้อมูลใหม่ได้โดยไม่ต้องเปลี่ยนรูปแบบ plist และเป็นวิธีที่ Apple นิยมใช้ในการเข้ารหัสสิ่งต่างๆ เช่น NSSets และค่าว่าง การแยกวิเคราะห์รูปแบบนั้นค่อนข้างยากกว่า เนื่องจากต้องปฏิบัติตามอีกชั้นหนึ่งแม้แต่สำหรับคลาสบางคลาสที่ plist ควรจะรองรับ เช่นเดียวกับรูปแบบไบนารีซึ่งมีตารางออบเจ็กต์ด้วย จึงเป็นไปได้ที่จะสร้างการอ้างอิงแบบวนซ้ำในNSKeyedArchiverเนื่องจากไม่มีชนิดข้อมูล UID ใน XML จำนวนเต็มจึงถูกเก็บไว้ในพจนานุกรมภายใต้คีย์ "CF$UID" [ 19 ]

Apple เผยแพร่ NSKeyedArchiverแบบโอเพนซอร์สใน Swift Corelibs Foundation; [ 20 ]เช่นเดียวกับ Apple Foundation แบบปิดซอร์ส มันจำกัดรูปแบบเอาต์พุตไว้ที่ไบนารีและ XML เท่านั้น นอกจากนี้ยังมีกรณีทดสอบบางกรณีที่แสดงผลลัพธ์ของการทำให้เป็นอนุกรม[ 21 ] GNUstep ยังมีการใช้งานที่เข้ากันได้ซึ่งไม่จำกัดรูปแบบเอาต์พุต[ 22 ] [ 23 ]

ภาษาเส้นทาง

ไม่มีภาษากำหนดเส้นทางมาตรฐานเดียวสำหรับรายการคุณสมบัติเหมือนกับที่XPathใช้สำหรับ XML แต่มีข้อกำหนดที่ไม่เป็นทางการที่ใช้โดยโปรแกรมต่างๆ อยู่

  • เวอร์ชันไวยากรณ์จุดพบได้ใน อาร์กิวเมนต์ keypath ของ plutilของ Apple ดูเหมือนว่าจะสืบทอดมาจาก[ 12 ](id) -[NSObject(NSKeyValueCoding) valueForKeyPath:]
  • PlistBuddyใช้รูปแบบที่แตกต่างกันโดยใช้ไวยากรณ์โคลอนสำหรับการทำดัชนี[ 11 ]

ทั้งสองรูปแบบไม่สามารถแสดงคีย์ที่มีอักขระคั่นอยู่ได้

แพลตฟอร์มอื่นๆ

วินโดวส์

แม้ว่าจะเป็นที่รู้จักกันดีที่สุดในระบบ Apple หรือ Darwin รวมถึง iOS และ macOS แต่ไฟล์ plist ก็มีอยู่ในคอมพิวเตอร์ Windows เช่นกัน เมื่อติดตั้งซอฟต์แวร์ของ Apple เช่น iTunes [ 24 ]หรือ Safari [ 25 ]บน Windows ไฟล์เหล่านี้มักจะเป็นไฟล์ไบนารี[ 26 ]แม้ว่าบางแอปพลิเคชันอาจสร้างไฟล์ PLIST ในรูปแบบอื่นก็ตาม

บนระบบปฏิบัติการ Windows ไฟล์ plist ของ Apple จะถูกจัดเก็บไว้ในไดเร็กทอรีโฮมของผู้ใช้ ภายใต้%USERPROFILE%\AppData\Roaming\Apple Computerไฟล์ plist เหล่านี้บน Windows โดยทั่วไปจะจัดเก็บการตั้งค่าและข้อมูลอื่นๆ แทนที่จะใช้รีจิสทรีของ Windows

ตัวเลือกในการแก้ไขไฟล์ PLIST บน Windows นั้นมีไม่มากเท่ากับบน macOS หากไฟล์อยู่ในรูปแบบ XML หรือ JSON อย่างระมัดระวัง ก็สามารถใช้ โปรแกรมแก้ไขข้อความ เช่น Notepad++ ได้ Apple ได้รวมไฟล์ plutil.exe ไว้ ในแพ็คเกจ "Apple Application Support" (ซึ่งเป็นส่วนหนึ่งของiTunes ) และมีลักษณะการทำงานเหมือนกับเวอร์ชันบน macOS ทุกประการ

เน็ตบีเอสดี

ไลบรารี proplib ซึ่งเปิดตัวในปี 2549 และเผยแพร่ครั้งแรกพร้อมกับNetBSD#4.0 (2550) สามารถใช้สำหรับการเรียงลำดับข้อมูลระหว่างเคอร์เนลและผู้ใช้ได้ โดยจะใช้งานส่วนหนึ่งของภาษา XML plist [ 27 ]

หนึ่งในตัวอย่างผู้ใช้งาน proplib คือ sysmon envsysเวอร์ชันปรับปรุงครั้งที่สอง ซึ่งเป็นเฟรมเวิร์กสำหรับ การตรวจ สอบ ระบบ

ไลบรารี proplib ของ NetBSD ได้รับการพอร์ตไปยัง DragonFly ในปี 2010 และพร้อมใช้งานตั้งแต่DragonFly BSD# 2.8 [ 28 ] [ 29 ]

ข้ามแพลตฟอร์ม

  • xcbuild ซึ่งเป็นการนำ เครื่องมือสร้างXcodeของFacebook มาใช้งานใหม่ในรูปแบบโอเพนซอร์ส ประกอบด้วยไลบรารี plist รวมถึงplutilและPlistBuddyยูทิลิตี้ข้ามแพลตฟอร์มเหล่านี้เขียนด้วยภาษาC ++ [ 30 ]
  • Pythonมีplistlibโมดูลในตัวสำหรับอ่านและเขียนไฟล์ plist ในรูปแบบ XML ของ Apple หรือในรูปแบบไบนารี (ตั้งแต่ Python 3.4) [ 31 ] ProperTree เป็นโปรแกรมแก้ไขข้ามแพลตฟอร์มที่ใช้ไลบรารีนี้[ 32 ]
    • ไลบรารีของบุคคลที่สามที่เรียกว่าccl-bplistมีความสามารถเพิ่มเติมในการจัดการUID ของNSKeyedArchiver [ 19 ]
  • Goมีplistแพ็กเกจที่รองรับ plist สี่ประเภท ได้แก่ OpenStep text, GNUStep text, Apple XML และ Apple Binary นอกจากนี้ยังรองรับ UID ในรูปแบบ XML และไบนารีด้วย[ 2 ]
  • Dartมีไลบรารีของบุคคลที่สามที่เรียกว่าpropertylistserializationซึ่งจัดการUID ของNSKeyedArchiver ด้วยเช่นกัน [ 33 ]

ดูเพิ่มเติม

  • หน้าคู่มือ plist(5)บนWayback Machine (เก็บถาวรเมื่อวันที่ 19 มีนาคม 2017)
  • ส่วนเสริม Excel สำหรับสร้างไฟล์ plist จากสเปรดชีต Excel (เป็นภาษารัสเซีย)
  • Java API สำหรับอ่าน/เขียนไฟล์ plistบนGitHub
  • ไวยากรณ์ EBNF สำหรับไฟล์ plist ของ GNUstepบนGitHub

หมายเหตุ

  1. ^ความผิดปกติอย่างหนึ่งของ macOS plคือมันจะใส่ตัวอักษร "D" โดยไม่ตั้งใจลงใน stdout หากผู้ใช้พิมพ์อินพุตมาตรฐานด้วยตนเองและปิดท้ายด้วย ^ D
  2. ^ฟังก์ชันdescriptionใน Obj-C FoundationNSDataมีข้อบกพร่องตรงที่มันส่งค่ากลับมาในรูปแบบพจนานุกรม ส่วน Swift Foundation ซึ่งเป็นโอเพนซอร์ส ไม่มีปัญหาดังกล่าว
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Property_list&oldid=1347948421 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ รายการอสังหาริมทรัพย์

ใน เฟรมเวิร์ก การเขียนโปรแกรม macOS , iOS , NeXTSTEP และ GNUstep ไฟล์ รายการคุณสมบัติ ( Property List Files) คือไฟล์ที่จัดเก็บ อ็อบเจ็กต์ ที่ถูกทำให้เป็นรูปแบบอนุกรม (Serialized...

ตัวแทน

เนื่องจากข้อมูลที่แสดงโดยรายการคุณสมบัติค่อนข้างเป็น นามธรรม รูปแบบไฟล์ พื้นฐานจึงสามารถนำไปใช้ได้หลายวิธี กล่าวคือ NeXTSTEP ใช้รูปแบบหนึ่งในการแสดงรายการคุณสมบัติ และ เฟรมเวิร์ก GNUstep และ macOS ในภายหลัง ได้นำเสนอรูปแบบที่แตกต่างกันออกไป

เน็กซ์สเต็ป

ภายใต้ ระบบ NeXTSTEP รายการคุณสมบัติถูกออกแบบมาให้ มนุษย์อ่าน และแก้ไขได้ด้วยตนเอง โดยแปลงเป็น ASCII ด้วยไวยากรณ์ที่คล้ายกับ ภาษาโปรแกรม OPENSTEP ก็ใช้รูปแบบเดียวกันนี้ด้วย

จีเอ็นยูสเต็ป

GNUstep ใช้รูปแบบ NeXTSTEP โดยมีการเพิ่มเติมเพื่อแสดงประเภทข้อมูล NSValue และ NSDate รายการประเภทใหม่มีรูปแบบ โดยที่ T คือรหัสประเภทตัวอักษรตัวเดียว ตัวอย่างเช่น NSValue ของ Boolean YES จะแสดงเป็น และออบเจ็กต์ NSDate จะแสดงเป็น [ 5 ] [ 6 ]...