Gå til innhold

Anbefalte innlegg

Hei!

 

Jeg har følgende spørringer som jeg trenger hjelp til:

 

"Finn platene som inneholder flest spor",

"Finn tittelen på plater med flere versjoner av samme verk",

"Finn opphavet til "blabla", det vil si det opprinnelige/første versjonen av verket",

"Finn plater der alle sporene inneholder versjoner av hverandre".

 

Er det noen som har noen maler på hvordan disse spørringene kan løses?

Lenke til kommentar
Videoannonse
Annonse

Det er helt umulig å hjelpe deg uten å se Xml Schema eller i det minste et eksempel-dokument.

 

Edit: ved nærmere ettersyn ser jeg at spørringene dine er av en karakter som ikke så enkelt kan løses med xpath... Xpath har ingen formening om hva "samme verk" er eller "opphav" i denne konteksten. Xpath er et språk for å velge noder i et xml-dokument som ikke egner seg for å gjøre semantiske betraktninger.

Endret av steingrim
Lenke til kommentar
Det er helt umulig å hjelpe deg uten å se Xml Schema eller i det minste et eksempel-dokument.

 

Edit: ved nærmere ettersyn ser jeg at spørringene dine er av en karakter som ikke så enkelt kan løses med xpath... Xpath har ingen formening om hva "samme verk" er eller "opphav" i denne konteksten. Xpath er et språk for å velge noder i et xml-dokument som ikke egner seg for å gjøre semantiske betraktninger.

 

Stemmer!

 

Rekursjon er vel et stikkord her.

Lenke til kommentar

Her er xml-dokumententet:

 

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="style.xsl"?>

 

<skjema>

<plate katalognummer="BCM0644">

<artist>Kent</artist>

<tittel>Blue</tittel>

<dato>2008</dato>

<selskap>Sony</selskap>

<format>album</format>

 

<alleSporene>

<spor>

<verk>V123456</verk>

<spilletid>05.01.09</spilletid>

</spor>

<spor>

<verk>'Valdresmarsjen'</verk>

<spilletid>08.01.09</spilletid>

</spor>

</alleSporene>

</plate>

 

<plate katalognummer="BCM0643">

<artist>M2M</artist>

<tittel>Red</tittel>

<dato>2008</dato>

<selskap>Sony</selskap>

<format>album</format>

 

<alleSporene>

<spor>

<verk>V123456</verk>

<spilletid>08.01.09</spilletid>

</spor>

<spor>

<verk>jazz</verk>

<spilletid>05.01.09</spilletid>

</spor>

<spor>

<verk>rock</verk>

<spilletid>02.01.09</spilletid>

</spor>

</alleSporene>

</plate>

 

<plate katalognummer="BCM0642">

<tittel>Green</tittel>

<artist>Kent</artist>

<dato>2008</dato>

<selskap>BMG</selskap>

<format>singel</format>

 

<alleSporene>

<spor>

<verk>pop</verk>> <spilletid>08.01.09</spilletid>

</spor>

</alleSporene>

</plate>

 

<plate katalognummer="BCM0641">

<tittel>Pink</tittel>

<artist>Carola</artist>

<dato>2008</dato>

<selskap>BMG</selskap>

<format>ep</format>

 

<alleSporene>

<spor>

<verk>sannaVenner</verk>

<spilletid>08.01.09</spilletid>

</spor>

<spor>

<verk>sannaVenner</verk>

<spilletid>03.01.09</spilletid>

</spor>

<spor>

<verk>sannaVenner</verk>

<spilletid>00.51.09</spilletid>

</spor>

</alleSporene>

</plate>

 

<plate katalognummer="BCM0640">

<tittel>Black</tittel>

<artist>Carola</artist>

<artist>Kent</artist>

<dato>2008</dato>

<selskap>BMG</selskap>

<format>ep</format>

 

<alleSporene>

<spor>

<verk>Valdresmarsjen</verk>

<spilletid>11.01.09</spilletid>

</spor>

<spor>

<verk>sannaVenner</verk>

<spilletid>03.01.09</spilletid>

</spor>

<spor>

<verk>sannaVenner</verk>

<spilletid>00.51.09</spilletid>

</spor>

</alleSporene>

</plate>

 

 

<AlleVerk>

<verk id="V123456">

<tittel>Holbergsuiten</tittel>

<remix>

<versjonverk>

<tittel>sol</tittel>

</versjonverk>

</remix>

</verk>

<verk id="'Valdresmarsjen">

<tittel>Valdresmarsjen</tittel>

<remix>

<versjonverk>

<tittel/>

</versjonverk>

</remix>

</verk>

<verk id="jazz">

<tittel>Jazz</tittel>

<remix>

<versjonverk>

<tittel/>

</versjonverk>

</remix>

</verk>

<verk id="rock">

<tittel>Rock</tittel>

<remix>

<versjonverk>

<tittel/>

</versjonverk>

</remix>

</verk>

<verk id="pop">

<tittel>Pop</tittel>

<remix>

<versjonverk>

<tittel/>

</versjonverk>

</remix>

</verk>

<verk id="sannaVenner">

<tittel>Sanna Venner</tittel>

<remix>

<versjonverk>

<tittel/>

</versjonverk>

</remix>

</verk>

</AlleVerk>

 

<artistNavn>

<artist artist="Kent">

<medlem>

<navn>Kent</navn>

<instrument>gitar</instrument>

<startet>2000</startet>

<sluttet/>

</medlem>

<medlem>

<navn>Bernt</navn>Bernt <instrument>piano</instrument>

<startet>2000</startet>

<sluttet/>

</medlem>

</artist>

<artist artist="M2M">

<medlem>

<navn>Marit Larsen</navn>

<instrument>Gitar</instrument>

<startet>2000</startet>

<sluttet>2006</sluttet>

</medlem>

<medlem>

<navn>Marion Ravn</navn>

<instrument>Piano</instrument>

<startet>2000</startet>

<sluttet>2006</sluttet>

</medlem>

</artist>

<artist artist="Carola">

<medlem>

<navn>Carola</navn>

<instrument/>

<startet>1990</startet>

<sluttet/>

</medlem>

</artist>

</artistNavn>

</skjema>

 

 

Trenger hjelp til å hente ut følgende informasjon ved bruk av XPath:

 

- Artister som har spilt inn både 'Holbergsuiten' og 'Valdresmarsjen'.

- Plateartister som har gitt ut plater på alle plateselskapene.

- Tittelen på plater med flere versjoner av samme verk.

- Plater der alle sporene er versjoner av hverandre.

Lenke til kommentar
Hei!

 

Jeg har følgende spørringer som jeg trenger hjelp til:

 

"Finn platene som inneholder flest spor",

"Finn tittelen på plater med flere versjoner av samme verk",

"Finn opphavet til "blabla", det vil si det opprinnelige/første versjonen av verket",

"Finn plater der alle sporene inneholder versjoner av hverandre".

 

Er det noen som har noen maler på hvordan disse spørringene kan løses?

 

"Finn platene som inneholder flest spor",

Her er en mulig løsning:

 

//plate[count(./alleSporene/spor) = //max(plate/count(./alleSporene/Spor))]/@katalognummer

 

Vet ikke hvordan de andre skal løses. :p

Lenke til kommentar
Hei!

 

Jeg har følgende spørringer som jeg trenger hjelp til:

 

"Finn platene som inneholder flest spor",

"Finn tittelen på plater med flere versjoner av samme verk",

"Finn opphavet til "blabla", det vil si det opprinnelige/første versjonen av verket",

"Finn plater der alle sporene inneholder versjoner av hverandre".

 

Er det noen som har noen maler på hvordan disse spørringene kan løses?

 

"Finn platene som inneholder flest spor",

Her er en mulig løsning:

 

//plate[count(./alleSporene/spor) = //max(plate/count(./alleSporene/Spor))]/@katalognummer

 

Vet ikke hvordan de andre skal løses. :p

 

 

 

Forresten: Er det noen som kan hjelpe med dette. Lag en html-oversikt over platene, med plateartister, tittel og årstall. Sorter primært med hensyn på årstall, nyeste først, sekundert på artist og til slutt artist.

 

Vi får bare opp bakgrunnsfargen og hr/.

 

declare default element namespace

"http://www.w3.org/1999/xhtml";

declare namespace p="skjema";

declare namespace h="here";

<html>

 

<head><title>Platesamling</title></head>

<body bgcolor="red">

<hr/>

 

{

for $plate in fn:doc("selskap.xml")/p:skjema/p:plate

order by $plate/p:dato descending, p:spor/artist, $plate/p:tittel

return ($plate/p:dato/text(),(","), data($plate//p:spor/artist), (","), $plate/p:tittel/text(),(","))

}

</body>

</html>

Endret av rogi
Lenke til kommentar

Hvis du i XML filen legger til følgende attributt:

<skjema xmlns = "skjema">

 

og i xquery fila gjør følgende forandringer:

declare default element namespace "skjema";

 

 

Tror det vil fungere da..

ps. Husk å fikse på prefiksene i selve spørringene også :)

 

Jeg klarte ikke dy meg.. Nedenfor ser du hvordan det kan gjøres..

 

 

 

Grunnen til $plate/artist[1] er at du kan ikke sortere på flere verdi samtidig. Nå blir det kun sortert på den første artisten som opptrer på platen.

 

 

declare default element namespace "skjema";

<html>

 

<head><title>Platesamling</title></head>

<body bgcolor="red">

<hr/>

<ul>

{

for $plate in fn:doc("skjema.xml")/skjema/plate

order by $plate/dato descending, $plate/artist[1], $plate/tittel

return <li> { $plate/dato/text(), " - ", fn:distinct-values($plate/artist), " - ", $plate/tittel/text()} </li>

}

</ul>

</body>

</html>

 

 

Endret av Wumpus
Lenke til kommentar

Ja.. Men strengt tatt så bør dere vel gjøre de obligatoriske oppgavene deres selv ;)

 

 

Tips - Dropp XPath i de spørringene, det er noe enklere i XQuery...

 

edit:

Jeg er et svakt menneske..

 

I XML filen deres så har dere ikke noe som kan knytte verk med spor, på denne måten er det heller vanskelig å koble disse to og sjekke om det er samme/en annen versjon..

Endret av Wumpus
Lenke til kommentar
Ja.. Men strengt tatt så bør dere vel gjøre de obligatoriske oppgavene deres selv ;)

 

 

Tips - Dropp XPath i de spørringene, det er noe enklere i XQuery...

 

edit:

Jeg er et svakt menneske..

 

I XML filen deres så har dere ikke noe som kan knytte verk med spor, på denne måten er det heller vanskelig å koble disse to og sjekke om det er samme/en annen versjon..

 

Strengt tatt burde vi det. Vi prøver og prøver men får det ikke til :)

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...