Strings(Zeitangaben) nach integer konvertieren und in Millisekunden umwandeln mittels Xpath?

Hallo,

kann jemand helfen? Ich habe hier eine Aufgabenstellung, die ich so nicht gelöst bekomme. Vielleicht ist ja jemand bereits mir Tipps/Ansätze(auch Antworten sind erwünscht) zu geben:

Aufgabe ist es Zeitangaben(in der Form HH:MM:SS:SSS(SSSS für milisekunden) vom string in integer und dann in Milisekunden umzuwandeln.

  • 0.444 → 444 (0 * 1000 + 0.444 * 1000)
  • 12.23 → 12230 (12 * 1000 + 0.23 * 1000 + 0.0 * 1000)
  • 12:46 → 766.000 (12 * 60 * 1000 + 46 * 1000 + 0.0 * 1000)
  • 01:53:23 → 6803000 (1 * 60 * 60 * 1000 + 53 * 60 * 1000 + 23 * 1000 + 0.0 * 1000)
  • 01:53:23.123 → 6803123 (1 * 60 * 60 * 1000 + 53 * 60 * 1000 + 23 * 1000 + 0.123 * 1000)

Hier die Aufgabe: Dafür muss der String vom Typ

DurationType

jedoch erst einmal in seine Komponenten (Stunden, Minuten, Sekunden, Millisekunden) zerlegt werden. Dies lässt sich mit der XPath 2.0 Funktion

tokenize

oder (vielleicht besser) der XPath 3.1 Funktion

analyze-string

erledigen. Da nicht klar ist, ob Stunden und/oder Minuten mit angegeben wurden, muss außerdem eine Art Fallunterscheidung vorgenommen werden, hierzu bietet XPath ab 2.0 eine

if-then-else

-Expression an. Um die Verarbeitung zu vereinfachen, kann außerdem mit der [

let

-Expression(https://www.w3.org/TR/xpath-31/#id-let-expressions) eine/mehrere Variable/n definiert werden, die später im Ausdruck wieder verwendet werden können.

Schreiben Sie also einen (zugegebenermaßen komplizierten), XPath 3.1-Ausdruck, der einen String – in der Form unseres

DurationType

Datentyps – in die entsprechende Anzahl von Millisekunden umwandelt. xmllint unterstützt XPath 3.1 leider nicht, verwenden Sie deshalb das bewährte Online-Tool XPath-Tester.

Aufgabe2)Schreiben Sie also einen XPath-Ausdruck, der einen Zahl (welche die Anzahl von Millisekunden repräsentiert), in die Ausgangsform (01:52:12.2222 oder ähnliches) zurückwandelt.Hierzu müssen Sie die Berechnungen aus Aufgabe 1 rückgängig machen. Nutzen Sie für die Berechnung der einzelnen Teile (Stunden, Minuten, Sekunden, Millisekunden) die Operatoren

div

und

mod

, sowie die XPath-Funktion

floor

. Zum Zusammensetzen können. Sie die XPath-Funktion

string-join

verwenden.

Aufgabe 3: Nutzen Sie den XPath-Ausdruck aus Aufgabe 1 um aus den Dauern der einzelnen Kapitel einer Episode (

episode/chapter/@duration

) die Startzeit des jeweiligen Kapitels (d.h., die Summe der Dauern der vorhergehenden Kapitel) zu berechnen. Nutzen Sie den XPath-Ausdruck aus Aufgabe 2 um die errechneten Startzeiten wieder in unser

DurationType

-Format umzuwandeln. (Ich brauche hier nur den Ansatz um Summen mit dem XPATH Ausdruck aus Aufgabe 1 zu berechnen

...zum Beitrag
<?xml version="1.0" encoding="UTF-8"?> 
<podcast     xmlns="https://www.mein-podcast.de/"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="https://www.mein-podcast.de/ podcast.xsd"     xmlns:poc="https://www.mein-podcast.de/poc"   xmlns:pc="https://www.mein-podcast.de/"     url="https://forschergeist.de/">      <title>Forschergeist</title>      <persons>         <person pid="tp" gender="male">Tim Pritlove</person>         <person pid="rita_adrian" gender="female">Rita Adrian</person>         <person pid="peter_purgathofer" gender="male">Peter Purgathofer</person>         <person pid="justus_haucap" gender="male">Justus Haucap</person>         <person pid="oliver_parodi" gender="male">Oliver Parodi</person>         <person pid="alina_kokoschka" gender="female">Alina Kokoschka</person>         <person pid="lisarosa" gender="female">Lisa Rosa</person>     </persons>      <episode episode="73" title="Klimawandel in Seen" date="2019-11-19T19:35:00" url="https://forschergeist.de/podcast/fg073-klimawandel-in-seen/" duration="01:23:14">         <contributor pid="tp" role="host"/>         <contributor pid="rita_adrian" role="guest" />          <chapter number="1" duration="00:41" title="Intro" />         <chapter number="2" duration="01:14" title="Begrüßung" />         <chapter number="3" duration="04:41" title="Leibniz-Institut für Gewässerökologie und Binnenfischerei " />         <chapter number="4" duration="02:35" title="Persönlicher Werdegang" />         <chapter number="5" duration="04:44" title="Wissenschaftskultur in den USA" />         <chapter number="6" duration="06:34" title="Das Ökosystem der Binnenseen" />         <chapter number="7" duration="15:04" title="Langzeitbeobachtung der Seen" />         <chapter number="8" duration="12:46" title="Erkenntnisse aus den Messungen" />         <chapter number="9" duration="08:27" title="Veränderungen durch den Klimawandel" />         <chapter number="10" duration="03:10" title="Erforderliche Maßnahmen" />         <chapter number="11" duration="11:52" title="Wissenschaftliche Arbeit im IPCC" />         <chapter number="12" duration="10:02" title="Datenmanagement" />         <chapter number="13" duration="01:06" title="Ausklang" />         <poc:transcript>           <poc:segment>           </poc:segment>         </poc:transcript>     </episode>
...zur Antwort

Klar sollte man Vorlesung und Übung besuchen, wenn man es braucht, bisher ist es aber so, dass er die Übungen nicht besucht (und sich alles selbst aneignet). Ist manchmal mühesam für ihn, aber er sagt, dass er bei Problemen entweder a)Internet benutzt (oder Foren etc.) oder aber einen Tutor, der sich mit der Thematik auskennt fragt. Ist bisher ganz gut damit gefahren und hat die Übungsblätter laut Dozent gut-sehr gut gemeistert8Es gibt bei uns einen Lernraum, wo man seine Antworten zu den Fragen/Übungsaufgaben hochlädt und der Dozent korrigiert dann diese)

Falls es wenn interessiert, es geht um einen Programmierkurs(XSLT) und auch um XML(auber auch xml schema sprache).

...zur Antwort

Vielen Lieben Dank für die Antworten, die haben mir schon sehr weitergeholfen.

Ich habe nun die Antworten selbst aufgeschrieben

1) Frage:Vorteil: Ermöglicht zwar einen sehr schnellen Zugriff auf die Datei, da man vonder Anfangsadresse der Datei nur einen Wert N addieren muss, umzur Position N innerhalb der Datei zu gelangen. Nachteil: Allerdings ist eine Vergrrößerungder Datei evtl. aufw ̈andig, falls es am Ende der Datei keine freien Bl ̈ockemehr gibt, und die gesamte Datei umkopiert werden muss. Zudem tritt das Problem der Fragmentierung auf, d.h. man hat evtl. viel freien Speicher zur Verfügung, aber eine große Datei lässt sich trotzdem nicht speichern, da der freie Speicher auf nicht zusammenhängende Blöcke verteilt ist.

2) Frage: Vorteil:löst zwar dasProblem der Dateierweiterung und der Fragmentierung, da man jetzt jeden freien Block problemlos nutzen kann, jedoch ist z.B. der Sprung ans Ende einer großen Datei (z.B. bestehend aus 10.000 Bl ̈ocken) sehr aufw ̈andig,da man erst 10.000 Zeiger entlang laufen muss, um an das Dateiende zukommen.

Ich denke, dass sollte als Antwort ausreichen, korrigiert mich aber bitte, falls was falsch sein sollte.

...zur Antwort