Laden...

Datenmodell aus XSD zur Laufzeit erstellen

Erstellt von be4all vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.052 Views
B
be4all Themenstarter:in
66 Beiträge seit 2008
vor 13 Jahren
Datenmodell aus XSD zur Laufzeit erstellen

Hallo,

ist es möglich aus einem bestehenden XSD ein Datenmodell ZUR LAUFZEIT zu erstellen. D.h. der Benutzer soll zur Laufzeit in einem Treeview basierend auf dem XSD Daten eingeben können, die dann als XML gespeichert werden.

Beispiel:


<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="test"
    targetNamespace="http://tempuri.org/test.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/test.xsd"
    xmlns:mstns="http://tempuri.org/test.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="html">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="head"/>
          <xs:element name="body" type="xsd:string"/>
        </xs:sequence>
      </xs:complexType>      
    </xs:element>
  
    <xs:element name="head">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="title" type="xsd:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

</xs:schema>


Klickt der User mit der rechten Maustaste in das TreeView so soll er lediglich die Möglichkeit haben, ein "html"-Element zu erstellen (aber eben nur einmal). Klickt er nun rechts auf "html"-Element os kann er ein "head" oder "body" Element erstellen.. Auch hier nur jeweils einmal....

Da das XSD dynamisch zur Laufzeit geändert werden kann, muss ich das Datenmodell zur Laufzeit erstellen. Über XMLDocument.Load("bla.xsd") komme ich nicht weit....

Bin für jeden Tip dankbar...

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

ein ähnliches Problem wird in dynamic class compilation from xsd behandelt.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.760 Beiträge seit 2006
vor 13 Jahren

Klickt der User mit der rechten Maustaste in das TreeView so soll er lediglich die Möglichkeit haben, ein "html"-Element zu erstellen (aber eben nur einmal).

Das heisst du willst zur Laufzeit validieren ob ein Element an der entsprechenden Stelle hinzugefügt werden kann. Also vergleichbar mit der XML-Completion im Visual Studio welche auch nur an dieser Stelle gültige Element anzeigt wenn eine entsprechende XSD hinterlegt wurde?

Dann könntest du sicherlich vom #Develop Code profitieren da dieser einen Xml-Editor mit code completion besitzt. Dieser ist auch in ein Plugin ausgelagert.
Wahrscheinlich insbesondere von dieser Klasse: src\AddIns\DisplayBindings\XmlEditor\Project\Src\XmlSchemaCompletionData.cs

Wenn sich die XSD ändert musst du das ganze Zeugl natürlich neu initialisieren.