• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

XML - XSD Hierarchien darstellen

No3x

Mitglied
Hallo Leute, ich brauch mal Hilfe: Wie kann ich in einem XML - Schema sagen, dass ein Element Kind eines anderen sein soll?
XML:
HTML:
<note xsi:schemaLocation="xsd.xsd">
<Hierarchy>
  <Unterelement>Unterelement</Unterelement>
  <Unterelement_noch_eins>Unterelement_noch_eins</Unterelement_noch_eins>
</Hierarchy> 
</note>
XSD:
HTML:
  <xs:element name="note">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Hierarchy" type="xs:string" />
        <xs:element name="Unterelement" type="xs:string" />
        <xs:element name="Unterelement_noch_eins" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
In der XSD muss ich ja genau das in irgend einer Weise festlegen, dass Unterelement & Unterelement_noch_eins nur unter Hierarchy stehen dürfen.
Kann mir da jemand helfen?
 
Werbung:
Okay, das hilft mir sehr viel weiter. Ich hatte immer bei Substitution geschaut. :rolleyes:
Hat jemand Praxiserfahrung und kann mir einen der 3 "Stile" empfehlen?
 
Werbung:
Das ist schwer zu sagen. Es ist wohl so ähnlich wie die Frage, wann du beim Programmieren etwas in einer Variablen ablegst (statt direkt in den Code zu schreiben) oder gar als Klasse/Funktion auslagerst. Bei winzigen Scripts ist es meist unnötig, bei längeren Sachen geht es dagegen ohne quasi nicht.

Es gibt da keinen goldenen Mittelweg, denke ich. Ich habe schon gedacht „Das hier ist unnötig komplex.“ und ich habe schon gedacht „Hier hätte man weiter abstrahieren sollen.“.
 
Hi! Leider meckert meine IDE und sagt, das:
"sch-props-correct.2: A schema cannot contain two global components with the same name; this schema contains two occurrences of 'C:\V6\Component\Shared,Version'"
"sch-props-correct.2: A schema cannot contain two global components with the same name; this schema contains two occurrences of 'C:\V6\Component\Shared,Tested'"

Ich kann es leider nicht nachvollziehen. Wie soll ich die Beziehungen sonst darstellen?
CmpMeta_mini.xml
HTML:
<Component xmlns="C:\V6\Component\Shared" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="C:\V6\Component\Shared CmpMeta_mini.xsd">
<ShortName>MCB</ShortName>
    <Name>K MCB</Name>
    <Macro>K_MCB</Macro>
    <Category>Board</Category>
    <Description>K MCB M3.</Description>
    <Confidential/>
    <Version>
        <ExpectedMin>Rev. 1</ExpectedMin>
        <ExpectedMax>Rev. 2</ExpectedMax>
        <Tested>
            <Date>2002-09-24</Date>
            <Case/>
            <Notes/>
        </Tested>
    </Version>
</Component>
CmpMeta_mini.xsd
HTML:
  <!-- definition of simple elements -->
  <xs:element name="ShortName" type="xs:string" />
  <xs:element name="Name" type="xs:string" />
  <xs:element name="Macro" type="xs:string" />
  <xs:element name="Category" type="xs:string" />
  <xs:element name="Description" type="xs:string" />
  <xs:element name="Confidential" type="xs:string" />
  <xs:element name="Version" type="xs:string" />
  <xs:element name="ExpectedMin" type="xs:string" />
  <xs:element name="ExpectedMax" type="xs:string" />
  <xs:element name="Tested" type="xs:string" />
  <xs:element name="Date" type="xs:date" />
  <xs:element name="Case" type="xs:string" />
  <xs:element name="Notes" type="xs:string" />
  
  <!-- definition of complex elements -->
  <!-- 3rd  level -->
  <xs:element name="Tested">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Date" />
        <xs:element ref="Case" />
        <xs:element ref="Notes" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- 2nd  level -->
  <xs:element name="Version">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ExpectedMin" />
        <xs:element ref="ExpectedMax" />
        <xs:element ref="Tested" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- 1st  level - root -->
  <xs:element name="Component">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ShortName" />
        <xs:element ref="Name" />
        <xs:element ref="Macro" />
        <xs:element ref="Category" />
        <xs:element ref="Description" />
        <xs:element ref="Confidential" />
        <xs:element ref="Version" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Ich habe ja jetzt schon 3 Ebenen. Im Tutorial sind nur 2 beschrieben. Wo liegt der Fehler in meiner Auszeichnung?
 
Zuletzt bearbeitet:
So geht's bei mir:

XML:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<Component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CmpMeta_mini.xsd">
<ShortName>MCB</ShortName>
    <Name>K MCB</Name>
    <Macro>K_MCB</Macro>
    <Category>Board</Category>
    <Description>K MCB M3.</Description>
    <Confidential/>
    <Version>
        <ExpectedMin>Rev. 1</ExpectedMin>
        <ExpectedMax>Rev. 2</ExpectedMax>
        <Tested>
            <Date>2002-09-24</Date>
            <Case/>
            <Notes>2002-09-24</Notes>
        </Tested>
    </Version>
</Component>

XSD:

Code:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- definition of simple elements -->
  <xs:element name="ShortName" type="xs:string" />
  <xs:element name="Name" type="xs:string" />
  <xs:element name="Macro" type="xs:string" />
  <xs:element name="Category" type="xs:string" />
  <xs:element name="Description" type="xs:string" />
  <xs:element name="Confidential" type="xs:string" />
  <!--<xs:element name="Version" type="xs:string" />-->
  <xs:element name="ExpectedMin" type="xs:string" />
  <xs:element name="ExpectedMax" type="xs:string" />
  <!--<xs:element name="Tested" type="xs:string" />-->
  <xs:element name="Date" type="xs:date" />
  <xs:element name="Case" type="xs:string" />
  <xs:element name="Notes" type="xs:date" />

  <!-- definition of complex elements -->
  <xs:element name="Tested">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Date" />
        <xs:element ref="Case" />
        <xs:element ref="Notes" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="Version">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ExpectedMin" />
        <xs:element ref="ExpectedMax" />
        <xs:element ref="Tested" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="Component">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ShortName" />
        <xs:element ref="Name" />
        <xs:element ref="Macro" />
        <xs:element ref="Category" />
        <xs:element ref="Description" />
        <xs:element ref="Confidential" />
        <xs:element ref="Version" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
</xs:schema>

Die Pfade musst du eventuell wieder anpassen. Ich habe beides ins selbe Verzeichnis gelegt.
 
Werbung:
Selbstverständlich kann Version und Tested keinen type string haben ;)
Vielen Dank. Das ist nur ein Auszug aus meiner xml, es gibt noch ein paar mehr Ebenen. Ich versuch das dann mal umzusetzen und meld mich bei Problemen.
 
Zurück
Oben