[Newbie] Elemente mit denselben Namen

aja

Mitglied
Moin,
ich möchte ein XML-Schema so schreiben, dass nicht nur die Grundstruktur angegeben ist, sondern, dass man auch die Elementeigenschaften vordefiniert, mehrere Tabellen mit bestimmten Namen vorsieht usw. Ist vielleicht besser wenn ich etwas Code zeige:
Code:
<scope name="core">
  <table name="Preferences">
     <column name="SystemId" type="bigint" required="true"/>
     <column name="Name" type="varchar" size="255" required="true"/>
     <column name="PrefValue" type="varchar" size="255" required="true"/>
     <unique name="PK_PREFERENCES">
         <unique-column name="SystemId"/>
         <unique-column name="Name"/>
      </unique>
  </table>
  <table name="VersionInfo">
      <column name="SystemId" type="bigint" primaryKey="true" required="true"/>
      <column name="ModuleVersion" type="varchar" size="32" required="true"/>
      <column name="Comment" type="varchar" size="255" required="false"/>
  </table>
Ich will das Schema nachher zur Validierung verwenden, so dass ich weiß, dass z.B. die Tabelle Preferences die und die Attribute haben soll, die so und so definiert sind. Wie man sieht, sind die Tabellen nicht immer gleich definiert und als ich versuchte, einfach unter scope Elemente mit dem Namen table, aber von unterschiedlichen Typen, einzusetzen, hat XMLSpy gemeckert, dass es keine konsistente Daten sind. Ich weiß gar nicht wie ich an das Problem rangehen soll.
Hoffentlich kann mir da jemand weiterhelfen... Schöne Grüße.
 
Hallo,

ich weiß nicht ob ich dich richtig verstanden habe. Willst du die Möglichkeit haben, ein Element mit unterschiedlichen Unterelementen zu definieren oder willst du es abhängig machen von dem was in den Attributen steht?

Das zweite wüsste ich nicht, dass das möglich ist.

Für das erste könntest du dir groups definieren, in denen du die Möglichkeiten schreibst wie du es haben willst. Also eine group definierst du so wie es in "Preferences" steht und eine andere group definierst du so wie es in "VersionInfo" steht. Dein Typ besteht dann einfach aus einer choice mit den verschiedenen groups.

Ich hoffe ich hab mich verständlich ausgedrückt.

MFG

zEriX
 
Danke für die schnelle Antwort. Anscheinend war meine Beschreibung nicht deutlich genug. Ich wollte das element <scope> haben, an den die <table>-Elemente mit unterschiedlichen Namen (hier: Preferences, VersionInfo) und dann - für jede dieser Tabellen - die Unterstrukturen, je nachdem welche Tabelle gerade betrachtet wird. Ich hoffe es war verständlich genug.
Gruß,
Anna
 
Vielleicht liegts an mir, aber ich hab immer noch nicht verstanden was du machen willst.

Mit dem was ich vorgeschlagen habe, hättest du nur einen Typ aber mit allen unterschiedlichen Formen wie du es haben möchtest. Da das dann alles von einem Typ ist dürfte es auch kein Problem sein, das Ganze unter scope zu bringen.

MFG

zEriX
 
Ich hab dir mal ein Beispiel fertig gemacht wie ich das meine.

XML:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.w3schools.com"
	xmlns="http://www.w3schools.com" elementFormDefault="qualified">

	<xs:group name="gruppe1">
		<xs:sequence>
			<xs:element name="column" type="xs:string"></xs:element>
		</xs:sequence>
	</xs:group>

	<xs:group name="gruppe2">
		<xs:sequence>
			<xs:element name="zahl" type="xs:decimal"></xs:element>
		</xs:sequence>
	</xs:group>
	
	<xs:complexType name="tableType">
	<xs:choice>
			<xs:group ref="gruppe1"></xs:group>
			<xs:group ref="gruppe2"></xs:group>
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="scopeType">
		<xs:sequence  minOccurs="1" maxOccurs="unbounded">
			<xs:element name="table"></xs:element>
		</xs:sequence>
	</xs:complexType>
	
	<xs:element name="scope" type="scopeType"></xs:element>

</xs:schema>


XML:
<?xml version="1.0"?>

<scope xmlns="http://www.w3schools.com"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.w3schools.com test.xsd">
	<table>
		<column>test</column>
	</table>
	<table>
		<zahl>3</zahl>
	</table>
	<table>
		<zahl>2</zahl>
	</table>
</scope>

MFG

zEriX
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank für deine Hilfe! Es hat mich schon weiter gebracht.
Nun habe ich aber noch eine Frage:
Ist es möglich, in einem XML-Schema zu sagen: wenn der Name "x" genommen wurde, so muss dessen Wert so und so sein? Mein konkreter Fall zur Erleuchtung:

Ich habe Spalten (column-data), und jede Spalte hat einen Namen und einen Wert. Die zugelassenen/möglichen Namen habe ich mit restriction -> enumeration angegeben. Nun möchte ich noch sagen: Wenn der Name z.B. "ISOCode" ist, so muss er von diesem Typ sein. Geht das überhaupt?
(Es sollte im Endeffekt eine Applikation sein, die es dem Benutzer ermöglicht, den Inhalt einer .xml-Datei zu bearbeiten und ich möchte schon im Schema definieren welcher Wert in welcher Spalte stehen darf). Ich hoffe, es ist klar genug beschrieben :)

HTML:
<xs:element name="column-data" maxOccurs="unbounded">
   <xs:complexType>
	<xs:attribute name="value" type="xs:string" use="required"/>
	<xs:attribute name="columnName" use="required">
   	   <xs:simpleType>
	       <xs:restriction base="xs:string">
  		    <xs:enumeration value="Comment"/>
	  	    <xs:enumeration value="ISOCode"/>
	. . .
 
Ich wüsste nicht, dass das möglich ist. Meiner Meinung nach gehört sowas auch nicht in ein Schema, da es mehr zur Logik gehört.

MFG

zEriX
 
Ich dachte, vielleicht könnte man das jeweils als Paare angeben, also name & value als zusammengehörendes Teil... Finde leider keine Implementierung für sowas... Ich dachte den value-Wert kann ich irgendwie durch Pattern sicherstellen...

_____________

Ich hatte das vor Augen wie einen Typ, der sein Inhalt ändern könnte(choice?) oder sowas..... Geht das wirklich nicht?
 
Zuletzt bearbeitet:
Könnte mir vielleicht nur jemand kurz schreiben, wenn es da keinen Ausweg gibt? Meine Birne glüht, ich versuche wahrscheinlich, das Unmögliche zu erreichen und am Ende wirds nur ne Zeitverschwendung. Danke im Voraus
 
Ich dachte, vielleicht könnte man das jeweils als Paare angeben, also name & value als zusammengehörendes Teil

Wie meinst du das?

Meinst du das die Werte von Value abhängig vom eingegebenen Namen sind?

MFG

zEriX
 

Neue Beiträge

Zurück