Gå til innhold

Trenger hjelp med XML og Query FLOWR


Gjest

Anbefalte innlegg

Må være minst to stykker her inne som har hørt om XML nå da ;)

 

Jeg vet dessverre ikke løsningen på svaret over, men lurte på noe annet - relatert til XML/XQuery/XPath.

 

Har en XML fil (se under).

 

Spørsmålet er følgende: Finn personen(e) som er oppført flest ganger som forfatter/redaktør (author/editor).

 

Forsøkte først med å bruke XPath, men fikk det ikke helt til å virke.

Må sikkert ha en Query FLOWR spørring her. Den bør telle opp forekomster av identisk forfatter/redaktør og returnere den som er oppført flest ganger. Noen som kan hjelpe? :)

 

 

<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="file:textbook.rnc" type="compact"?>
<books xmlns="books">

   <book ISBN="i0321165810" publishername="OReilly">
       <title>XPath</title>
       <author>
           <name>
               <fname>Priscilla</fname>
               <lname>Warnley</lname>
           </name>
           <address>
               <street_address>Hill Park</street_address>
               <zip>90210</zip>
               <state>california</state>
           </address>
           <phone>00000000</phone>
           <e-mail>[email protected]</e-mail>
       </author>
       <editor>
           <name>
               <fname>Lisa</fname>
               <lname>Williams</lname>
           </name>
       </editor>
       <year>2007</year>
       <field>Databases</field>
       <TOC>
           <component>
               <type>Part</type>
               <title>Xpath</title>
               <component>
                   <title>Chapter... A tour of xquery</title>
                   <pages>3</pages>
                   <component>
                       <title>Introductions</title>
                   </component>
                   <component>
                       <title>Getting started</title>
                   </component>
               </component>
           </component>
       </TOC>
   </book>

   <book ISBN="i0321165812" publishername="OReilly">
       <title>XQuery</title>
       <editor>
           <name>
               <fname>Lisa</fname>
               <lname>Williams</lname>
           </name>
       </editor>
       <year>2003</year>
       <field>Databases</field>
       <TOC>
           <component>
               <type>Part</type>
               <title>Xpath</title>
               <component>
                   <title>Chapter... A tour of xquery</title>
                   <pages>3</pages>
                   <component>
                       <title>Introductions</title>
                   </component>
                   <component>
                       <title>Getting started</title>
                   </component>
               </component>
           </component>
       </TOC>
   </book>

   <publisher publishername="OReilly">
       <web-site>www.oreilly.com</web-site>
       <address>
           <street_address>hill park</street_address>
           <zip>90210</zip>
           <state>california</state>
       </address>
       <phone>400400400</phone>
       <e-mail>[email protected]</e-mail>
       <contact>
           <field>Databases</field>
           <name>
               <fname>Anna</fname>
               <lname>Smith</lname>
           </name>
       </contact>
   </publisher>
</books>

 

På forhånd,

tusen takk.

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+9871234

Takk for svaret, kgun, men det ser ikke ut til at bibelen din dekker XQuery FLOWR spørringer (kun det mest grunnleggende om XQuery teknologien).

Den dekker XQuery, men ikke XQuery FLOWR som jeg aldri har hørt om. Hva er det?

 

Boken diskuterer også en rekke XML parsere, så jeg antar at problemet ditt er enkelt om du takler dem. Det er år siden jeg leste den boken nesten fra perm til perm, så jeg kan ikke gi deg en rask løsning.

 

Google:

 

XML OR XPointer OR XLink OR XPath OR XML Schema kgun site:www.sitepoint.com

 

eller

 

XML OR XPointer OR XLink OR XPath OR XML Schema kgun site:www.webproworld.com

 

P.S.

For øvrig ser det ut til at HTML5 og CSS3 tar av og at XML teknologier devalueres når det gjelder webutvikling. For store firmaer som trenger streng dokument behandling er selvsag XML viktig.

Lenke til kommentar

FLOWR står for: For, let, order by, where, return. Spørringene minner litt om SQL, men virker generelt mer tungvindte og kompliserte å skrive.

 

For eksempel kan dette være en (enkel) spørring som finner forlag som har gitt ut bøker om databaser og programmering:

 

declare default element namespace "fagboksamling";
for $f in doc("fagbokdatabase.xml")//forlag
where $f/@forlagnavn = //bok[fagfelt='Programmering']/@forlagnavn
   and $f/@forlagnavn = //bok[fagfelt='Databaser']/@forlagnavn
return $f/data(@forlagnavn)

 

Har brukt en del tid på å finne relevante XQuery ressurser og ser at det finnes ikke så mange av dem. Men uheldigvis er det denne teknologien Universitetet i Bergen har valgt i det ene databasefaget sitt (INFO123), hvor det for tiden nærmer seg eksamen. Parseren som benyttes er Oxygen XML. Fungerer bra den, men gjør ikke en uerfaren programmerer så mye flinkere til å formulere kompliserte spørringer ;)

 

Så hvis noen andre har noen forslag så hadde jeg satt veldig pris på det :)

Endret av Gjest
Lenke til kommentar
Gjest Slettet+9871234

Er ikke XPath foretrukket fremfor XQuery?

 

Har du undersøkt om den enkleste parseren XMLReader

 

http://www.php.net/manual/en/book.xmlreader.php

 

kan hjelpe deg.

 

Merk også de andre XML parserne hvor DOM XML er mest generell og også bruker mest overhead om jeg husker riktig.

 

Ta også en rask titt nedover på denne

 

http://www.web2logistics.com/

 

siden som jeg laget for noen år tilbake.

 

Generelt, googler du

 

XML parser ...

 

får du sikkert mange treff. Der er en rekke native slike parsere.

 

For øvrig antar jeg at JavaScript bibiloteker http://javascriptlibraries.com/ som for eksempel jQuery kan hjelpe deg: http://jquery.com/

 

Utvikler du stier for mobile plattformer er dette http://zeptojs.com/ biblioteket kanskje en fordel, da det bruker mindre ressurser.

 

Personlig ville jeg begynt med http://api.jquery.com/jQuery.parseXML/

 

og sett have som kan gjøres med jQuery.

 

Google: jquery xml

 

for ytterligere informasjon.

 

Dernest ville jeg prøvd enkle PHP parsere som XMLreader.

Endret av Slettet+9871234
Lenke til kommentar

Takk for tipsene, men jeg er godt fornøyd med Oxygen parseren. Trenger bare litt hjelp til å formulere en FLOWR spørring (fortrinnsvis hjelp fra et menneske som vil kunne forklare hvorfor det er slik), som jeg kan kjøre i parseren (mot det vedlagte XML dokumentet i den første posten). Teknologien som er pensum er XQuery 1.0.

 

Har som sagt et begrenset pensum jeg må lære meg før eksamen, så å se på mobil utvikling får jeg heller gjøre når det er ferietid ;)

 

Gitt at det er mulig å formulere en spørring via XPath er det og foretrekke. Men for mer komplekse spørringer, der XPath ikke er i stand til å gjøre jobben, er det naturlig å ta i bruk XQuery. XPath er en del av XQuery, og XQuery utvider XPath.

Lenke til kommentar
Gjest Slettet+9871234

Gitt at det er mulig å formulere en spørring via XPath er det og foretrekke. Men for mer komplekse spørringer, der XPath ikke er i stand til å gjøre jobben, er det naturlig å ta i bruk XQuery. XPath er en del av XQuery, og XQuery utvider XPath.

Siden det er mange år siden jeg var borti dette stoffet har du kanskje rett. Men jeg trodde:

  1. XPath kan gjøre stort sett det samme som XQuery.
  2. XPath er den teknologien det satses på.
  3. XPath 2.0 http://www.w3.org/TR/xpath20/ er en generalisering.

 

Men siden jeg jobbet med dette kan ting ha endret seg og muligens er siste versjon av XQuery en supermengde av XPath i dag.

 

For øvrig var (er?) XPath + XPointer ment å passe som hånd i hanske. Jeg vet ikke om det samme kan sies om XQuery. Dersom jeg husker riktig, bruker man noen ganger XPath til å følge en sti til målet angitt ved XPointer.

 

Få eller ingen nettlesere jeg vet om har satset på XML sin lenke teknologi XLink.

 

Egentlig synd da den åpner for ekte transklusjon http://en.wikipedia.org/wiki/Transclusion.

Endret av Slettet+9871234
Lenke til kommentar

@kgun

xml-parser for php, jquery xml-parser og html5, hva har det med XQuery å gjøre? Strengt tatt kunne denne tråden stått i hvilket som helst underforum i programmeringsforumet.

 

 

Har dessverre ikke løsningen da jeg er helt fersk i XQuery selv.

 

 

xquery version "1.0";

<books>
{
for $book in (doc("books.xml")/books/book)
let $author:=concat($book/author/name/fname/text(), " ",$book/author/name/lname/text())
let $editor:=concat($book/editor/name/fname/text(), " ",$book/editor/name/lname/text())

return
element person
{
	element author {$author},
	element editor {$editor}
}
}
</books>

Koden over gir dette resultatet:

 

<?xml version="1.0" encoding="UTF-8"?>
<books>
  <person>
     <author>Priscilla Warnley</author>
     <editor>Lisa Williams</editor>
  </person>
  <person>
     <author> </author>
     <editor>Lisa Williams</editor>
  </person>
</books>

 

Det du vil ha er altså Lisa Williams. Prøv å få alle editor'ene og author'ene inni én sekvens. Deretter bruke count() på hver item i sekvensen for å se hvor mange ganger item'en (dvs personen) forekommer. Deretter kan du bruke max() for å finne høyeste verdi, eller sortere de etter count(), også hente ut siste. Si fra om du får det til :)

 

Kom over en link med en som prøver å gjøre noe tilsvarende der Michael Kay himself svarer: http://www.x-query.com/pipermail/talk/2006-August/001636.html

Lenke til kommentar
Gjest Slettet+9871234

@kgun

xml-parser for php, jquery xml-parser og html5, hva har det med XQuery å gjøre? Strengt tatt kunne denne tråden stått i hvilket som helst underforum i programmeringsforumet.

Ja hvorfor tror du jeg skrev det jeg skrev? Opprinnelig post der det spurtes etter XML teknologier ble slettet.

Lenke til kommentar

@kgun

xml-parser for php, jquery xml-parser og html5, hva har det med XQuery å gjøre? Strengt tatt kunne denne tråden stått i hvilket som helst underforum i programmeringsforumet.

Ja hvorfor tror du jeg skrev det jeg skrev? Opprinnelig post der det spurtes etter XML teknologier ble slettet.

Var jeg som startet opprinnelig post, så jeg har sett hele tråden før første delen ble slettet av mod. Så ingen relevans til HTML5 og XML-parsing med php og jquery.

 

 

OT: det finnes enklere måter å løse det på enn den koden min fra igår. Hint er at xpath'en doc("books.xml")//name henter navn uavhengig av om navn er en author eller editor. Se også på funksjonen deep-equal() som kan sammenligne en gruppe av elementer med en annen gruppe av elementer.

Lenke til kommentar
Gjest Slettet+9871234

Var jeg som startet opprinnelig post, så jeg har sett hele tråden før første delen ble slettet av mod. Så ingen relevans til HTML5 og XML-parsing med php og jquery.

Det er det jo lett å påstå nå når hele diskusjonen i denne tråden er usemantisk. Opprinnelig tråd omhandlet en tema om xml teknologier. Jeg oppfattet det som et forslag til en levende tråd analogt med denne:

 

https://www.diskusjon.no/index.php?showtopic=800754

 

Det er ikke et stor poeng for meg, men jeg skal være mer varsom neste gang jeg poster i en ny tråd :roll:

Lenke til kommentar

Takk for svaret MikkelRev, så ikke notify før nå, sikkert fordi spørsmålet ble flyttet. Fikk til et svar som ga den første med høyeste count, men skal ta en ny titt på det før eksamen :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...