PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HTML-Elemente auslesen/nicht auslesen


mattfi
04.12.2005, 15:33:55
Hallo ForumsteilnehmerInnen,

bin ziemlich unbedarft, was PHP anbelangt, und bitte daher um Hilfe. Ich möchte folgendes realisieren, und zwar in der jeweils aktuell aufgerufenen Datei. Diese soll, an einer Stelle "x" im <body>, Glossardaten enthalten, die ich vereinfacht einmal so darstellen möchte:

<dl>
<td lang="de">Term X</td>
<dd class="def">Definition von Term X</dd>
<dd class="source">Quelle zum Eintrag</dd>
</dl>

Jede Datei enthält genau eine <dl> mit genau einer Abfolge von Einträgen wie oben dargestellt.

Ich möchte nun prüfen, ob es sinnvoll ist, die HTML-Daten vor der Ausgabe mit PHP (v.4) wie folgt zu transformieren:
<dl> --> <table><tr> + weiter hinten entspr. Schlusstags;
<td lang="de"> --> <td>Deutsch:</td><td>Term X</td>
<dd class="def"> --> <td>Definition:</td><td>Definition von Term X</td>
<dd class="source"> --> gar nicht darstellen.

Am liebsten wäre es mir, der Skriptteil wäre ein von der Termliste getrennter Bereich (davor? dahinter?) in der Datei.

Wenn es sinnvoll ist, das mit PHP zu machen, wie muss ich vorgehen? Kann mir bitte jemand helfen?

Im Voraus vielen Dank für alle nützlichen Tipps.

|Coding
04.12.2005, 15:49:05
OK, ähm...?

Sorry aber was möchtest Du da realisieren?
Ich kann nicht nachvollziehen, was Du vor hast.

feuervogel
04.12.2005, 16:04:30
Wenn es sinnvoll ist, das mit PHP zu machen, wie muss ich vorgehen? Kann mir bitte jemand helfen?

Im Voraus vielen Dank für alle nützlichen Tipps.

lesen schadet nie:

http://tut.php-q.net/
http://www.php-faq.de/

mattfi
04.12.2005, 18:01:58
Was möchte ich machen? Folgendes:

1) Ich möchte ein mehrsprachiges Fachglossar realisieren.
Siehe auch: http://www.fachterminologie.info/Glossar/Fachglossar-Technik.php.
Das Glossar soll nicht DB-basiert sein. Ich möchte einen Eintrag pro Seite listen (Testeintrag: "Fertigungstechnik").
2) Ich unterrichte Fachsprache Technik (Italienisch) an einem Sprachen- und Dolmetscherinstitut. Mit dem Online-Glossar will ich meinen StudentInnen die Möglichkeit geben, die für die Klausuren relevante Terminologie sachgerecht aufbereitet zu finden. Ich will ihnen aber auch nicht ein fertiges Glossar übergeben, sodass sie ohne Recherche auskämen. Also: einzelne Einträge und Zusammensammeln des Glossars durch die StudentInnen, und dabei ein bisschen was aufschnappen für die Klausur. Soweit Grund Nr. 1. Grund Nr. 2: Ich will möglichst viele Seiten anlegen, die für Suchmaschinen relevant sind. Evtl. Keywords pro Eintrag gesondert pflegen etc., da ich gerne auch Leute außerhalb meines Instituts, zum Beispiel Technische Redakteure und FachübersetzerInnen in den Unternehmen erreichen würde. Ob das so gelingt, weiß ich nicht. Grund Nr. 3: Glossarklau ist eine verbreitete Sache im Internet, man merkt es, wenn man mit "define:[Suchbegriff]" googelt. Da findet man manchmal 16mal denselben Eintrag. Also Informationen splitten, was das Zeug hält.
3) Ich habe mir ein Datenmodell überlegt, das eine Kompatibilität mit Termbase-Software-Exporten (zum Beispiel als TBX-Format) nicht grundsätzlich ausschließt. Andererseits will ich sehr viel einfacher strukturieren als Termbase-Software dies normalerweise tut. Dazu schwebt mir ein Datenmodell vor, das aus einem <dl>-Eintrag pro Term besteht. Damit kann ich später einmal, sollte es jemals erforderlich werden, per XSL die einzelnen Einträge auslesen und mit ihnen was auch immer anstellen.
Vorerst dient mir das <dl>-Element als Container für alle Untereinträge des Term-Eintrags, z.B.:
<dl>
<dt lang="de"></dt>
<dt lang="en"></dt>
<dt lang="it"></dt>
...
<dd class="def"></dd>
<dd class="note"></dd>
<dd class="source-de"></dd>
...
</dl>

Ein vernünftiger Termeintrag enthält immer eine Definition, und immer Quellenangaben zum ausgangs- und den zielsprachlichen Einträgen sowie der Definition.
Die Quellen will ich im Internet ausblenden.
Eventuell möchte ich parametergesteuert nur zwei Informationen auf einmal ausgeben, z.B. wahlweise Eintrag DE + Definition, oder Eintrag DE + Eintrag EN etc. Je nach Resonanz der Webseite ließe sich so etwas einmal mit einer Benutzerverwaltung kombinieren.

----
Soweit meine Zielsetzungen. Ich hoffe, ich habe nichts vergessen, und ich habe mich nicht zu verklausuliert ausgedrückt.

feuervogel
04.12.2005, 18:14:14
und wo sind nun die konkreten probleme und/oder fragen bezüglich php?

mattfi
04.12.2005, 18:24:55
Na konkret, dachte ich, wären die folgenden Fragen:
(1) Ist PHP dafür geeignet? (Es ist, wenn ich recht verstanden habe, eine Skriptsprache, keine objektorientierte Sprache wie XSL.)
(2) Wie macht man das? (Ich mag mich zwar grundsätzlich etwas auskennen, aber von Programmieren verstehe ich ungefähr soviel wie von Mondlandungen...)

Vielleicht für den Anfang soviel: Wie stelle ich es an
(1) aus einem <dt>-Element eine zweispaltige Tabellenzeile + vordefiniertem Text in der ersten Spralte (Zelle) zu generieren, und das <dt>-Element rauszuschmeißen?
(2) alle <dd>-Einträge, die nicht "class=def" | "class=note" sind, bei der Ausgabe serverseitig auszublenden?

feuervogel
04.12.2005, 19:27:45
Na konkret, dachte ich, wären die folgenden Fragen:
(1) Ist PHP dafür geeignet? (Es ist, wenn ich recht verstanden habe, eine Skriptsprache, keine objektorientierte Sprache wie XSL.)
PHP ist genau so dafür geeignet wie python, perl, ruby, java, usw usf. auch mit php lässt sich ein wenig objektorientiert programmieren.

(2) Wie macht man das? (Ich mag mich zwar grundsätzlich etwas auskennen, aber von Programmieren verstehe ich ungefähr soviel wie von Mondlandungen...)
man kauft sich ein buch und/oder nimmt sich eines der zahlreichen tutorials die es im internet gibt und liest sie bzw. arbeitet sie durch.

falls dabei probleme auftreten und es fragen gibt, kann man diese unter anderem hier stellen.

meikel (†)
04.12.2005, 19:35:05
Das Glossar soll nicht DB-basiert sein.
Das ist sinnfrei.

Vorerst dient mir das <dl>-Element als Container für alle Untereinträge des Term-Eintrags,
z.B.:
<dl>
<dt lang="de"></dt>
<dt lang="en"></dt>
<dt lang="it"></dt>
Das ist schon eine Datenbank. Dann solltest Du auch das dazu passende DBMS dazu verwenden.

Da die Verfügbarkeit von kostenlosen DBMS mit XML-Ausgabe gegen Null geht, solltest Du Dich mit SQL basierten DBMS beschäftigen. Da der Client eh nur HTML versteht, kannste Dir dann die Bogenfahrten über XML/XSL eigentlich schenken.

mattfi
04.12.2005, 20:23:48
Hmm... DBMS?

Vom Praktischen her bedeutet es aber, da ich für die Zurverfügungstellung eines solchen Glossars kein Geld bekomme, dass ich in meiner Freizeit nicht ein Tutorial (nämlich PHP), sondern derer gleich zwei (nämlich PHP und SQL) durcharbeiten muss.

Für einen Nichtprogrammierer eigentlich eine ganz schöne Herausforderung.

Welche(n) Vorteil(e) hätte es, das ganze nicht File-basiert, sondern DBMS-basiert abzulegen?

meikel (†)
04.12.2005, 20:40:08
Hmm... DBMS?
Google macht wohl Betriebsferien?

Welche(n) Vorteil(e) hätte es, das ganze nicht File-basiert, sondern DBMS-basiert abzulegen?
Für Dich hat das keinen Vorteil, weil Du nicht programmieren kannst und es Dir offenbar zu zeitaufwendig ist, Dir die für Dein Vorhaben erforderlichen Kenntnisse anzueignen.

mattfi
04.12.2005, 21:09:13
"Hmm..." bezog sich nicht darauf, was ein DBMS ist, sondern was es mir bringt / kostet.

Ich denke mal, die folgende Frage ist auch in einem Programmierer-Forum zulässig, wenn man den Gesamtkontext meines Projektes betrachtet. Ich frage jedenfalls nicht aus Faulheit, sondern weil ich nach einem Weg suche, wie ich das Projekt überhaupt stemmen kann.

Also hier die Frage: Wenn ich es ganz primitiv angehe, dann habe ich z.B. eine MySQL-DB mit 9 Feldern. Für jede weitere Zielsprache, die ich für mein Glossar hinzunehme, kömmen 2 Felder hinzu (zielsprachlicher Term + Quelle).
Außerdem bracuhe ich ein PHP-Skript, das 5 der 9 Felder ausliest, plus ein Eingabeformular für alle 9 Felder.

Nachteil ggn.über dem <dl>-Modell: dort kann ich (mit weniger Aufwand?) für eine Sprache auch beliebige viele <td lang="xy">-Einträge (also Synonyme) anlegen.

Ich habe mal gegoogelt und folgendes gefunden:
http://softgalaxy.net/php-mysql/index.html

Meine Erfahrung hat gezeigt, dass es mit solchen Skripten Probleme gben kann, die an meiner Unbedarftheit in Sachen Programmierung liegen. (Zum Beispiel bei dem Menü von http://www.fachterminologie.info; unterschiedliche Menschen sind unterschiedlich gestrickt, das hat wohl nix mit Faulheit zu tun.)

Frage: Ich würde (Dienstag oder Mittwoch) versuchen, das Skript herunterzuladen und zum Gehen zu bringen. Ich bin mir ziemlich sicher, dass ich ziemlich schnell für eure Verhältnisse relativ dumme ("sinnfreie") Fragen stellen werden muss. Ich würde euch dann gerne um eure Hilfe bitten. Ok?

feuervogel
04.12.2005, 23:02:17
du sagst selbst, dass du nicht programmieren kannst, willst aber etwas anscheinend ohne größeren zeit- und/oder geldaufwand aufbauen? findest du das nicht ein wenig...seltsam?

zweitens: ja, wenn du endlich mal konkrete fragen bezüglich php und/oder mysql hast, kannst du diese hier gerne stellen, bedenke aber, dass wir kein support-team von irgendwelchen scripten von dritten sind ;-)

mattfi
05.12.2005, 00:20:50
Vielleicht für den Anfang soviel: Wie stelle ich es an
(1) aus einem <dt>-Element eine zweispaltige Tabellenzeile + vordefiniertem Text in der ersten Spalte (Zelle) zu generieren, und [die Tags des] <dt>-Element[s] rauszuschmeißen?
(2) alle <dd>-Einträge, die nicht "class=def" | "class=note" sind, bei der Ausgabe serverseitig auszublenden?

Sprich: Wie lese ich mit PHP den Inhalt von genau den Elementen mit genau den Attributwerten aus?
Wie gebe ich das Ganze als Tabelle(nzeile) wieder -- mit "echo" oder "print"?

meikel (†)
05.12.2005, 00:35:26
Sprich: Wie lese ich mit PHP den Inhalt von genau den Elementen mit genau den Attributwerten aus?
Wie gebe ich das Ganze als Tabelle(nzeile) wieder -- mit "echo" oder "print"?
http://develnet.org/316.html

Simplizität
From: Rainer HuebenthalNewsgroups: de.comp.lang.php.miscSubject: Re: Verzeichnisbaum erstellenDate: Wed, 10 Nov 2004 07:10:57 +0100

Moin Frank Eblinger, du schriebst:

> kennt jemand eine Möglichkeit, einen bestehenden Verzeichnisbaum zu
> kopieren, allerdings ohne die enthaltenen Dateien, also nur die Struktur?

Ja, man schreibt sich ein script, das genau dieses tut.

cu
Rainer

mattfi
05.12.2005, 20:24:41
Danke für den gut gemeinten Tipp, meikel, ich habe versucht die Seiten durchzuarbeite. Hier ist, was ich verstanden habe:

train station
gare du chemin de fer
stazione ferroviaria
železnička stancija
железнодорожный вогзал

Bahnhof.

xabbuh
05.12.2005, 20:32:41
Bring dir doch erst einmal die Grundlagen mit Hilfe eines Tutorials (http://tut.php-q.net) aneignest und dich dann an etwas schwierigere Aufgaben machst?

mattfi
05.12.2005, 20:57:08
Das sieht schon besser aus, xabbuh. Danke.

feuervogel
06.12.2005, 00:12:49
Das sieht schon besser aus, xabbuh. Danke.

das sah schon in der 2. antwort auf deine 1. frage gut aus ;-P

mattfi
06.12.2005, 00:16:30
Auch du brauchst deine Zeit, um dich an Eiswasser zu gewöhnen... ;-)

Aber soviel kann ich dir sagen, weil ich es schon x-Mal mit Access probiert habe: eine Rel-DB vernünftig hinzukriegen, die nicht aus einer einfachen Tabelle mit "n" Spalten besteht, kriege ich nicht hin.

Derweil wünsche ich noch einen schönen Abend...

mattfi
06.12.2005, 14:00:13
Manche Dinge wusste ich schon, viele nicht. Jetzt bin ich im Tutorial so weit, dass ich eine einfache Tabelle auslesen kann, die ich mit PHPMyAdmin gefüllt habe. Jetzt kommt der schwierige Teil, von dem ich annehme, dass ich ihn alleine nicht packe.

Ich habe mir eine Datenstruktur überlegt, die, wie ich meine, aus vier Tabellen bestehen muss.
Anmerkung: Im weiteren werde ich für "Definition eines Begriffs" den Ausdruck "Definition" verwenden, für die Benennungen in den einzelnen Sprachen den Ausdruck "Benennung". Es gilt: "Begriff" = "Definition" + "Benennungen".

Tabelle 1 heißt "DEF" und beinhaltet die Definitionen, nicht aber die Benennungen für einen Begriff in den verschiedenen Sprachen (einschl. des Deutschen). Für jede Sprache habe ich daher eine weitere Tabelle angelegt. Die heißen entsprechend "DE", "EN", "IT".
Meine Tabellenstruktur soll es ermöglichen, einer Definition in jeder Sprache "n" Benennungen zuzuordnen (Synonyme).

Jede Tabelle hat eine auto-inkrementelle ID. Da ich mir nicht sicher war, ob die alle gleich heißen dürfen, habe ich sie "ID_DEF", "ID_DE", "ID_EN" und "ID_IT" benannt.

Natürlich gibt es noch weitere Felder wie Autor, Datum, Freigabestatus, Synonymiegrad etc.

Die Tabellenstruktur ist von der Referenzsprache Deutsch abgekoppelt, so dass ich morgen auch das Englische oder Italienische zur Referenzsprache machen kann. Damit meine ich, maximale Flexibilität geschaffen zu haben.

Um Kommentare zur Datenstruktur bitte ich natürlich.

Aber vor allem sind wir ja jetzt wohl mitten darin, wofür andere Leute Informatik studieren.

Frage: Wie Frage ich per PHP/SQL eine deutsche Benennung aus der Tabelle "DE", den dazugehörigen Begriff aus der Tabelle "DEF" und die dazugehörigen Benennungen in den Tabellen "DE", "EN" und "IT" ab?

Irgendwas von JOIN habe ich gelesen, aber da bin ich jetzt wohl wirklich irgendwo an den Grenzen meiner Fähigkeiten angelangt. Das vermute ich jedenfalls mal.

mattfi
06.12.2005, 15:09:21
Ich glaube, ich kann meine Frage noch präzisieren:

Wie Frage ich per PHP/SQL eine deutsche Benennung aus der Tabelle "DE", den dazugehörigen Begriff aus der Tabelle "DEF" und die dazugehörigen Benennungen in den Tabellen "DE", "EN" und "IT" ab?

Tabelle DEF
ID_DEF "ID_Def1" | DEF "Definition1"

Tabelle DE
ID_DE "ID_De1" | TERM "Benennung1"
ID_DE "ID_De2" | TERM "Benennung2"

Tabelle EN
ID_EN "ID_En1" | TERM "Benennung3"
ID_EN "ID_En2" | TERM "Benennung4"

Szenario 1: PHP/SQL sucht nach "Benennung4" (Englisch) und gibt aus:
EN:
Benennung4
Benennung3
DEF:
Definition1
DE:
Benennung1
Benennung2

Szenario 2: PHP/SQL sucht nach "Benennung2" (Deutsch) und gibt aus:
EN:
Benennung2
Benennung1
DEF:
Definition1
DE:
Benennung3
Benennung4

Frage: Welche IDs muss ich in welche Tabellen einfügen, damit die Abfragen aus den Szenarien 1 und 2 möglich werden?

mattfi
06.12.2005, 21:43:52
Inzwischen habe ich es geschafft, für eine Benennung die zugeordnete Definition sowie ide dieser Definition zugeordneten Benennungen in den verschiedenen Sprachen auszulesen und wiederzugeben:
http://www.fachterminologie.info/Glossar/MySQL_Test_1.php

Ich bin erstaunt, dass ich es hingekriegt habe. Naja, das Tutorial gibt ja Gott sei Dank schon einiges vor.

Jetz gibt es aber für eine Bennnung unter Umständen in derselben Sprache noch weitere Einträge mit einer anderen Definition. Ziel ist es also, für eine Benennung zuerst einmal sämtliche Definitonen und die entsprechenden ID_DEF-Werte auszulesen. Ich habe versucht, die im Tutorial enthaltene Anweisung so umzubauen, aber es funktioniert nicht. Ich weiß nicht, wie ich es anstellen soll, den Vorgang zu loopen, und bitte um Tipps. Danke.

Hier die Anweisung, wie sie bei mir aktuel steht (ohne HTML-Tags):
$sql = "SELECT
ID_DEF
FROM
DE
WHERE
TERM = 'Probe';";

$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$id_def = $row['ID_DEF'];

// Definition und evtl. Anmerkung für den entsprechenden
// Begriff auslesen und ausgeben:

$sql = "SELECT
DEF,
ANM
FROM
DEF
WHERE
ID_DEF = $id_def;";

$result = mysql_query($sql) OR die(mysql_error());

while($row = mysql_fetch_assoc($result)) {
echo $row['DEF']."\n".$row['ANM']."\n";
}

mattfi
07.12.2005, 17:47:06
So, mein kleines Spielzeug ist im Kern fertig:
http://www.fachterminologie.info/Glossar/MySQL_Test_2.php

Für diesen Thread hier bekam ich gestern/heute leider wenige/keine sinnvollen Hinweise, aber für all die anderen hilfreichen Ad-hoc-Tipps möchte ich mich recht herzlich bedanken.

Natürlich muss ich das ganze nun ausgestalten, mit Formular und so. Da melde ich mich dann wieder :-o

Aber erst einmal muss auch wieder was arbeiten...