Problem in XML Schema



  • Hallo,

    habe folgende XML datei.

    <?xml version="1.0" standalone="no"?>
    <?xml-stylesheet href="BibliographicMetadata.css" type="text/css"?>
    <?xml-stylesheet href="BibliographicMetadata.xsl" type="text/xsl"?>
    <?xml-stylesheet href="BibliographicMetadata.xsd" type="text/xsd"?>
    <!DOCTYPE BibliographicMetadata SYSTEM "BibliographicMetadata.dtd">
    <BibliographicMetadata>
    	<DataSet>
    		<Titel>dsfg</Titel>
    		<Writer>dsfg</Writer>
    		<Number>5</Number>
    		<PageStart>1</PageStart>
    		<PageEnd>4</PageEnd>
    		<Year>2008</Year>
    		<Editor>sdfg</Editor>
    		<Place>sdfg</Place>
    	</DataSet>
    </BibliographicMetadata>
    

    Und meine xsd datei ist folgendermase

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    	<xs:element name="BibliographicMetadata">
    		<xs:complexType>
    			<xs:choice minOccurs="1" maxOccurs="unbounded">
    				<xs:element ref="DataSet"/>
    			</xs:choice>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="DataSet">
    		<xs:complexType>
    			<xs:all>
    				<xs:element ref="Titel"/>
    				<xs:element ref="Writer"/>
    				<xs:element ref="Number"/>
    				<xs:element ref="PageStart"/>
    				<xs:element ref="PageEnd"/>
    				<xs:element ref="Year"/>
    				<xs:element ref="Editor"/>
    				<xs:element ref="Place"/>
    			</xs:all>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="Titel"/>
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="Writer"/>
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="Number"/>
    		<xs:simpleType>
    			<xs:restriction base="xs:integer">
    			<xs:minInclusive value="1"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="PageStart"/>
    		<xs:simpleType>
    			<xs:restriction base="xs:integer">
    			<xs:minInclusive value="1"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="PageEnd"/>
    		<xs:simpleType>
    			<xs:restriction base="xs:integer">
    			<xs:minInclusive value="1"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="Year"/>
    		<xs:simpleType>
    			<xs:restriction base="xs:integer">
    			<xs:minInclusive value="0"/>
    			<xs:maxInclusive value="2008"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="Editor"/>
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="Place"/>
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    </xs:schema>
    

    Mein problemm ist nur folgendes was muss ich machen wenn ich z.b. in der bibliographicMetadata ein atribut weglasen will z.b. <PageEnd> und/oder ich 2 <Writer> tags in einer BibliographicMetadata haben will?. also folgendermasse.

    <BibliographicMetadata>
    	<DataSet>
    		<Titel>dsfg</Titel>
    		<Writer>dsfg</Writer>
    		<Writer>dsfgsdasdasda</Writer>
    		<Number>5</Number>
    		<PageStart>1</PageStart>
    		<Year>2008</Year>
    		<Editor>sdfg</Editor>
    		<Place>sdfg</Place>
    	</DataSet>
    </BibliographicMetadata>
    

    Meine idee war das irgentwie mit choice zu machen functioniert aber nicht geht das irgentwie?.

    Viellen dank in voraus :(:(



  • minOccurs, maxOccurs



  • funktioniert nicht ich tue das in element tag rein aber dann bekomm ich fehler beim validieren 😕



  • Nicht ans Element. Mach einfach ein xsd:choice drum - dort kannste minOccurs 0 setzen.



  • <xs:element name="DataSet">
    		<xs:complexType mixed="true">
    			<xs:sequence>
    				<xs:element ref="Titel" minOccurs="1" maxOccurs="unbounded"/>
    				<xs:element ref="Writer" minOccurs="1" maxOccurs="unbounded"/>
    				<xs:element ref="Number" minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="PageStart" minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="PageEnd" minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="Year"  minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="Editor" minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="Place" minOccurs="0" maxOccurs="1"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    

    oder auch so

    <xs:element name="DataSet">
    		<xs:complexType mixed="true">
    			<xs:choice  maxOccurs="unbounded">
    				<xs:element ref="Titel" minOccurs="1" maxOccurs="unbounded"/>
    				<xs:element ref="Writer" minOccurs="1" maxOccurs="unbounded"/>
    				<xs:element ref="Number" minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="PageStart" minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="PageEnd" minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="Year"  minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="Editor" minOccurs="0" maxOccurs="1"/>
    				<xs:element ref="Place" minOccurs="0" maxOccurs="1"/>
    			</xs:choice>
    		</xs:complexType>
    	</xs:element>
    

    ok auf einmal funktionierts und ohne choice .... gestern ganze nacht rumexperimentiert und jetzt funktioniert es irgentwie .... einfach so ... aber jetzt ist mir folgentes aufgefahlen wiso mach ich minOccurs="0" maxOccurs="1" und nicht use="optional", ich weis mit choice hat das in wiklichkeit kein sinn. aber mit den parameter funktioniert das wieder nicht 😡 wiso?. jrdenfals behalt ich das^zweite mit choice danke noch mall fur die hilfe :):)

    Und noch eins wen ich in mein xml document art atribute benutze wie schreib ich die sintaks dazu in xsd document ?
    <write art="a"> asdasd </write>

    Sorry fur die fragen fileiecht is es sehr leicht aber ich find kein anstendiges buch/tutorial fuer xsd schreiben :(.


Anmelden zum Antworten