- Property List
-
Property List Dateiendung: .plist
MIME-Type: application/x-plist
Entwickelt von: NeXT und Apple Art: Dateiformat zur Serialisierung assoziativer Arrays ("Dictionaries") Unter Mac OS X, iOS, NeXTSTEP und GNUstep dienen Property List-Dateien (dt. Liste von Eigenschafen) der Serialisierung von assoziativen Datenfeldern (engl. auch dictionaries). Da diese Dateien fast immer die Endung .plist haben, werden sie of auch p-list-Dateien genannt.
Die beiden heute gültigen plist-Formate sind einerseits auf XML-Basis, und zum anderen binär kodiert. Sie werden vom System gleichermaßen unterstützt und sind zueinander kompatibel.
Die Dateien werden häufig genutzt, um die Einstellungen des Benutzers zu speichern; weiterhin besitzt jedes Bundle mindestens eine Datei namens Info.plist, in der allgemeine Informationen zum Bundle enthalten sind.
Inhaltsverzeichnis
Geschichte
In NeXTSTEP wurde ein Dateiformat zur Serialisierung assoziativer Arrays (im Grunde verschachtelte Name-Wert-Paare oder Arrays von Werten) eingeführt. Entwickler konnten so einfach z.B. Einstellungen oder Informationen abspeichern und auslesen.
Da Mac OS X der direkte Nachfolger von NeXTSTEP ist, übernahm es auch das Datenformat für plist-Dateien. Apple erklärte das bisherige Format als ungültig, und führte ein neues auf der Basis von XML ein, das den Funktionsumfang seines Vorgängers übernahm und gleichzeitig neue Datentypen hinzufügte.
GNUstep, ein NeXTSTEP-Klon, übernahm das alte Format aus Gründen der Kompatibilität, und erweiterte es um zwei Datentypen.
Darstellung
Da die Daten, die in diesen Dateien gespeichert werden können, sehr abstrakt sind, lassen sie sich auf vielfältige Art und Weise speichern. Im Lauf der Zeit hat sich das Format der Dateien verändert; so nutzte NeXTSTEP ein anderes Format, als Mac OS X und GNUstep dies tun.
NeXTSTEP
Die plist-Dateien unter NeXTSTEP waren darauf ausgelegt, von Menschen lesbar und von Hand veränderbar zu sein; deswegen wurden sie als ASCII serialisiert.
Die Datentypen wurden so dargestellt:
Datentyp Darstellung Strings "Ein Beispiel-String"
Binärdaten < [Hexadezimal-Code in ASCII] >
Arrays ( "1", "2", "3" )
Dictionaries/assoziative Arrays { "key" = "value"; ... }
Ein Nachteil dieses Formates war, dass keine NSValue (Zahl, Boolean, usw.) gespeichert werden konnten.
GNUstep
GNUstep übernahm das plist-Format von NeXTSTEP, nahm aber einige Änderungen vor. Zum einen wurden NSValues unterstützt (dargestellt als ASCII), zum anderen wurde NSDate hinzugefügt (Darstellung: <*DYYYY-MM-DD HH:MM:SS timezone>).
Weiterhin kann GNUstep das plist-Format von Mac OS X lesen und schreiben[1].
Mac OS X
Mac OS X kann zwar das alte NeXTSTEP-Format lesen, mit Mac OS X 10.0 wurde es jedoch als veraltet deklariert und ein neues, auf XML basierendes plist-Format wurde eingeführt. Apple hat dafür ein DTD veröffentlicht[2].
Da XML-Dateien zwar von Menschen lesbar sind, aber dadurch sehr speicherineffizient sind, wurde mit Mac OS X 10.2 ein neues binäres plist-Format eingeführt. Die beiden Formate sind kompatibel, und können mit plutil[3] umgewandelt werden.
XML-plist-Dateien können zwar per Hand bearbeitet werden, da das aber ab einer gewissen Komplexität ein mühevolles Unterfangen ist, lieferte Apple mit dem Xcode-Paket bis Version 3.2 den Property List Editor mit aus. Ab Xcode 4.0 ist der Editor in die Xcode-IDE integriert.
AppleScript kann, durch Aufrufen von defaults, ebenfalls plist-Dateien lesen und schreiben.
Ab Mac OS X 10.7 bietet plutil auch die Möglichkeit, plist-Dateien in JSON umzuwandeln, und umgekehrt.
Das Kommandozeilen-Tool defaults[4] war ursprünglich dafür gedacht, Einstellungen von Programmen über die Shell ändern zu können; da diese Dateien jedoch in aller Regel plist-Dateien sind, lassen sich mit dem Tool auch beliebige plist-Dateien verändern.
Im Laufe der Zeit haben Entwickler für die verschiedensten Programmiersprachen plist-Editoren und Bibliotheken entwickelt, die plist-Dateien serialisieren und in Datentypen der jeweiligen Sprache konvertieren können.
In plist-Dateien im XML-Format sind für die folgenden Datentypen (und die zugehörigen Cocoa- und CoreFoundation-Typen) die folgenden Tags gültig:
Datentyp XML-Tag Cocoa-Typ[5] CoreFoundation-Typ[6] UTF-8-kodierte Zeichenkette <string> NSString CFString Dezimalzahlen (als String) <real> oder <integer> NSNumber CFNumber Boolean (wahr/falsch) <true /> oder <false /> NSNumber CFBoolean String (ISO 8601-formatiert) <date> NSDate CFDate Base64-kodierte Daten <data> NSData CFData Array
(kann beliebig viele Unterelemente aufnehmen)<array> NSArray CFArray Assoziatives Array/dictionary
(abwechselnd <key>-Tags und plist-Elemente)<dict> NSDictionary CFDictionary Einzelnachweise
- ↑ NSPropertyListSerialization class documentation
- ↑ plist-DTD. Abgerufen am 13. November 2011.
- ↑ The plist(5) manual page auf developer.apple.com. Abgerufen am 13. November 2011.
- ↑ The defaults(1) manual page auf developer.apple.com. Abgerufen am 13. November 2011.
- ↑ Property List Programming Guide for Cocoa. Abgerufen am 13. November 2011.
- ↑ Property List Programming Topics for Core Foundation. Abgerufen am 11. November 2011.
Weblinks
Editoren
- plist-Editor für Windows.
- Editor für Windows, Freeware.
- Property List Tools, AppleScript-Plugin zur Bearbeitung von plist-Dateien.
Bibliotheken
Die folgenden Bibliotheken können alle XML- und Binär-plist-Dateien lesen und schreiben.
- PlistCpp Cross-platform-Bibliothek in C++, MIT-Lizenz.
- PlistCS C#-Bibliothek, MIT-Lizenz.
- cfpropertylist for Ruby Ruby-Bibliothek, Ruby-Lizenz.
- CFPropertyList for PHP PHP-Bibliothek, MIT-Lizenz.
- Property List Library Java-Bibliothek, LGPL-Lizenz.
- com.dd.plist Java-Bibliothek, MIT-Lizenz
Wikimedia Foundation.