Laden...

Fragen bzgl. XML/Dataset und Speicherung

Erstellt von smilingbandit vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.176 Views
S
smilingbandit Themenstarter:in
151 Beiträge seit 2007
vor 16 Jahren
Fragen bzgl. XML/Dataset und Speicherung

verwendetes Datenbanksystem: Späterer Zugriff: MySql

Hallo zusammen!

Meine Applikation soll mal auf einem kleinen Laptop bzw. PDA laufen. Es sollen Meßdaten gespeichert werden, die (sobald möglich) dann mal auf Knopfdruck in eine MySQL-Datenbank gespeichert werden.

Jetzt dachte ich mir, bevor ich den armen PDA mit einer lokalen Datenbank quäle, speichere ich die Daten in XML.

Zu Beginn hatte ich mir noch überlegt, für jeden Datensatz eine eigene Datei anzulegen, bin dann aber davon abgekommen, als ich in einem Tutorial auf den

XmlWriter aufmerksam geworden bin, der einem ein Dataset in schönes XML speichert. Kommt mir entgegen, weil ich

  1. Nicht mit XML direkt herumhantieren müsste

  2. Ich mir einfacher eine Struktur für die Daten überlegen kann (hab mit SQL einfach schon viel mehr gemacht als mit XML)

  3. Dann (soweit ichs verstanden habe) das Interpretieren für den "Upload" dann ziemlich einfach gehen sollte.

Allerdings sind mir noch ein paar Fragen offen geblieben, bei denen mir das Tutorial nicht helfen konnte.

-Kann man sozusagen "Normalformen" damit Realisieren? Also dass es in XML mehrere Ebenen gibt (Tabelle 1 Zeigt nur IDs, die IDs verweisen jeweils auf eine Tabelle mit Werten drin)

-Ist es möglich, eine Datei auf diese Art zu öffnen, und und dabei nicht ihren Inhalt komplett zu überschreiben sondern

-Bestimmte Einträge zu suchen und dann anhand eines Kriteriums zu löschen?

Wäre mit eine grosse Hilfe, danke schonmal

J
3.331 Beiträge seit 2006
vor 16 Jahren

Original von smilingbandit
-Kann man sozusagen "Normalformen" damit Realisieren? Also dass es in XML mehrere Ebenen gibt (Tabelle 1 Zeigt nur IDs, die IDs verweisen jeweils auf eine Tabelle mit Werten drin)

Grundsätzlich ja. Du kannst DataRelations auch per Xml abbilden und nutzen. Grundlage ist ein XSD-Schema, das z.B. die Tabellen ORT mit den Feldern ID, Name sowie PLZ mit den Feldern PLZ, Ort_ID enthält und dazu festlegt:

<!--  PrimaryKey für ORT  -->
<xs:unique msdata:PrimaryKey="true" name="Ort_PK">
	<xs:selector xpath=".//ORT" />
	<xs:field xpath="ID" />
</xs:unique>
<!--  PrimaryKey für PLZ  -->
<xs:unique msdata:PrimaryKey="true" name="PLZ_PK">
	<xs:selector xpath=".//PLZ" />
	<xs:field xpath="ID" />
</xs:unique>
<!--  ForeignKey / DataRelation für PLZ auf ORT  -->
<xs:keyref name="PLZ_FK_Ort" refer="Ort_PK">
	<xs:selector xpath=".//PLZ" />
	<xs:field xpath="Ort_ID" />
</xs:keyref>

Für Einzelheiten könntest Du Dir ein DataSet mit DataTables erstellen (auf welchem Weg auch immer), dazu das Schema speichern mit WriteXmlSchema() und dann das Schema untersuchen.

-Ist es möglich, eine Datei auf diese Art zu öffnen, und und dabei nicht ihren Inhalt komplett zu überschreiben sondern

Eher nein. Mit ReadXml/WriteXml() wird immer die vollständige Datei eingelesen. Du könntest allenfalls versuchen, die Datei als XmlDocument manuell einzulesen und zu untersuchen; aber das wird vermutlich viel zu aufwändig.

-Bestimmte Einträge zu suchen und dann anhand eines Kriteriums zu löschen?

Aus dem gleichen Grund: faktisch nicht möglich.

In der Praxis ist eine Xml-Datei als Datenbank-Ersatz geeignet als Nachschlagetabelle (z.B. für die Liste der PLZ/Ortsnamen), zum Datenaustausch und für kleine Dateien, die nur selten und/oder von einer einzelnen Stelle aus bearbeitet werden.

Ich hoffe, Du kannst mit diesen Hinweisen etwas anfangen. Jürgen

286 Beiträge seit 2006
vor 16 Jahren

-Bestimmte Einträge zu suchen und dann anhand eines Kriteriums zu löschen?

Naja, es ist nicht möglich nur den bestimmten Teil zu öffnen aber mit xPath ist es möglich bestimmte Knoten zu finden und dementsprechend auch zu eliminieren.

Gruß, maYer

S
smilingbandit Themenstarter:in
151 Beiträge seit 2007
vor 16 Jahren

Hallo juetho,

vielen Dank für die Hinweise, hatte fast "befürchtet" dass dann ein XSD-Schema mit herhalten muss 🙂

Was die Problematik mit dem Suchen/Löschen/Überschreiben angeht, so ist das natürlich nicht so prickelnd. Im schlimmsten Fall muss ich dann wohl doch auf die Methodik mit der einen Datei pro Datensatz arbeiten, und das dann über die diversen File-Klassen handeln...mal sehen ob mir noch was anderes einfällt und was der Chef dazu sagt g

danke jedenfalls

J
3.331 Beiträge seit 2006
vor 16 Jahren

Original von smilingbandit
... hatte fast "befürchtet" dass dann ein XSD-Schema mit herhalten muss...

Das sehe ich nach meinen Erfahrungen überhaupt nicht als Problem an. Wenn Du einmal die Struktur verstanden hast, ist es überhaupt kein Problem, ein Schema schnell manuell zu erstellen. Jürgen

S
smilingbandit Themenstarter:in
151 Beiträge seit 2007
vor 16 Jahren

Damit ich nicht durcheinander komme:

So wie sich die Tuts und Dokus lesen, ist ein XSD-Schema eine "Schablone" für XML-Dokumente. Verstehe ich das richtig?

Kann es sich dabei auch um eine "Schablone" für einen "Datensatz" handeln, welcher dann in einer Datei mehrfach vorhanden ist (mit unterschiedlichen Werten natürlich)?

286 Beiträge seit 2006
vor 16 Jahren

Ja klar.

Hier mal zur Verdeutlichung eine kleine xsd Datei:


<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<!-- Element Definitionen -->
	<xs:element name="ID" type="xs:integer" />
	<xs:element name="Typ" type="enumMessageType" />
	<xs:element name="Text" type="xs:string" />
	<xs:element name="LogText" type="xs:string" />
	<!-- Enumerationen -->
	<xs:simpleType name="enumMessageType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Warnung" />
			<xs:enumeration value="Fehler" />
			<xs:enumeration value="Info" />
			<xs:enumeration value="Hinweis" />
			<xs:enumeration value="Frage" />
		</xs:restriction>
	</xs:simpleType>
	<!-- Struktur Definition -->
	<!-- Root -->
	<xs:element name="MsgRoot">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Message" type="MessageType" minOccurs="0" maxOccurs="unbounded">
				</xs:element>
			</xs:sequence>
		</xs:complexType>
		<!--Eindeutigkeits-Definition-->
		<xs:unique name="MsgID">
			<xs:selector xpath="Message" />
			<xs:field xpath="ID" />
		</xs:unique>
	</xs:element>
	<xs:complexType name="MessageType">
		<xs:sequence>
			<xs:element ref="ID" />
			<xs:element ref="Typ" />
			<xs:element ref="Text" />
			<xs:element ref="LogText" />
		</xs:sequence>
	</xs:complexType>
</xs:schema>

Der ComplexType MessageType wird unten definiert und oben benutzt.
Zusätzlich habe ich oben eine Enumeration für den Messagetyp eingebunden und unten eine Eindeutigkeitsbeschränkung auf das Element ID gelegt.

Der MessageType ist allerdings auch wieder weiter schachtelbar 🙂

Ich hoffe, es hilft dir.

Gruß, maYer

S
smilingbandit Themenstarter:in
151 Beiträge seit 2007
vor 16 Jahren

Ja das hat schonmal zum Verständnis beigetragen danke 🙂 Were mich nochmal weiter durch Tutorials schlagen und eventuell hab ich ja noch Fragen 😉