 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
09.03.2005, 12:16
|
#1
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
XML Frage
Ich habe einen Datenbankexport nach XML generiert und folgende XML-Datei erzeugt:
Code:
<?xml version="1.0" encoding="UTF-8" ?>
<database>
<1234>
<phpbb_album_comment>
<row>
<comment_id>1</comment_id>
<comment_pic_id>64</comment_pic_id>
<comment_cat_id>6</comment_cat_id>
<comment_user_id>4</comment_user_id>
<comment_username>NOD</comment_username>
<comment_user_ip>d4900686</comment_user_ip>
<comment_time>1098991896</comment_time>
<comment_text>Sieht einfach geil aus</comment_text>
<comment_edit_time></comment_edit_time>
<comment_edit_count>0</comment_edit_count>
<comment_edit_user_id></comment_edit_user_id>
</row>
<row>
<comment_id>2</comment_id>
<comment_pic_id>64</comment_pic_id>
<comment_cat_id>6</comment_cat_id>
<comment_user_id>21</comment_user_id>
<comment_username>nos</comment_username>
<comment_user_ip>d9e47086</comment_user_ip>
<comment_time>1100514726</comment_time>
<comment_text>wie son bissl N1 !</comment_text>
<comment_edit_time></comment_edit_time>
<comment_edit_count>0</comment_edit_count>
<comment_edit_user_id></comment_edit_user_id>
</row>
<row>
<comment_id>3</comment_id>
<comment_pic_id>65</comment_pic_id>
<comment_cat_id>16</comment_cat_id>
<comment_user_id>190</comment_user_id>
<comment_username>crosspc</comment_username>
<comment_user_ip>d536ecb0</comment_user_ip>
<comment_time>1100592081</comment_time>
<comment_text>Naja private bilder sagen mehr aus:07</comment_text>
<comment_edit_time></comment_edit_time>
<comment_edit_count>0</comment_edit_count>
<comment_edit_user_id></comment_edit_user_id>
</row>
<row>
<comment_id>4</comment_id>
<comment_pic_id>146</comment_pic_id>
<comment_cat_id>13</comment_cat_id>
<comment_user_id>207</comment_user_id>
<comment_username>Emil</comment_username>
<comment_user_ip>c325bcd2</comment_user_ip>
<comment_time>1104414598</comment_time>
<comment_text>Zieh aus .</comment_text>
<comment_edit_time></comment_edit_time>
<comment_edit_count>0</comment_edit_count>
<comment_edit_user_id></comment_edit_user_id>
</row>
</phpbb_album_comment>
</1234>
</database>
Bei Anzeige im Browser wird aber immer "ungültiges Zeichen" gemeldet bei <1234>, aber der Name der DB ist nunmal 1234.
Wie muss ich das umformen, damit es XML-Konform ist ?
EDIT Habe in der XML-Spezifikation nachgeschaut und da steht für Namen:
Names and Tokens
[4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender
[5] Name ::= (Letter | '_' | ':') (NameChar)*
[6] Names ::= Name (S Name)*
[7] Nmtoken ::= (NameChar)+
[8] Nmtokens ::= Nmtoken (S Nmtoken)*
Also müssten doch Digits erlaubt sein ???
Geändert von steffenk (09.03.2005 um 12:54 Uhr).
|
|
|
09.03.2005, 12:57
|
#2
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Hi !
Für was soll den 1234 stehen?? Ich würde es so machen <album name="1234"> ...so ists irgendwie logischer und du die Tags sind "fest"... kannst sie also in der DTD bestimmen. Sonst "wüsste" der Parser ja garnicht, wass der Tag 1234 bedeutet wenn dieser evtl. noch variabel ist... u know?
Gruss
Jan
|
|
|
09.03.2005, 13:06
|
#3
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Hab ich doch geschrieben : 1234 ist der Name der Datenbank.
Diese Struktur hab ich mir nicht ausgedacht, sondern hab sie öfters gesehen:
<database>
<name der db>
<name der tabelle>
<row>
... (Daten)
</row>
</name der tabelle>
</name der db>
</database>
|
|
|
09.03.2005, 13:10
|
#4
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
upsi... stimmt ja.  Dann benutzt den Namen, wie gesagt, als Attribut... Anders machts auch keinen Sinn, da die Augabe ja womöglich unterschiedliche Datenbanken enthalten kann und der Tag somit flexibel sein müsste, was zur Folge hätte, dass du NIE eine echte Struktur drin hast. Das gleiche wäre evtl. für Cols auch angebracht.
Gruss
Jan
|
|
|
09.03.2005, 13:13
|
#5
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
ich dachte, der Tag <database> muss erst geschlossen werden, wenn z.B. eine andere Datenbank kommt.
Ok, wie sollten die Tags denn aussehen, und wie werden die dann geschlossen ? Meinst Du <database name="1234">...</database> ?
(sry, hab wenig XML-Erfahrung  )
übrigens stammt eine solche Ausgabe u.A. auch von MySQL-Front XML-Export
|
|
|
09.03.2005, 13:17
|
#6
|
|
TP-Moderator
Registriert seit: Jan 2005
Ort: Düsseldorf
|
Name für Elemente dürfen immer nur mit folgendem beginnen:
1. Buchstaben
2. Unterstrich
3. Ideogramm
Mit Zahlen nie.
Du kannst ja bei der Generierung des XML einfach prüfen, ob eine Ziffer an erster Position des Namens steht und dieser dann einen Unterstrich voranstellen, dann klappts wieder, beim einlesen entfernst du ihn wieder und gut ist.
So long,
skipperjan
__________________
Chenaski - Klamotten designed by Pete
USE - nicht immer nur mit Stars and Stripes rumlaufen!
Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....
|
|
|
09.03.2005, 13:33
|
#7
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
mmhh... ok, die Hauptfrage ist evtl. auch, wofür bzw. wie du die XML-Datei weiterverarbeiten willst. So wie es jetzt ist, müsste jedes Programm, das die XML-Datei verarbeiten soll speziell auf die XML-Datei "eingestellt" werden oder automatisch zu jeder XML-Datei eine passende DTD erstellt werden. Woher soll das Programm wissen, was z.B. der Tag <1234> bedeuten soll?
Am besten wäre/ist es, wenn du die Struktur halt wirklich festlegst... mal auf die Schnelle ein grober Vorschlag:
Code:
<?xml version="1.0" encoding="UTF-8" ?>
<databases>
<database name="1234">
<table name="phpbb_album_comment">
<structure>
<!-- Ausgabe der Struktur der Tabelle + evtl. Felddefinitionen usw. -->
</structure>
<data>
<!-- Ausgabe der Daten mit evtl. referenzierung auf das structure-Element -->
</data>
</table>
<table name="lalala">
<structure>
<!-- Ausgabe der Struktur der Tabelle + evtl. Felddefinitionen usw. -->
</structure>
<data>
<!-- Ausgabe der Daten mit evtl. referenzierung auf das structure-Element -->
</data>
</table>
<table name="luluklu">
<structure>
<!-- Ausgabe der Struktur der Tabelle + evtl. Felddefinitionen usw. -->
</structure>
<data>
<!-- Ausgabe der Daten mit evtl. referenzierung auf das structure-Element -->
</data>
</table>
[...]
</database>
<database name="87987979">
<table name="phpbb_album_comment">
<structure>
<!-- Ausgabe der Struktur der Tabelle + evtl. Felddefinitionen usw. -->
</structure>
<data>
<!-- Ausgabe der Daten mit evtl. referenzierung auf das structure-Element -->
</data>
</table>
<table name="lalala">
<structure>
<!-- Ausgabe der Struktur der Tabelle + evtl. Felddefinitionen usw. -->
</structure>
<data>
<!-- Ausgabe der Daten mit evtl. referenzierung auf das structure-Element -->
</data>
</table>
<table name="luluklu">
<structure>
<!-- Ausgabe der Struktur der Tabelle + evtl. Felddefinitionen usw. -->
</structure>
<data>
<!-- Ausgabe der Daten mit evtl. referenzierung auf das structure-Element -->
</data>
</table>
[...]
</database>
<database name="zweitedb">
<!-- s.o. -->
</database>
</databases>
...Einfach einlesen in Excel oder sonstwas wird nicht gehen. Aber so hättest du wirklich eine feste struktur, die du auf JEDE Datenbank/Tabelle anwenden kannst. Das Programm, das diese Struktur kennt, kann dann auch JEDE Datenbank/Tabelle verarbeiten.
Mit einem schicken XSLT-Dokument könntest du z.B. je nach dem wieviel Details du in der Datei unterbringst, einen echten Datenbankdump aus der XML-Datei rekonstruieren und an den SQL-Server schicken...
Gruss
Jan
|
|
|
09.03.2005, 13:58
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Vielen Dank für die ausführliche Info Jan, ich werde das berücksichtigen und einen solchen Baum aufbauen.
Sinn und Zweck ist es, Datenbankexport nach xml zu erzeugen. Was der User dann mit den XML-Daten macht ist dann seine Sache.
Was ich nachwievor nicht verstehe:
Der Browser weiss doch eh nicht, wozu die tags gut sind, bzw. was das sein soll.
Er nutzt die Tags doch nur, um das Dokument in einer Baumstruktur darzustellen.
Warum ist für ihn ein Tag der Art <1... ungültig ? Die XML-Spezifikation lässt diese Namensgebung imho doch zu (siehe 1.Posting).
ups... hatte ein Posting übersehen .... 
Geändert von steffenk (09.03.2005 um 14:02 Uhr).
|
|
|
09.03.2005, 13:59
|
#9
|
|
TP-Moderator
Registriert seit: Jan 2005
Ort: Düsseldorf
|
Die struktur muss nicht unbedingt extra ausgegeben werden, alle Attribute aller Kindknoten von Tabelle sind die Spaltennamen, die Struktur ist also eh dabei:
<database name="1234">
<tabelle name="spandex_hosen">
<row name="spalte1">
</row>
usw.........
</tabelle>
</database>
Sowas habe ich ja neulich auch gebastelt, als Problem sehe ich die Behandlung von Blob´s, was machste dann mit denen?
Wohin mit den Binär-Daten, oder einfach ignorieren?
So long,
skipperjan
__________________
Chenaski - Klamotten designed by Pete
USE - nicht immer nur mit Stars and Stripes rumlaufen!
Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....
|
|
|
09.03.2005, 14:03
|
#10
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
ich denke, binärdaten sollten in Binärform rein. Dabei weiss ich nicht, ob als 1Byte-Zeichen oder Multibyte ...
P.S. habe folgendes dazu gefunden:
Zitat:
5.4.2 Binary Data
There are three common ways to store binary data in XML documents: Base64 encoding (a MIME encoding that maps binary data to a subset of US-ASCII [0-9a-zA-Z+/] -- see RFC 2045), hex encoding (where each binary octet is encoded using two characters representing hexadecimal digits [0-9a-fA-F]), and unparsed entities (where the binary data is stored in a separate physical entity from the rest of the XML document).
The biggest problem with binary data is that many (most?) data transfer products don't support it, so be sure to check if yours does. A secondary problem occurs if unparsed entities are used. The problem here is that most (all?) data transfer products don't store notation and entity declarations. Thus, the notation associated with a particular entity will be lost when data is transferred from an XML document to the database. (For more information about notations, see section 4.7 of the XML 1.0 recommendation.)
|
Auszug aus http://www.rpbourret.com/xml/XMLAndDatabases.htm
Geändert von steffenk (09.03.2005 um 14:15 Uhr).
|
|
|
09.03.2005, 14:26
|
#11
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Die Struktur bietet sich aber an, wenn man aus dieser XML-Datei ein echtes Abbild der Datenbank(en) machen möchte. Z.B. die Information über Spaltentyp usw. Ein weiterer Gedanke wäre die interne Referenzierung im Dokument. Sowas in der Art:
Code:
<structure>
<col no="1">
<name>Spalte 1</name>
<type>varchar(255)</type>
</col>
<col no="2">
<name>Spalte 2</name>
<type>varchar(255)</type>
</col>
</structure>
<data>
<row>
<col no="1">Inhalt Spalte 1</col>
<col no="2">Inhalt Spalte 2</col>
</row>
[...]
</data>
...an soetwas dachte ich. Evtl. kann man den Kram ja auch direkt über irgendwelche IDs miteinander verbinden (#):
Code:
<structure>
<col id="db_tbl_1">
<name>Spalte 1</name>
<type>varchar(255)</type>
</col>
<col id="db_tbl_2>
<name>Spalte 2</name>
<type>varchar(255)</type>
</col>
</structure>
<data>
<row>
<cell col="#db_tbl_1">Inhalt Spalte 1</col>
<cell col="#db_tbl_2">Inhalt Spalte 2</col>
</row>
[...]
</data>
...sind nur kleine Anregungen, aber evtl. machts das verständlicher  Eine direkte referenzierung per XPath wäre evtl. auch noch interresant. Aber ich denke mit IDs kommt man schon sehr na ran.
Btw: Row braucht keinen Namen, da zig Rows in einer Tabelle sein können
Binärdaten können als Hex-String oder per base64_encode in XML-Dateien untergebracht werden:
PHP-Code:
$hex = current(unpack("H*", $bin));
Gruss
Jan
|
|
|
09.03.2005, 14:26
|
#12
|
|
TP-Moderator
Registriert seit: Jan 2005
Ort: Düsseldorf
|
Binärdaten sollen wohin?
..........ich nix verstehen, du kannst mal ein xml von einer db mit blob´s schreiben, das sieht wirklich nicht gut aus
so long,
skip
__________________
Chenaski - Klamotten designed by Pete
USE - nicht immer nur mit Stars and Stripes rumlaufen!
Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....
|
|
|
09.03.2005, 14:32
|
#13
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
solls denn gut aussehen
hauptsache die Infos sind da
Jan, hast Du vielleicht eine Quelle, die sich mit einer solchen Formatierung beschäftigt ? Ich sehe, das man da etlich Möglichkeiten hat - wie will man das alles unter einen Hut bringen
Der Parser muss ja auch noch wissen, was da auf ihn zukommt ...
|
|
|
09.03.2005, 14:33
|
#14
|
|
TP-Moderator
Registriert seit: Jan 2005
Ort: Düsseldorf
|
Ok, nach dem Kaffe holen und Kollegen treffen sollte man auch mal einen reload machen,
klar wenns ein 1-1 Abbild wird, dann ist es einfacher einmal alle relevanten Infos zu nennen als in jedem Element, weniger code ist guter code.......
Asche über mein Haupt.
Mit XSLT ist natürliche einiges möglich, aber dafür ist dann ein Prozessor nötig, meine bisherigen Testläufe mit sablotron sind nicht zufriedenstellend verlaufen, aber da muss ich auch noch mal tiefer einsteigen, unser System läuft halt mit Tomcat und Xalan, das ist zu aufwendig für eine "Überall" Anwendung,
so long,
skip
__________________
Chenaski - Klamotten designed by Pete
USE - nicht immer nur mit Stars and Stripes rumlaufen!
Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....
|
|
|
09.03.2005, 15:43
|
#15
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Zitat:
|
Zitat von St@eff.en
Jan, hast Du vielleicht eine Quelle, die sich mit einer solchen Formatierung beschäftigt ? Ich sehe, das man da etlich Möglichkeiten hat - wie will man das alles unter einen Hut bringen
Der Parser muss ja auch noch wissen, was da auf ihn zukommt ...
|
Naja... direkte Quellen habe ich da nicht, nein (hab halt ein paar Bücher und diverse Dinge umgesetzt)... das ist halt mein bisheriges Verständnis von XML -> Strukturierte Daten bzw. definition einer "eigenen" Auszeichnungssprache ... Da eine Datenbank und dessen Tabellen immer anders sind, musst du also eine Struktur erstellen, die auf alles passt. Ein passender Parser muss auf jede Struktur geschrieben werden, das lässt sich leider nicht vermeiden - siehe XHTML
Gruss
Jan
|
|
|
| |