Quale approccio utilizzare per interrogare più file XML?

1

Riceverò decine di migliaia di file XML, che continueranno a crescere con i nuovi file nel tempo. Devo essere in grado di interrogare questi file nel loro complesso (come l'interrogazione SQL di tutti i record in un database). Quali tecnologie e / o approcci dovrei considerare per questo problema?

Mi sembra di dover cercare XQuery. Non sono così familiare, però.

UPDATE 1:

Query di esempio che potrei eseguire:

  • Restituisci tutto il codice prodotto, il nome prodotto, la descrizione del prodotto da tutti i file XML in / cartella 1 / dove id fornitore x e id negozio = y
  • Restituisci tutto il codice prodotto e il prezzo del prodotto da tutti i file XML in / cartella 2 / dove ID fornitore = x e ID negozio = y
  • Potrebbe unirsi ai risultati delle due query precedenti, unendo il codice del prodotto
  • Poiché potrebbero esserci più risultati per codice prodotto per le due query precedenti, ottieni solo i valori più recenti basati su qualche tag / attributo nell'XML

UPDATE 2:

Sembra che questo articolo suggerisca che XQuery può essere utilizzato: link . Poiché sto implementando una soluzione LAMP, penso che potrebbero esserci librerie XQuery disponibili per PHP. Questo significa che non ho bisogno di un database XML per interrogare carichi di file XML?

    
posta ProgrammerNewbie 19.06.2014 - 00:05
fonte

2 risposte

2

Se la natura di tutte le query consente l'elaborazione sequenziale dei file XML, è possibile farlo senza un database XML, utilizzando xpath / xslt o XQuery. Ad esempio:

  • Return all the product code, product name, product description from all XML files in /folder 1/ where the supplier id = x and store id = y
  • Return all the product code and product price from all XML files in /folder 2/ where the supplier id = x and store id = y

Queste sono un'espressione xpath molto semplice per qualsiasi decente processore xslt. Devi solo scorrere i file specifici, caricarli in memoria, eseguire una query xpath e raccogliere i risultati da ciascun file (che xpath non fa per te). XQuery sembra consentire di raccogliere i risultati, ma vedi sotto.

  • Maybe join the results of the two queries above, joining on product code

Questo non è facilmente possibile con xpath only (almeno non molto efficiente). Dall'articolo a cui ci si è collegati, si può vedere un esempio di come XQuery viene eseguito da un join, senza un database, ma ha bisogno di caricare tutti i file XML nella memoria principale (cosa abbastanza irrealistica quando si hanno dieci milioni). Se hai ottenuto tutti i risultati dalle due prime due query, tuttavia, puoi "unirle" usando la tua lingua ospite (nel tuo caso PHP), ma devi "programmarlo manualmente". Un database XML decente, tuttavia, dovrebbe essere in grado di risolvere questi problemi per voi - senza caricare tutti i file in memoria, mediante indicizzazione corretta.

Quindi tutto si riduce alla domanda di quante query ci si aspetta, quante di esse consentono l'elaborazione sequenziale e quante no. Se si prevedono meno di 5 query diverse, probabilmente non utilizzerò un database per questo, ma cercherò di programmare manualmente ogni requisito non sequenziale. Se ti aspettano più di 100 domande diverse e non puoi nemmeno prevedere come saranno, allora l'uso di un database è probabilmente appropriato (ma YMMV). Alla fine devi scoprire da te cosa si adatta meglio alle tue esigenze.

    
risposta data 19.06.2014 - 08:00
fonte
0

Ho usato eXist-db per archiviare e interrogare molti file XML in diverse raccolte usando xquery ( link ). Ci sono molti modi per interfacciarlo e si è dimostrato affidabile per le mie applicazioni.

    
risposta data 17.07.2014 - 22:47
fonte

Leggi altre domande sui tag