Kiinteistöluettelo - Property list

Kiinteistöluettelo
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:

Binääriset plist -objektimuodot (CoreFoundation 1153: n mukaan)
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 plistlibmoduuli 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 plistpaketti, 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.

Katso myös

Huomautuksia

Viitteet

Ulkoiset linkit