2009-03-12 4 views
8

Quando si progetta un feed XML per dati strutturati, quali sono le buone pratiche e quali sono gli anti-pattern?Nuovo e migliorato con chiarificazione: best practice per la progettazione di feed XML per dati strutturati quando non esiste DTD/schema preesistente

Vorrei risposte che riguardino la struttura e il contenuto XML e/o i meccanismi di trasporto.

meccanismi di trasporto

Con le tecnologie attuali è FTP/SFTP una buona tecnologia? Ci sono casi in cui è la soluzione migliore come soluzione?

Generalmente preferisco i feed pull HTTP, ma quali sono i punti deboli che utilizzano HTTP?

Quali altri meccanismi di alimentazione dovrebbero essere considerati con i loro pro e contro?

Struttura XML Content

Quando non c'è adatto DTD/schema esistente che esiste, quali pratiche possono essere seguiti a venire con un buon progetto XML?

Due anti-motivi per questo ho già dato nella mia risposta qui sotto.

Ma cosa dovrei fare quando progetto un feed? Mi piacerebbe conoscere i tag e gli attributi, come i dati relazionali (specialmente le relazioni molti-a-molti) dovrebbero essere trasmessi in XML, ecc.

Nota: Ho completamente riscritto la domanda, come anche con la generosità offerta non stava ottenendo molto amore. (La vecchia versione è nella cronologia delle modifiche se vuoi vederla. Questa versione dovrebbe essere pertinente alle risposte già date)

risposta

4

Una buona alimentazione è

1) Uno schema, perché in questo modo è possibile controllare programatically e non si sa quando è stato cambiato - consente di risparmiare un sacco di arguements

2) ti dice quando è giù

3) funziona in modo coerente

4) Sarà gestire fermate, inizia, mettere in pausa, riavvolgere con grazia

5) ha un servizio di prova ° a esercita pienamente tutte le caratteristiche di alimentazione esistenti

6) Ha un nuovo servizio di funzioni per lo sviluppo scatola di sabbia

Realisticamente con cui ho lavorato solo con i feed che forniscono 1 e, a volte 2, ma possiamo sognare.

2

Senza una DTD/Schema non hai modo di sapere se un feed è valido fino al tuo codice incontra un problema Quindi per me gli schemi sono molto importanti, sia come consumatore XML che come produttore.

Anche un semplice schema è utile, definendo gli elementi, quante volte si verificano, ecc. Uno schema dettagliato, con restrizioni o enumerazioni secondo necessità, è ancora più bello. Quando ne possiedo, posso ridurre al minimo la quantità di errori nell'XML che produco, oppure posso convalidare l'intero file se è stato inviato a me e rifiutarlo come non conforme se necessario. È solo un modo pulito e standard per eseguire la convalida dell'input.

0

Un mio bugbear personale al momento sono timestamp senza informazioni sul fuso orario. Se hai a che fare con feed da tutto il mondo, un periodo senza fuso orario non ha senso.

Modifica: E feed che non includono un attributo di codifica, o includono uno, ma poi non lo rispettano!

+0

Raccomandazioni comuni per i timestamp: utilizzare sempre l'ora UTC. –

1

È una buona domanda, ma non so quanto andrà oltre lo schema buono,! Schema cattivo.

Ho dovuto consumare feed che non fornivano o fornivano schemi spezzati e realisticamente tutto ciò che puoi fare è trasformarli in cloni senza namespace, il che è fattibile ma rischioso come l'inferno.

I18N e in particolare i formati numerici e le datestamp rappresentano un grosso problema. La migliore pratica è ovviamente la dichiarazione del tuo formato nel documento e preferibilmente il default all'ora UTC.

Immagino che l'unica altra buona pratica che posso suggerire è dove consumare più feed che hanno bisogno di interagire non cercare di gestirli nei loro termini, invece la prima cosa che devi fare è deserializzarli su un oggetto standard o trasformarli in uno schema interno standard.

1

Senza conoscere le vostre reali esigenze, è difficile formulare raccomandazioni per i meccanismi o gli stili di trasporto. Ad esempio, se stai facendo syndication basata su pull, HTTP può offrire funzionalità che aiutano nella memorizzazione nella cache. Se stai facendo protocolli basati su push o publish/subscribe come XMPP could be used.

Per il feed stesso, consiglierei di attenersi a una specifica pubblica come Atom (o forse una variante RSS se lo si desidera). Atom incorpora alcuni degli elementi che hai menzionato come codifica di contenuti e formati di data (l'UTC è il più semplice nella maggior parte dei casi, quindi converti all'ora locale dell'utente per la visualizzazione). Attaccando ai formati standard, si consente anche l'uso di parser di feed che supportano tale specifica.

Atom e RSS sono abbastanza flessibili da consentire di definire i propri spazi dei nomi XML per aggiungere tutti gli elementi e gli attributi necessari. Se i tuoi dati prodotti non sono mappati sul modello di dati di feed/entry, allora forse non sono più adatti a te.

Se si utilizza XML, relazioni parent/child (dove il figlio ha solo 1 genitore), questi possono essere facilmente modellati come elementi padre/figlio. Se il bambino ha più genitori, puoi usare riferimenti e attributi per collegare elementi.

+0

Generalmente, tuttavia, dobbiamo fornire dati strutturati, laddove non esiste uno standard concordato ovvio. Quindi, a meno che mi manchi qualcosa, non penso che ATOM/RSS sarebbe sufficiente. per esempio. Punteggi di tennis. C'è una DTD di SportML per queste cose, ma sembra estremamente prolissa. – DanSingerman

+0

Chi sta consumando i tuoi dati? Sono altri servizi o esseri umani computerizzati tramite qualcosa come Google Reader? Se sei il fornitore, non puoi definire lo standard utilizzato per fornire i dati? Sembra che tu debba scegliere di guidare (definire il tuo) o seguire (usa uno SportsML). –

0

Penso che lo MediaRSS sia uno schema di alimentazione piuttosto buono. Mi piace perché:

  • È abbastanza flessibile da contenere quasi ogni tipo di contenuto.
  • Consente di definire gruppi di supporti con nel feed (utile, ad es., Quando si hanno più risoluzioni di un'immagine o più formati).
  • Definisce praticamente tutti i metadati di base comuni a tutti i tipi di media, ma non li richiede tutti. Non ho trovato alcun supporto che volevo inserire in un feed che non poteva rappresentare.

Una cosa vorrei per avere che non è un tag per i parametri arbitrari che devono essere passati al giocatore di un determinato pezzo di media, ma non credo che in realtà ha un senso dal momento che il feed non deve sapere nulla del giocatore. Ma a volte devo solo passare i parametri al lettore Flash.

0

Bene, onestamente, le "migliori pratiche" non sono universali, quindi qualsiasi risposta sarà applicabile solo per il problema specifico che viene risolto.

Tuttavia, nella mia esperienza, ecco un elenco di elementi generali di progettazione di XML e protocollo.

  • Evitare FTP/SFTP quando possibile a causa dell'affidabilità e, in particolare con SFTP, non sono implementazioni universali. Inoltre, la maggior parte dei firewall consentirà la porta 80, ma è possibile eseguire porte bloccate per FTP/SFTP.
  • Implementare uno schema con uno spazio dei nomi contenente una versione o una data. Ad esempio, http://yourcompany.com/xml/myfeed/2009/03. Questo fornisce informazioni su quando lo schema è stato revisionato e indica anche un numero di versione, che è utile per i client.
  • Se il tuo feed è esposto pubblicamente, considera l'implementazione di vari tag RDF per i tuoi dati. I tuoi dati diventeranno quindi parte del Web semantico.
  • Se i tuoi contenuti lo supportano, usa RSS o Atom, perché ci sono un sacco di clienti là fuori che capiscono già quei formati, quindi aumenta drasticamente la tua usabilità.
Problemi correlati