Domanda

Sto facendo un organizzatore personale per scopi di apprendimento e non ho mai lavorato con XML, quindi non sono sicuro che la mia soluzione sia la migliore. Ecco la struttura di base per il file XML fornito con:

<calendar>
    <year value="2008">
        <month value="october">
            <day value="16">
                <activity name="mike's birthday" time="21:00" address="mike's apartment" urgency="10">
                     activity description.
                </activity>
            </day>
        </month>
    </year>
</calendar>

L'attributo urgenza dovrebbe essere su una scala da 1 a 10.
Ho fatto una rapida ricerca su google e non sono riuscito a trovare un buon esempio. Forse questa non è la soluzione migliore, e vorrei sapere se è adeguata. Sto facendo l'applicazione in PHP se questo ha qualche rilevanza.

È stato utile?

Soluzione

La tua strada è abbastanza adeguata per me. Tuttavia, preferisco i tag figlio agli attributi, quindi il mio modo sarebbe più simile a:

<activity>
  <name>Mike's Birthday</name>
  <time>2100</time>
  <address>Mike's Place</address>
  <urgency>10</urgency>
  <description>activity description</description>
</activity>

Ma come ho detto, la tua strada va bene.

Domanda veloce, però: perché non un database?

Altri suggerimenti

Potresti essere arrivato a questo ingenuo, ma la caratteristica principale del tuo progetto XML è che è ottimizzato per la ricerca per data. Se il tuo documento XML è di grandi dimensioni e fai molte ricerche per data (che sospetto sia il caso d'uso più comune in un organizzatore personale), questa è una buona cosa.

Esecuzione di questo modello XPath:

/calendar/year[@value='2008']/month[@value='10']/day[@value='7']/activity

esaminerà molti meno nodi di quanti ne utilizzino il modello che dovresti usare con l'organizzazione più semplice e semplificata di Kev:

/calendar/activity[@year='2008' and @month='10' and @day='7']

che sostanzialmente deve guardare ogni nodo del documento.

Nota, a proposito, suppongo che gli attributi month e day siano numerici. Questo è importante perché quasi sicuramente vorrai ordinare questi dati a un certo punto e, a meno che tu non mantenga l'ordinamento nel documento (che, lo ammetto, è possibile sostenere un argomento), tu " Voglio quegli attributi in una forma in cui è facile ordinarli.

È anche importante che tu sia coerente nel modo in cui memorizzi i dati numerici in quegli attributi. (Se vuoi sembrare intelligente durante le riunioni, puoi dire che stai stabilendo rappresentazioni canoniche dei tuoi tipi di dati.) Se usi zero iniziali alcune volte e non altri, ad esempio, nessuno di quei modelli XPath funzionerà in modo affidabile, perché @ day = '7' non corrisponde all'attributo day impostato su " 07 " . (Puoi aggirare ciò convertendo gli attributi in numeri nel tuo XPath usando la funzione number () , ma evitare il problema in primo luogo è meglio.)

Potresti appiattire quella gerarchia fino a:

<calendar>
    <activity
        id="123456"
        name="mike's birthday" 
        year="2008"
        month="10"
        day="16"
        time="21:00" 
        address="mike's apartment" 
        urgency="10">
            activity description.
        </activity>
</calendar>

o ..

<calendar>
    <activity id="12345">
        <name>mike's birthday</name>
        <year>2008</year>
        <month>10<month>
        <day>16</day>
        <time>21:00</time>
              <urgency>10</urgency>
        <address>mike's apartment<address>
        <description>activity description.</description>
    </activity>
</calendar>

Renderebbe la vita un po 'meno dolorosa facendo domande XPath. Ho anche aggiunto un attributo id in modo da poter identificare in modo univoco un'attività.

Penso che la tua struttura andrà bene per quello che stai facendo.

Se stai pianificando di usarlo in parte per conoscere XML, potresti prendere in considerazione l'uso di un mix di attributi ed elementi in modo da iniziare a lavorare con le raccolte di ciascuno. Una volta che ti senti più a tuo agio con XML, probabilmente inizierai a definire le regole che utilizzerai per determinare quali proprietà diventano attributi e quali proprietà diventano elementi.

Con il codice giusto, è possibile spostare le informazioni avanti e indietro tra i file XML e le tabelle del database. Potresti anche iniziare a studiare XSL in modo da poter esercitarti a spostare le cose senza cambiare l'originale File XML (o, una volta che i dati sono in una tabella, non hanno nemmeno un file XML originale).

Potrebbe valere la pena guardare xCal , una rappresentazione conforme a XML di iCalendar standard, per alcune idee potenzialmente ben ponderate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top