Rolf B: Eigener Datentyp bestehend aus mehreren double-Werten

Beitrag lesen

Hallo rodgerwilco,

wenn du das mit xs:double in ein Schema bringen willst, müsste dein XML so aussehen:

<transformation>
   <value>12.34</value>
   <value>45.87</value>
   <value>10</value>
   <value>0.5</value>
   <value>0</value>
   <value>38</value>
</transformation>

dann kannst Du deinen transformationType auf die Values anwenden.

Wenn Du alle 6 in ein Element bringen willst, kannst Du dafür eine passende Regex als Pattern definieren. Der transformationType sollte dann aber auf xs:string basieren, nicht auf xs:double, und du musst nachher Code haben, der diese Transformationsangabe versteht.

Das Pattern sollte wohl mit \s* beginnen und enden, um führende und abschließende Leerstellen zu erlauben.
Dann müsste es eine Double-Zahl matchen können, das wäre sowas wie (\d+(\.\d*)?|\.\d+)([eE][+-]?\d{1,2})?. Das ist eine Mantisse, die entweder gar keinen Dezimalpunkt hat, oder mind. eine Stelle davor, oder nur Nachkommastellen hat. Danach folgt ein Exponent bestehend aus e oder E, dann optional ein + oder -, und 1-2 Ziffern. Wenn das nicht passt, musst Du es modifizieren.

Dein Tranformstring besteht dann aus 6 dieser Doubles, durch Space getrennt, das lässt sich mit dem {} Quantifizierer halbwegs abkürzen zu \s*(DDD\s+){5}DDD\s* (für DDD muss das double-Muster von oben eingesetzt werden).

Aus der Hüfte geschossen würde ich also dies hier schreiben::

	<xs:simpleType  name="transformationType">
		<xs:restriction base="xs:string">
			<xs:pattern value="\s*((\d+(\.\d*)?|\.\d+)([eE][+-]?\d{1,2})?\s+){5}(\d+(\.\d*)|\.\d+)([eE][+-]?\d{1,2})?\s**"/>
		</xs:restriction>
	</xs:simpleType>

Hoffe es funktioniert :) Die Regex habe ich mit RegexStorm getestet, das ist nicht 1:1 Schema-Regex.

Rolf