Lista de propiedades
En los framework Mac OS X, iOS, NeXTSTEP y GNUstep, los archivos de lista de propiedades son archivos que almacenan objetos serializados. Estos archivos usan la extensión .plist, por lo que son conocidos como archivos plist (extensión cuyo nombre deriva de su abreviatura en inglés: Property List).
Lista de propiedades | ||
---|---|---|
Desarrollador | ||
Apple Computer y GNUstep, anteriormente NeXT | ||
Información general | ||
Extensión de archivo |
.plist | |
Tipo de MIME |
application/xml | |
Formato abierto | ||
Los archivos de lista de propiedades se utilizan frecuentemente para almacenar configuraciones del usuario. También se utilizan para almacenar información sobre bundles y aplicaciones, lo que en el antiguo Mac OS se conseguía mediante el flujo de recursos de un archivo (resource fork).
Estos ficheros se operan con la clase NSPropertyListSerialization. Una lista de propiedades no puede contener más que objetos de tipo Core Foundation o Foundation Kit porque la biblioteca no permite serializar otros tipos de objetos. [1]
Formato
editarDebido a que la información representada en las listas de propiedades es en cierto sentido abstracta, el formato de archivo subyacente se puede implementar de múltiples formas. A partir del formato que NeXTSTEP usaba para representar estas listas, los subsecuentes GNUstep and Mac OS X introdujeron diferentes formatos.
NeXTSTEP
editarEn NeXTSTEP, los archivos plist se diseñaron para ser legibles por humanos y editables manualmente, serializados a ASCII en una sintaxis similar a un lenguaje de programación.[2]
Las cadenas se representaban:
"Esto es una cadena plist"
Los datos binarios se presentaban como:
< [códigos hexadecimales en ASCII] >
Los arrays se representaban así:
( "1", "2", "3" )
Y los diccionarios:
{ "clave" = "valor"; ... }
Una limitación de las listas de propiedades originales de NeXT es que no podían representar objetos NSValue (número, booleano, etc.).
GNUstep
editarGNUstep adopta el formato de NeXTSTEP con unos pocos añadidos: soporta objetos NSValue (que se representan como ASCII plano) y también objetos NSDate (que se representan como <*DYYYY-MM-DD HH:MM:SS timezone>).[1]
GNUstep puede también leer y escribir archivos de propiedades en el formato usado por Mac OS X.
Mac OS X
editarA pesar de que Mac OS X puede leer el formato de NeXTSTEP, Apple lo aparta en favor de sus dos nuevos formatos propios.
En Mac OS X 10.0, el formato de NeXTSTEP fue declarado obsoleto y se introdujo un nuevo formato XML, con una DTD pública definida por Apple. El formato XML soporta caracteres no-ASCII y objetos NSValue (que, al contrario que el formato ASCII de GNUstep, no es soportado por el formato ASCII de Apple).
Puesto que los archivos XML, sin embargo, no son el método más eficiente en espacio de almacenamiento, Mac OS X 10.2 introdujo un nuevo formato donde los archivos de lista de propiedades eran almacenados como archivos binarios. A partir de Mac OS X 10.4, este es el formato por defecto para los archivos de preferencias. En Mac OS X 10.7, se introdujo soporte para lectura y escritura de archivos en formato JSON. Sin embargo, JSON y plist no son completamente compatibles. Por ejemplo, los archivos de propiedades soportan un tipo de fecha nativo, mientras que los JSON no. En el otro sentido, JSON permite valores null para las claves, mientras que las listas de propiedades no lo soportan de forma explícita.
La utilidad plutil (introducida en Mac OS X 10.2) se puede utilizar para comprobar la sintaxis de los archivos plist o convertirlos de un formato a otro.[3] Además, el comando defaults (introducido en NeXTSTEP) se puede emplear para manipular archivos plist utilizados para almacenaje de preferencias (conocidos antes de OS X como defaults, de ahí el nombre) desde la línea de comandos vía su dominio de preferencias, y también puede utilizarse para editar archivos plist arbitrarios.[4]
Las listas de propiedades XML y JSON son manualmente editables con cualquier editor de texto. Adicionalmente, Apple proporciona soporte en Xcode para editar listas de propiedades en un visor/editor jerárquico que puede manejar plists en formato binario o XML, pero no en JSON. Desde Mac OS X 10.4, Apple proporciona una interfaz de AppleScript para leer archivos de lista de propiedades. A partir de Mac OS X 10.5, se introdujo una interfaz de AppleScript para además editar, crear y escribir archivos plist.[5]
Para el formato XML, las etiquetas, las clases de Foundation y los tipos de CoreFoundation, y los formatos de almacenamiento de los datos son los siguientes:
Clases de Foundation | Tipos de CoreFoundation | Etiquetas XML | Formato de almacenamiento |
---|---|---|---|
NSString
|
CFString
|
<string>
|
Cadena de texto UTF-8 |
NSNumber
|
CFNumber
|
<real> , <integer>
|
Cadena en decimal |
NSNumber
|
CFBoolean
|
<true/> or <false/>
|
Sin contenido (sólo etiqueta) |
NSDate
|
CFDate
|
<date>
|
Cadena con formato ISO 8601 |
NSData
|
CFData
|
<data>
|
Datos codificados en Base64 |
NSArray
|
CFArray
|
<array>
|
Puede contener cualquier número de elementos hijos Un array vacío se puede representar como <array/>
|
NSDictionary
|
CFDictionary
|
<dict>
|
Alternando etiquetas <key> y etiquetas de elementos plist
|
Referencias
editar- Apple Inc. «Property List Programming Guide» (en inglés). developer.apple.com. Consultado el 8 de julio de 2013.
- ↑ a b «NSPropertyListSerialization class documentation» (en inglés). Archivado desde el original el 19 de mayo de 2011. Consultado el 8 de julio de 2013.
- ↑ «Property List Programming Guide: Old-Style ASCII Property Lists» (en inglés). Consultado el 8 de julio de 2013. En referencia a OpenStep, no exactamente a NeXTSTEP.
- ↑ «plutil(1) Mac OS X Manual Page» (en inglés). Consultado el 8 de julio de 2013.
- ↑ «defaults(1) Mac OS X Manual Page» (en inglés). Consultado el 8 de julio de 2013.
- ↑ «AppleScript: Property List» (en inglés). Archivado desde el original el 24 de abril de 2009.
Enlaces externos
editar- La página de manual de plist(5)
- Esta obra contiene una traducción parcial derivada de «Property list» de Wikipedia en inglés, concretamente de esta versión, publicada por sus editores bajo la Licencia de documentación libre de GNU y la Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.