Kiinteistöluettelo - Property list
Tiedostopääte |
.luettelo
|
---|---|
Internet -mediatyyppi | application/x-plist
|
Yhtenäinen tyyppitunniste (UTI) | com.apple.property-list |
Kehittäjä |
Apple Computer ja GNUstep , aiemmin NeXT |
Muototyyppi | Serialization on sanakirjan esineitä. |
Vuonna MacOS , iOS , NeXTSTEP ja GNUstep ohjelmointi puitteet , ominaisuuksien luettelon tiedostot ovat tiedostoja, jotka myymälän sarjana esineitä . Ominaisuusluettelotiedostot käyttävät tiedostotunnistetta .plist , ja siksi niitä kutsutaan usein p-list- tiedostoiksi.
Ominaisuusluettelotiedostoja käytetään usein käyttäjän asetusten tallentamiseen. Niitä käytetään myös nippujen ja sovellusten tietojen tallentamiseen , mikä on tehtävä, jota resurssihaarukka palvelee vanhassa Mac OS -käyttöjärjestelmässä.
Ominaisuusluetteloita käytetään myös kehityksen lokalisointimerkkijonoissa . Nämä tiedostot käyttävät .strings- tai .stringsdict -laajennuksia. Ensimmäinen on "supistettu" vanhanaikainen plist, joka sisältää vain yhden sanakirjan ilman hakasulkeita (katso propertyListFromStringsFileFormat ), kun taas jälkimmäinen on täysi lista. Xcode käyttää myös .pbxproj -laajennusta vanhoille projektitiedostoille.
Esitykset
Koska ominaisuusluetteloissa esitetyt tiedot ovat hieman abstrakteja , taustalla oleva tiedostomuoto voidaan toteuttaa monella tavalla. Nimittäin NeXTSTEP käytti yhtä muotoa edustaakseen ominaisuusluetteloa, ja sitä seuraavat GNUstep- ja macOS -kehykset esittivät erilaisia muotoja.
Seuraava askel
Alla NeXTSTEP , omaisuuden luettelot suunniteltu ihmisen luettavissa ja muokata käsin, sarjoittaa että ASCII on syntaksin hieman kuten ohjelmointikieli . OPENSTEP käytti samaa muotoa .
- Strings ovat edustettuina C literaalityylistä:
"This is a plist string\n"
; yksinkertaisemmat lainausmerkkijonot ovat sallittuja, kunhan ne koostuvat aakkosnumeerisista numeroista ja yhdestä _ $+/: .- . - Binaaridatan ovat edustettuina: . Paritettujen heksakoodien väliset välilyönnit ja kommentit ohitetaan.
< [hexadecimal codes in ASCII] >
-
Paneelit ovat edustettuina:
( "1", "2", "3" )
. Jälkipilvet ovat sallittuja. -
Sanakirjat ovat edustettuina:
{ "key" = "value"; ... }
. Vasemman puolen on oltava merkkijono, mutta se voi olla lainausmerkki. - Kommentit ovat sallittuja seuraavasti:
/* This is a comment */
ja// This is a line comment
. - Kuten C: ssä, välilyönnit ovat yleensä merkityksettömiä syntaksille. Arvolausekkeet päättyvät puolipisteeseen.
Yksi alkuperäisen NeXT -ominaisuusluettelomuodon rajoitus on, että se ei voi edustaa NSValue (numero, boolean jne.) -Objektia. Tämän seurauksena nämä arvot olisi muutettava merkkijonoiksi ja sovellus olisi "palautettava" talteen. Toinen rajoitus on, että virallista 8-bittistä koodausta ei ole määritelty.
Oletusarvot apuohjelma, joka otettiin käyttöön vuonna OpenStep (1996), voidaan manipuloida plist tiedostoja käytetään varastointiin mieltymykset (tunnetaan oletusarvot vuonna NeXTSTEP, siitä nimi) komentoriviltä kautta mieltymyksensä domain, ja tämä apuohjelma voidaan muokata mielivaltaisia plist -tiedostoja. Tämä apuohjelma korvasi kolme vanhempaa komentoa.
GNUstep
GNUstep ottaa käyttöön NeXTSTEP -muodon, jossa on lisäyksiä NSValue- ja NSDate -tietotyyppien esittämiseen. Uusien kirjoitettujen merkintöjen muoto on <* T ...> , jossa T on yksikirjaiminen tyyppikoodi. Esimerkiksi boolen YES-arvon NSValue esitetään muodossa <*BY> ja NSDate-objektit muodossa <*VVVVV-KK-PP HH: MM: SS +ZZZZ> . Binääridata voi käyttää myös tehokkaampaa base64 -muotoa <[b64 ...]> . Myös 8-bittinen ongelma on epäsuorasti ratkaistu, koska useimmat käyttöönotot käyttävät UTF-8: ta. Kaiken kaikkiaan NSPropertyListGNUstepFormat tuo ihmisen luettavan tekstimuodon ilmeikkyyden ja kompaktiuden tasolle Applen XML-muodon kanssa.
GNUstepillä on myös oma binäärimuoto, NSPropertyListGNUstepBinaryFormat , joka on toteutettu NSSerialisoinnissa . Tämä muoto määritellään rekursiivisesti kuten tekstimuodot, ja yhden tavun tyyppimerkki edeltää joitain tietoja. Merkkijonojen harjoittelun muotoa tuetaan GS-laajennuksen shouldBeCompact- kytkimen kautta.
Kaksi suhteellisen riippumaton plist käsittelijät löytyy GNUstep: CFPropertyList in libs-ydin-emäs (CoreFoundation), ja NSPropertyList on libs-emäs (Foundation Kit). Molemmat tukevat jossain määrin macOS: n käyttämiä binääri- ja XML -lomakkeita, mutta jälkimmäinen on paljon täydellisempi. Esimerkiksi kaksi GNUstep-spesifistä muotoa käsitellään vain jälkimmäisessä.
GNUstep tarjoaa joukon plist-komentorivityökaluja, jotka perustuvat NSPropertyListiin , mukaan lukien versio pl ja oletusarvot .
Mac käyttöjärjestelmä
Vaikka macOS voi lukea myös NeXTSTEP-muodon, Apple jättää sen syrjään kahden uuden oman muodon hyväksi, yhden XML-pohjaisen ja toisen binäärisen. Applella on myös osittain yhteensopiva JSON-muoto ( NSJSONSerialization ).
Historia
Vuonna Mac OS X 10.0 , NextStep formaatti oli vanhentunut , ja uusi XML formaatti otettiin käyttöön, jossa julkinen DTD määritelty Apple . XML-muoto tukee muita kuin ASCII-merkkejä ja NSValue-objektien tallentamista (mikä, toisin kuin GNUstepin ASCII-ominaisuusluettelomuoto, Applen ASCII-ominaisuusluettelomuoto ei tue).
Koska XML-tiedostot eivät kuitenkaan ole tilataloudellisimpia tallennuskeinoja, Mac OS X 10.2 esitteli uuden muodon, jossa ominaisuusluettelotiedostot tallennetaan binääritiedostoina. Aloittaen Mac OS X 10.4 , tämä on oletusmuodon mieluummin tiedostoja. Vuonna Mac OS X 10.7 , tukea lukemisen ja kirjoittamisen tiedostoja JSON muodossa otettiin käyttöön. JSON- ja kiinteistöluettelot eivät kuitenkaan ole täysin yhteensopivia keskenään. Esimerkiksi ominaisuusluetteloissa on alkuperäisiä päivämääriä ja tietotyyppejä, joita JSON -muoto ei tue. Päinvastoin, JSON sallii nolla -arvot, kun taas ominaisuusluettelot eivät tue nimenomaisia nolla -arvoja.
Työkalut
Vanhat oletukset työkalun NeXTSTEP yhä käytettävissä. / Usr / libexec / PlistBuddy komento tarjoaa interaktiivisen plist editori. Se voidaan myös kirjoittaa.
Plutil apuohjelma (otettu käyttöön Mac OS X 10.2 ) voidaan tarkistaa syntaksin omaisuuden luettelot tai muuntaa kiinteistön listan tiedoston formaatista toiseen. Se tukee myös plistien muuntamista Objective-C- tai Swift-objekti-literaaleiksi. Kuten Cocoa NSPropertyListSerialization, johon se on rakennettu, se ottaa "vanhoja" tuloja, mutta ei muunna tätä tyyppiä. (Kaakaon NSSerializer ennen Mac OS X 10.2: ta lähettää vanhanaikaista lähtöä.)
Pl apuohjelma on otettu käyttöön Mac OS X 10.5. Se vaatii kaiken panoksen ja yrittää luoda "vanhoja" plistejä. Kuten GNUstep versio, se näyttää käyttää kuvauksen omaisuutta säätiön tyyppejä löytyy plist, jonka Apple on määritellyt tuottamaan voimassa vanhanaikaista plist.
Sisäisesti Apple tarjoaa C Core Foundation -koodissaan CFPropertyList -muodossa avoimen lähdekoodin jäsentäjän vanhoja, XML- ja binäärimuotoja varten. Kaikki apuohjelmat ja suurin osa järjestelmästä käyttävät kuitenkin Obj-C Foundation Kit -sovelluksen suljetun lähdekoodin NSPropertyList-jäsennintä. Swift -uudelleentoteutus on avoimen lähdekoodin, mutta sen ei ole taattu olevan identtinen.
Muoto
XML- ja JSON- ominaisuusluetteloita voidaan muokata käsin missä tahansa tekstieditorissa. Lisäksi Apple tarjoaa Xcode -tuella ominaisuusluetteloiden muokkaamista hierarkkisessa katseluohjelmassa/editorissa, joka voi käsitellä binääri- tai XML -muotoisia plistejä , mutta ei JSON -muotoa . Vuodesta Mac OS X 10.4 , Apple tarjoaa AppleScript käyttöliittymän lukemiseen omaisuuden Listatiedostojen läpi Järjestelmätapahtumat sovelluksen. Vuodesta Mac OS X 10.5 , Apple tarjoaa AppleScript käyttöliittymä editointi, luominen ja kirjoittaminen ominaisuuksien luettelon tiedostot.
XML -muodossa tunnisteet, niihin liittyvät Foundation -luokat ja CoreFoundation -tyypit sekä tietojen tallennusmuodot ovat seuraavat:
Säätiön luokka | CoreFoundation -tyyppi | XML -tunniste | Tallennusmuoto |
---|---|---|---|
NSString | CFString | <merkkijono> | UTF-8-koodattu merkkijono |
NSNumero | CFNumero | <todellinen>, <luku> | Desimaalimerkkijono; realilla voi olla eksponentteja tai olla ääretön (inf) tai NaN (nan). |
NSNumero | CFBoolean | <tosi/>, <epätosi/> | Ei tietoja (vain tunniste) |
NSDate | CFDate | <päivämäärä> | ISO 8601 muotoiltu merkkijono |
NSData | CFData | <data> | Base64 -koodattu data |
NSArray | CFArray | <jono> | Voi sisältää minkä tahansa määrän alielementtejä. Voi olla tyhjä. |
NSD -sanakirja | CFD -sanakirja | <dict> | Vuorottelevat <avain> -tunnisteet ja plist -elementtitunnisteet. Voi olla tyhjä. |
Binaaritiedoston muoto on kuvattu kommentti lohko Core säätiön C-koodia lähdetiedoston ( CF / CFBinaryPList.c ) Applen avoin hankitaan täytäntöönpanon binary plist sen Foundation kirjastossa. Apple kuvailee toteutusta läpinäkymättömäksi plist (5) -sivun manuaalisessa dokumentaatiossa, mikä tarkoittaa, että muotoon luottamista ei suositella. Binääritiedostomuodossa maaginen numero (tiedoston ensimmäiset tavut, jotka osoittavat, että se on kelvollinen plist -tiedosto) on teksti bplist , jota seuraa kaksi tavua, jotka osoittavat muodon version.
Binääritiedosto voi tallentaa tietoja, joita ei voida tallentaa XML- tai JSON -tiedostomuodoissa. Taulukon, joukon ja sanakirjan binäärityypit koostuvat osoittimista - objref- ja keyref -merkinnöistä - jotka indeksoivat tiedoston objektitaulukkoon. Tämä tarkoittaa, että binäärilistat voivat tallentaa sen tosiasian, että - esimerkiksi - erillisessä taulukossa ja tiedostossa sarjoitettu sanakirja on tallentanut saman tietoelementin. Tätä ei voi tallentaa XML -tiedostoon. Tällaisen binaaritiedoston muuntaminen johtaa kopioon tietoelementistä XML -tiedostoon. Lisäksi binääritiedostossa on UID -tyyppi, jota käytetään tietokohteiden tunnistamiseen, kun ne sarjataan. Täydellinen luettelo tallennettavista tiedoista C -koodin lähdetiedostosta on seuraava:
Säätiön luokka | CoreFoundation -tyyppi | Kohteen tyyppi | Merkkitavu | Koodatut tiedot |
---|---|---|---|---|
nolla | nolla | null (v "1?"+) | 0000 0000 | n/a |
NSNumero | CFBoolean | bool |
0000 1000 (epätosi) 0000 1001 (totta) |
n/a |
NSURL | CFURL | url (v "1?"+) |
0000 1100 (perusmerkkijono) 0000 1101 (merkkijono) |
merkkijono: URL -merkkijono rekursiivisessa koodauksessa (kuten "merkkijonobjektimuodossa?"); perusmerkkijono: sama, mutta perus -URL -osoite on koodattu ensin. |
NSUUID | CFUUID | uuid (v "1?"+) | 0000 1110 | 16 tavua UUID |
täyttää | 0000 1111 | ei mitään - vain pehmuste | ||
NSNumero | CFNumero | int | 0001 nnnn | Tavujen määrä on 2^nnnn, big-endian tavua (1, 2, 4 tai 8) |
NSNumero | CFNumero | todellinen | 0010 nnnn | Tavujen määrä on 2^nnnn, isot end-tavut (4 tai 8) |
NSDate | CFDate | Päivämäärä | 0011 0011 | 8 tavua float seuraa, big-endian tavua; sekunnin 1.1.2001 ( Core Data epookki) |
NSData | CFData | tiedot | 0100 nnnn [int] | nnnn on tavujen määrä, ellei 1111 sitten seuraa int -lukua, jota seuraa tavua |
NSString | CFString | merkkijono | 0101 nnnn [int] | ASCII -merkkijono, nnnn on # merkkiä, muuten 1111, sitten int -luku, sitten tavua |
NSString | CFString | merkkijono | 0110 nnnn [int] | Unicode-merkkijono, nnnn on # merkkiä, muussa tapauksessa 1111 sitten int count, sitten big-endian 2-tavuinen uint16_t |
NSString | CFString | merkkijono (v "1?"+) | 0111 nnnn [int] | UTF-8-merkkijono, nnnn on # merkkiä, muuten 1111, sitten int-luku, sitten tavua |
UID | 1000 nnn | nnnn+1 on # big-endian tavua (1, 2, 4 tai 8). Allekirjoittamaton int, vain NSKeyedArchiverin tuottama (katso alla). | ||
NSArray | CFArray | matriisi | 1010 nnnn [int] | objref* nnnn on luku, ellei '1111', sitten int count seuraa |
NSOrderedSet | ordset (v "1?"+) | 1011 nnnn [int] | objref* nnnn on luku, ellei '1111', sitten int count seuraa | |
NSSet | CFSet | asettaa (v "1?"+) | 1100 nnnn [int] | objref* nnnn on luku, ellei '1111', sitten int count seuraa |
NSD -sanakirja | CFD -sanakirja | sanella | 1101 nnnn [int] | keyref* objref* nnnn lasketaan, ellei '1111', sitten int count follo |
Huomaa monen tyyppinen v "1?"+ -Merkintä. Tämä tarkoittaa, että merkkitavu löytyy vain tiedostoista, joiden muoto on vähintään 1? maaginen numero. Tarkka tapa jäsentää ne on epäselvämpi kuin tapa jäsentää vanhoja tyyppejä, koska CFBinaryPlist -toteutus käsittelee vain versiota "0?". Käytännössä tällaisia tyyppejä ei koskaan kohdata, koska NSKeyedArchiver pystyy jo tallentamaan nämä tiedot.
Siirtotaulukko seuraa objektitaulukkoa, jota seuraa perävaunu, joka sisältää tietoja kahden taulukon koosta ja sijainnista.
Sarjataan plistiin
Koska ominaisuusluettelot eivät sisällä kaikkia tietoja ja tietotyyppejä, joita tarvitaan mielivaltaisen objektin kuvaamiseen, tehdään usein ylimääräinen koodaus- ja dekoodauskerros. OpenStep selityksessä abstracts toiminta sarjastettaessa tahansa NSObject alle NSCoding protokollaa. Mikä tahansa luokka, joka toteuttaa tämän protokollan, voi saada ilmentymänsä sarjaksi NSCoder -alaluokassa johonkin muuhun muotoon. On olemassa kaksi pääkooderia objektien sarjoittamiseen plisteihin:
- NSArchiver , joka muuntaa objektin binääridatalohkoksi jonkin verran merkityn rakenteen tapaan. Tämä luokka on osa OpenStepia, vaikka mitään konkreettista muotoa ei ole määritelty. Käytännössä sitä voidaan käyttää objektin sarjoittamiseen tiedostoon (plistin ohittaminen) tai tietojen upottamiseksi plistiin. Se on luettava ja kirjoitettava samassa järjestyksessä kuin kirjoitettu. NSKeyedArchiverin käyttöönotto poistaa sen käytön.
- NSKeyedArchiver , käyttöön Mac OS X 10.2, muuttaa objektin osaksi NSDictionary . Tärkein parannus tähän muotoon ohjelmoijille on, että se ei käytä jäseniä kiinteässä järjestyksessä vaan merkkijonoavaimilla. Sisäisesti se hieman toistaa binäärisen plist -muodon tallentamalla sanakirjaan objektitaulukon matriisin nimeltä $ objektit . UID -osoitin viittaa kaikkeen muuhun, luokkatiedot mukaan lukien. Diktin alla oleva $ -merkintä osoittaa ylätason objektille, jonka ohjelmoija tarkoitti koodata.
Muun muassa arkistointilaitteen käyttäminen mahdollistaa uusien tietotyyppien koodaamisen muuttamatta itse plist -muotoa, ja se on Applen ensisijainen tapa koodata asioita, kuten NSSets ja null -arvot. Muodon jäsentäminen osoittautuu hieman vaikeammaksi, koska joissakin luokissa on vielä yksi kerros, jota listojen piti tukea. Kuten binäärimuoto, jossa on myös objektitaulukko, on mahdollista luoda pyöreitä viittauksia NSKeyedArchiverissa . Koska XML -tiedostossa ei ole UID -tietotyyppiä, kokonaisluvut tallennetaan sanakirjaan avaimella "CF $ UID".
Apple julkaisee avoimen lähdekoodin NSKeyedArchiverin Swift Corelibs Foundationissa; kuten suljetun lähdekoodin Apple Foundation, se rajoittaa tulostusmuodot vain binääri- ja XML-muotoon. Siinä on myös joitain testitapauksia, jotka osoittavat sarjoituksen tulokset. GNUstepillä on myös yhteensopiva toteutus, joka ei rajoita tulostusmuotoja.
Polun kieli
Ominaisuusluetteloille ei ole yhtä standardoitua polkukieltä, kuten XPath XML: lle, mutta eri ohjelmien käyttämät epäviralliset käytännöt ovat olemassa.
- Piste -syntaksiversio löytyy Applen plutilin avainpolku -argumentista . Se näyttää johtuvan
(id) -[NSObject(NSKeyValueCoding) valueForKeyPath:]
. - PlistBuddy käyttää eri muotoa , jossa on kaksoispiste syntaksi indeksointia varten.
Kumpikaan muoto ei pysty ilmaisemaan avainta, jossa on erotinmerkki.
Muut alustat
Windows
Vaikka plist -tiedostot tunnetaan parhaiten Apple- tai Darwin -järjestelmissä, mukaan lukien iOS ja macOS, myös Windows -tietokoneissa, kun Apple -ohjelmisto, kuten iTunes tai Safari, on asennettu. Windowsissa tiedostot ovat yleensä binääritiedostoja, vaikka jotkin sovellukset voivat luoda PLIST -tiedostoja muissa muodoissa.
Windowsissa Apple plist -tiedostot tallennetaan käyttäjän kotihakemistoon kohtaan %USERPROFILE %\ AppData \ Roaming \ Apple Computer . Nämä Windowsin listatiedostot tallentavat yleensä asetuksia ja muita tietoja Windows -rekisterin käyttämisen sijaan.
Vaihtoehdot PLIST -tiedostojen muokkaamiseen Windowsissa eivät ole yhtä laajoja kuin macOS. Jos tiedosto on XML- tai JSON -muodossa huolellisesti, voidaan käyttää tekstieditoria, kuten Notepad ++ . Apple toimittaa plutil.exe "Apple Application Support" -pakettiinsa (joka on osa iTunesia ), ja se on identtinen sen macOS -version kanssa.
NetBSD
Esiteltiin vuonna 2006 ja julkaistiin ensimmäisen kerran NetBSD#4.0: n (2007) kanssa proplib -kirjasto, jota voidaan käyttää tietojen sarjoittamiseen ytimen ja käyttäjämaan välillä. Se toteuttaa osan XML -plist -kielestä.
Yksi proplibin otoskäyttäjistä on sysmon envsys -kehyksen toinen versio järjestelmän seurannasta .
NetBSD: n proplib -kirjasto on myös siirretty DragonFly -palveluun vuonna 2010, ja se on saatavilla DragonFly BSD#2.8: sta lähtien .
Monialustainen
- Facebookin Xcode- rakennustyökalun, xcbuildin, avoimen lähdekoodin uudelleenkäyttöönotto sisältää plist-kirjaston sekä plutilin ja PlistBuddyn . Nämä alustojen väliset apuohjelmat on kirjoitettu kielellä C ++ .
- Python on sisäänrakennettu
plistlib
moduuli lukea ja kirjoittaa plist tiedostoja, Applen XML tai binary (vuodesta Python 3.4). ProperTree on monialainen editori, joka käyttää tätä kirjastoa.- Kolmannen osapuolen kirjastolla nimeltä ccl-bplist on lisäkyky käsitellä NSKeyedArchiver-käyttäjätunnuksia.
-
Go on
plist
paketti, joka tukee neljää plist: OpenStep teksti, GNUstep tekstiä, Apple XML, ja Apple Binary. Se käsittelee myös XML- ja binäärimuodossa olevia UID -tunnuksia.