私はxmlスキルに取り組んでいますが、バリデーターは特定の根深い場所でXSDにエラーを出します。エラーは次のとおりです。
XSDは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="filmy">
<xs:complexType>
<xs:sequence>
<xs:element name="film">
<xs:complexType>
<xs:sequence>
<xs:element name="tytul"/>
<xs:element name="gatunek"/>
<xs:element name="czasTrwania"/>
<xs:element name="premiera"/>
<xs:element name="produkcja"/>
<xs:element name="rezyser"/>
<xs:element name="scenariusz"/>
<xs:element name="obsada">
<xs:complexType>
<xs:sequence>
<xs:element name="aktor">
<xs:complexType>
<xs:sequence>
<xs:element name="imie"/>
<xs:element name="nazwisko"/>
<xs:element name="dataUrodzenia"/>
<xs:element name="postac"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="soundtrack">
<xs:complexType>
<xs:sequence>
<xs:element name="utwor">
<xs:complexType>
<xs:sequence>
<xs:element name="wykonawca"/>
<xs:element name="tytulUtworu"/>
<xs:element name="gatunekMuzyczny"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ここにXMLがあります:
<?xml version="1.0" encoding="utf-8"?>
<filmy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<film>
<tytul>Fight Club</tytul>
<gatunek>Thriller, Psychologiczny</gatunek>
<czasTrwania>2h11m</czasTrwania>
<premiera>11 luty 1999</premiera>
<produkcja>Niemcy, USA</produkcja>
<rezyser>David Fincher</rezyser>
<scenariusz>Jim Uhls</scenariusz>
<obsada>
<aktor>
<imie>Edward</imie>
<nazwisko>Norton</nazwisko>
<dataUrodzenia>1969</dataUrodzenia>
<postac>Narrator</postac>
</aktor>
<aktor>
<imie>Brad</imie>
<nazwisko>Pitt</nazwisko>
<dataUrodzenia>1963</dataUrodzenia>
<postac>Tyler Durden</postac>
</aktor>
<aktor>
<imie>Helena</imie>
<nazwisko>Boham Carter</nazwisko>
<dataUrodzenia>1966</dataUrodzenia>
<postac>Marla Singer</postac>
</aktor>
</obsada>
<soundtrack>
<utwor>
<wykonawca>The Pixies</wykonawca>
<tytulUtworu>Where is my mind</tytulUtworu>
<gatunekMuzyczny>Rock</gatunekMuzyczny>
</utwor>
<utwor>
<wykonawca>The Pixies</wykonawca>
<tytulUtworu>Where is my mind</tytulUtworu>
<gatunekMuzyczny>Rock</gatunekMuzyczny>
</utwor>
<utwor>
<wykonawca>The Pixies</wykonawca>
<tytulUtworu>Where is my mind</tytulUtworu>
<gatunekMuzyczny>Rock</gatunekMuzyczny>
</utwor>
</soundtrack>
</film>
</filmy>
私は問題を理解していません、それは子要素が期待されていないと言います、子の数に制限はありますか?拡大できますか?
質問への回答が見つかりました。乗算できる要素には、maxOccurs = "unbounded"属性が必要です。
私の質問に対する答えを見つけました。乗算できる要素は、maxOccurs = "unbounded"属性を持っている必要があります。
この質問に対して受け入れられた答えは、実際に問題を解決しますが、「正しい」解決策ではありません。
無制限の追加が機能する理由は、xsdが複数のシーケンス、つまり.
<filmy>
<sequence>
<element_3>
</sequence>
<sequence>
<element_2>
<sequence>
<sequence>
<element_1>
<sequence>
</filmy>
この問題を解決するためにすべきことは、シーケンスの要素をコンテンツに正しい順序で追加することです。つまり、次のようなものです。
filmy.getContent().add(element1)
filmy.getContent().add(element2)
filmy.getContent().add(element3)
あなたに与えるでしょう:
<filmy>
<sequence>
<element_1>
<element_2>
<element_3>
<sequence>
</filmy>
つまり、シーケンスは1つだけなので、制限なしの必要はありません。
承認された回答では完全には役に立たなかったため、ここに別の回答を追加してください。
したがって、ここに質問質問者のような構造がある場合、maxOccurs="unbounded"
グローバルエレメントと見なされるため、最も外側のエレメントラッパー。
代わりに、次のようにすべての潜在的な要素に配置する必要があります。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="filmy">
<xs:complexType>
<xs:sequence>
<xs:element name="film">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="tytul"/>
<xs:element maxOccurs="unbounded" name="gatunek"/>
<xs:element maxOccurs="unbounded" name="czasTrwania"/>
<xs:element maxOccurs="unbounded" name="premiera"/>
<xs:element maxOccurs="unbounded" name="produkcja"/>
<xs:element maxOccurs="unbounded" name="rezyser"/>
<xs:element maxOccurs="unbounded" name="scenariusz"/>
...等