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 :(.