Problem bei deklaration eines (root)-tags

danielandross

Erfahrenes Mitglied
Hallo zusammen,
bin da nochmal auf ein xml problem gestoßen:

Meine XML Datei bisher:
Code:
<?xml version="1.0"?>
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="file:///D:/autocreatedxmlFile1183364253441.xsd"
<root>
<Format>
<OID>1</OID>
<Extension>$ENC$</Extension>
<Mimetype></Mimetype>
<Description>#IBM Client Security(TCPA) Encrypted</Description>
<Category>Encrypted Data</Category>
<Segment>
<Value>368503F14AF9C9ACAE05B431AF53</Value>
<Offset>0</Offset>
<Action></Action>
</Segment>
<ExtractSize>300000</ExtractSize>
<Case>false</Case>
</Format>
</root>

Mein XML-Schema:
Code:
<?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:element name="root">
	<xs:complexType>
		<xs:sequence>
			<xs:element name="Format" minOccurs="1">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="OID" type="sx:ID" maxOccurs="1" minOccurs="1"/>
						<xs:element name="Extension" type="sx:string" minOccurs="1"/>
						<xs:element name="Mimetype" type="sx:string"  maxOccurs="1" minOccurs="1"/>
						<xs:element name="Category" type="sx:string" default="others" minOccurs="1"/>
						<xs:element name="ExtractSize" type="sx:integer" maxOccurs="1" minOccurs="0"/>
						<xs:element name="Case" type="sx:boolean" maxOccurs="1" minOccurs="1"/>
						<xs:element name="Description" type="sx:string"  minOccurs="0"/>
						<xs:element name="Segment" minOccurs="1">
							<xs:complexType>
								<xs:sequence>
									<xs:attribute name="Value" type="sx:string" maxOccurs="1" minOccurs="1"/>
									<xs:attribute name="Offset" type="sx:integer" maxOccurs="1" minOccurs="1"/>
									<xs:attribute name="Action" type="sx:string" maxOccurs="1" minOccurs="1"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>

</xs:element>
</xs:schema>

Der Parser behauptet jetzt jedoch: Cannot find the declaration of element 'root'.

Aber ich meine dass das oben ganz klar definiert ist, verstehe daher das Problem nicht.

Weiß allerdings nicht ob mein root überhaupt ein complex typ sein muss, weil ich es ja so gestalten will dass sich in ihm meine Format entities befinden die ich ja durchparsen möchte und root bildet nur die Hülle für die Format Elemente.

Sieht jemand den Fehler bezüglich des falsch deklarierten root tags?

edit: Es liegt übrigens nicht am parser weil er den Fehler nur bringt, wenn ich die Validierung aktiviere (was ich unbedingt muss).
 
Zuletzt bearbeitet:
Hallo,

hast du es schon mal so versucht?
XML:
<?xml version="1.0"?>

<root xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="file:///D:/autocreatedxmlFile1183364253441.xsd">
<Format>
<OID>1</OID>
<Extension>$ENC$</Extension>
<Mimetype></Mimetype>
<Description>#IBM Client Security(TCPA) Encrypted</Description>
<Category>Encrypted Data</Category>
<Segment>
<Value>368503F14AF9C9ACAE05B431AF53</Value>
<Offset>0</Offset>
<Action></Action>
</Segment>
<ExtractSize>300000</ExtractSize>
<Case>false</Case>
</Format>
</root>

Ich kenne es nur so.

MFG

zEriX
 
Zuletzt bearbeitet von einem Moderator:
So, habe mir jetzt mal dein Schema-File angeschaut und einige Fehler beseitigt. Jetzt müsste es funktionieren.

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:element name="root">
	<xs:complexType>
		<xs:sequence>
			<xs:element name="Format" minOccurs="1">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="OID" type="xs:ID" maxOccurs="1" minOccurs="1"/>
						<xs:element name="Extension" type="xs:string" minOccurs="1"/>
						<xs:element name="Mimetype" type="xs:string"  maxOccurs="1" minOccurs="1"/>
						<xs:element name="Category" type="xs:string" default="others" minOccurs="1"/>
						<xs:element name="ExtractSize" type="xs:integer" maxOccurs="1" minOccurs="0"/>
						<xs:element name="Case" type="xs:boolean" maxOccurs="1" minOccurs="1"/>
						<xs:element name="Description" type="xs:string"  minOccurs="0"/>
						<xs:element name="Segment" minOccurs="1">
							<xs:complexType>
									<xs:attribute name="Value" type="xs:string"/>
									<xs:attribute name="Offset" type="xs:integer"/>
									<xs:attribute name="Action" type="xs:string"/>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>

</xs:element>
</xs:schema>

XML-Datei wie oben angegeben (von mir).

MFG
zEriX
 
Zuletzt bearbeitet von einem Moderator:
funktioniert auch noch net.
Mit welchem programm lässt du es eigentlich validieren? Mich würde es mal interessieren ob das dann bei mir auch meckern würde.
 
Ich hab es mit dem XML-Editor den es für eclipse gibt validiert.

Liegen das Schema-file und das XML-File in dem gleichen Ordner?
Falls ja, dann mach es so.

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

<root xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com autocreatedxmlFile1183364253441.xsd">
<Format>
<OID>1</OID>
<Extension>$ENC$</Extension>
<Mimetype></Mimetype>
<Description>#IBM Client Security(TCPA) Encrypted</Description>
<Category>Encrypted Data</Category>
<Segment>
<Value>368503F14AF9C9ACAE05B431AF53</Value>
<Offset>0</Offset>
<Action></Action>
</Segment>
<ExtractSize>300000</ExtractSize>
<Case>false</Case>
</Format>
</root>
 
Zuletzt bearbeitet von einem Moderator:
ok jetzt klappt das mit root schonmal.
danke dir.

jetzt meint er:
'1' is not a valid value for 'NCName'. Was ist denn NCName? 1 kommt ja nur bei OID vor was mein Primärschlüssel in Integer werden soll.
 
Habe es jetzt bis zur 20. Zeile geschafft. tschaka ;)

Der Fehler:
Error on line 20 of document file:///d:/XML.AnfangJuli.xsd: s4s-elt-must-match.1: The content of 'sequence' must match (annotation?, (element | group | choice | sequence | any)*). A problem was found starting at: attribute.

Die aktuelle XML Datei:
Code:
<?xml version="1.0"?>
<root xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com XML.AnfangJuli.xsd">
<Format>
<OID>1</OID>
<Extension>$ENC$</Extension>
<Mimetype></Mimetype>
<Description>#IBM Client Security(TCPA) Encrypted</Description>
<Category>Encrypted Data</Category>
<Segment>
<Value>368503F14AF9C9ACAE05B431AF53</Value>
<Offset>0</Offset>
<Action></Action>
</Segment>
<ExtractSize>300000</ExtractSize>
<Case>false</Case>
</Format>
</root>

Das aktuelle Schema:
Code:
<?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:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="Format" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="OID" type="xs:ID" maxOccurs="1" minOccurs="1"/>
<xs:element name="Extension" type="xs:string" minOccurs="1"/>
<xs:element name="Mimetype" type="xs:string"  maxOccurs="1" minOccurs="1"/>
<xs:element name="Description" type="xs:string"  minOccurs="0"/>
<xs:element name="Category" type="xs:string" default="others" minOccurs="1"/>
<xs:element name="Segment" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:attribute name="Value" type="xs:string" maxOccurs="1" minOccurs="1"/>
<xs:attribute name="Offset" type="xs:integer" maxOccurs="1" minOccurs="1"/>
<xs:attribute name="Action" type="xs:string" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ExtractSize" type="xs:integer" maxOccurs="1" minOccurs="0"/>
<xs:element name="Case" type="xs:boolean" maxOccurs="1" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Ich kann mir nicht erklären wieso er Probleme hat, dass Segment aus mehreren Elementen besteht, denn Format tut das ja auch und ich habe es genau so gemacht wie Format.
 
Du hättest dir mal das Schema anschauen sollen, dass ich gepostet habe. Du hattest nämlich einige Fehler drin. Zum Beispiel Attribute können nur hinter einer sequence, choice usw. deklariert werden. Desweiteren dürfen Attribute kein min- oder maxOccurs haben, da sie sowieso nur einmal vorkommen dürfen.

MFG

zEriX
 
hm gut zu wissen. :)
Habs geändert bringt aber denselben Fehler ich mache jetzt mal aus den Attributen wieder elemente mal sehen ob das dann funktioniert.

edit: soweit so gut wenn ich OID weglasse läuft die validierung so durch. Jetzt muss ich nur noch herausfinden wie ich da einen Primärschlüssel einbaue.

edit2: Ok das Problem ist dass eine "xs:ID" kein integer sein soll, dh wenn ich statt 1 "1" schreibe ist es einString und es klappt. Dann werde ich es jetzt so in die xml daten schreiben und es dann später in ein integer wandeln wenn ich auf java ebene arbeite.

Ich danke dir nochmals für deine Hilfe. Hätte das ohne dich heute wohl nicht mehr geschafft, zerix. thx
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück