XML-Schema
verenice
- xml
Hallo,
wenn ich ein Element im XML-File auf sich selbst referenzieren möchte, wie kann ich das im XML-Schema umsetzen?
Ich möchte gern so etwas machen können:
XML:
<Kapitel> XPath
<Kapitel> XPath Navigation </Kapitel>
<Kapitel> XPath Funktionen </Kapitel>
</Kapitel>
<Kapitel>XSLT</Kapitel>
so dass dann folgendes in HTML ausgegeben werden kann:
1. XPath
1.1 XPath Navigation
1.2 XPath Funktionen
2. XSLT
Danke schon mal im voraus.
Schönes WE.
Viele Grüße
verenice
Hallo,
Ich möchte gern so etwas machen können:
XML:
<Kapitel> XPath
<Kapitel> XPath Navigation </Kapitel>
<Kapitel> XPath Funktionen </Kapitel>
</Kapitel>
<Kapitel>XSLT</Kapitel>
Ich finde nicht, dass Du Energie mit solchen Strukturen verschwenden solltest, die spaetestens bei der Verarbeitung Probleme machen (Stichwort mixed content).
Denke eher in diese Richtung einer formalen Dokumentenstruktur (muesste natuerlich noch weiter durchdacht werden):
<?xml version="1.0" encoding="ISO-8859-1"?>
<Dokument>
<Kapitel>
<Ueberschrift>XPath</Ueberschrift>
<Vorspann>optionale Kapiteleinführung ...</Vorspann>
<Abschnitt>
<Ueberschrift>XPath Navigation</Ueberschrift>
<Inhalt>
<Absatz>...</Absatz>
<Absatz>...</Absatz>
<Absatz>...</Absatz>
</Inhalt>
</Abschnitt>
<Abschnitt>
<Ueberschrift>XPath Funktionen</Ueberschrift>
<Inhalt>
<Absatz>...</Absatz>
<Absatz>...</Absatz>
<Absatz>...</Absatz>
</Inhalt>
</Abschnitt>
<!-- weitere Abschnitt-Elemente -->
</Kapitel>
<Kapitel>
<Ueberschrift>XSLT</Ueberschrift>
<Vorspann>optionale Kapiteleinführung ...</Vorspann>
<Abschnitt>
<Ueberschrift>...</Ueberschrift>
<Inhalt>
<Absatz>...</Absatz>
<Absatz>...</Absatz>
<Absatz>...</Absatz>
</Inhalt>
</Abschnitt>
<!-- weitere Abschnitt-Elemente -->
</Kapitel>
<!-- weitere Kapitel-Elemente -->
</Dokument>
so dass dann folgendes in HTML ausgegeben werden kann:
- XPath
1.1 XPath Navigation
1.2 XPath Funktionen- XSLT
Eine solche Gliederung laesst sich aus der genannten Struktur ebenfalls ableiten (Nummerierung mit xsl:number).
MfG, Thomas
Hallo Thomas J. S., hallo Thomas Meinike,
vielen vielen Dank für Eure schnelle Hilfe. :o)
Viele Grüße
verenice
Hallo,
wenn ich ein Element im XML-File auf sich selbst referenzieren möchte, wie kann ich das im XML-Schema umsetzen?
Ich möchte gern so etwas machen können:
XML:
<Kapitel> XPath
<Kapitel> XPath Navigation </Kapitel>
<Kapitel> XPath Funktionen </Kapitel>
</Kapitel>
<Kapitel>XSLT</Kapitel>
Zusätzlich was Thomas gesagt hat - wobei ich seine Meinung was "solche Strukturen" angeht insofern nicht teile, dass man in diesem Fall gar nicht von Struktur sprechen kann - kannst du dein Vorhaben so verwirklichen:
(kapitel muss dabei als globales Elemente deklariert werden)
<xsd:element name="kapitel">
<xsd:complexType mixed="true">
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="kapitel" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Damit sind dann Sachen wie:
<kapitel>XPath
<kapitel>XPath Navigation</kapitel>
<kapitel>XPath Funktionen
<kapitel>XPath Patterns</kapitel>
</kapitel>
</kapitel>
<kapitel>XSLT</kapitel>
möglich.
so dass dann folgendes in HTML ausgegeben werden kann:
- XPath
1.1 XPath Navigation
1.2 XPath Funktionen- XSLT
Da wirst du dann paar Probleme haben und den Entwickler des XMLs zum Teufel wünschen. Sowas wie ein:
<xsl:template match="kapitel">
<xsl:number level="multiple" format="1.1.1."/> <xsl:value-of select="current()/text()"/>
<br />
<xsl:apply-templates select="kapitel" />
</xsl:template>
ist leicht, aber wenn du dann mehrere Texte hat und nicht alles nur der Titel ist hast du schon das erste Problem.
Grüße
Thomas
Hallo,
Zusätzlich was Thomas gesagt hat - wobei ich seine Meinung was "solche Strukturen" angeht insofern nicht teile, dass man in diesem Fall gar nicht von Struktur sprechen kann ...
Naja "solche Konstrukte" waere vielleicht angebrachter gewesen ;-).
MfG, Thomas
Hallo,
wenn ich ein Element im XML-File auf sich selbst referenzieren möchte, wie kann ich das im XML-Schema umsetzen?
Ich möchte gern so etwas machen können:
XML:
<Kapitel> XPath
<Kapitel> XPath Navigation </Kapitel>
<Kapitel> XPath Funktionen </Kapitel>
</Kapitel>
<Kapitel>XSLT</Kapitel>
Wie bereits geschrieben, waere das nicht mein Ansatz, aber um auch die Frage zum moeglichen XSL-Schema zu beantworten (mixed content kann ja durchaus mal sinnvoll sein):
<xs:element name="Kapitel" minOccurs="0" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="Kapitel" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Ich bin hier jeweils von 0...n Kapitel-Elementen ausgegangen.
MfG, Thomas
Hallo Thomas,
<xs:element name="Kapitel" minOccurs="0" maxOccurs="unbounded">
<xs:complexType mixed="true">
xs:sequence
<xs:element name="Kapitel" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
>
Haltest du es für günstig, zwei Elemente mit demselben Namen aber mit unterschiedlichen Inhaltstypen zu definieren? Wobei eine weitere Ebene der Verschachtelung nicht möglich ist. (das äußere Kapitel in deinem Bsp. darf auch nur innerhalb einer Struktur und nicht als globales Elementen definiert werden.[nur als Anmerkung])
Grüße
Thomas
Hallo,
Haltest du es für günstig, zwei Elemente mit demselben Namen aber mit unterschiedlichen Inhaltstypen zu definieren? Wobei eine weitere Ebene der Verschachtelung nicht möglich ist. (das äußere Kapitel in deinem Bsp. darf auch nur innerhalb einer Struktur und nicht als globales Elementen definiert werden.[nur als Anmerkung])
Optimal ist das eher nicht, hat aber prinzipiell zur Beschreibung des genannten Codestueckes gepasst.
Ich bin davon ausgegangen, dass Kapitel nicht gleichzeitig das Wurzelelement ist, was mit Deinem Code (ref="Kapitel") unterhalb von
<xs:element name="Wurzel">
xs:complexType
xs:sequence
...
nicht unmittelbar gelingt.
MfG, Thomas
Hallo,
Haltest du es für günstig, zwei Elemente mit demselben Namen aber mit unterschiedlichen Inhaltstypen zu definieren?
Ich wollte zur Beschreibung von
<?xml version="1.0" encoding="ISO-8859-1"?>
<Wurzel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd">
<Kapitel>XPath
<Kapitel>XPath Navigation</Kapitel>
<Kapitel> XPath Funktionen</Kapitel>
</Kapitel>
<Kapitel>XSLT</Kapitel>
</Wurzel>
eigentlich darauf hinaus (test.xsd):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Wurzel">
<xs:complexType>
<xs:sequence>
<xs:element ref="Kapitel" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Kapitel">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="Kapitel"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
MfG, Thomas
Hallo Thomas,
Haltest du es für günstig, zwei Elemente mit demselben Namen aber mit unterschiedlichen Inhaltstypen zu definieren?
eigentlich darauf hinaus (test.xsd):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Wurzel">
xs:complexType
xs:sequence
<xs:element ref="Kapitel" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Kapitel">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="Kapitel"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
\*lol\*
mein "test.xsd" dazu schaut(e) so aus:
~~~xml
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element ref="kapitel" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="kapitel">
<xsd:complexType mixed="true">
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="kapitel" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Grüße
Thomas
Hallo Thomas J. S., hallo Thomas Meinike,
vielen vielen Dank für Eure schnelle Hilfe. :o)
Viele Grüße
verenice