0

以下のような XML ファイルがあり、型置換メソッドを使用して XML スキーマを作成し、以下の XML ファイルを検証できるようにしたいと考えました。しかし、私が作成したスキーマは完全に間違っています。以下のファイル XML を検証するためにスキーマをコーディングする方法を教えてください。

詳細:

  • 保管されている動物は、鳥と魚の 2 種類だけです。
  • type、name、origin の両方の要素が必要です
  • type:bird の場合、オプションで追加の色要素を保存できます。
  • type:fish の場合、追加の size 要素を格納する必要があります

    <animals>
     <animal animalID="b-1" xsi:type="bird">
         <name>Humming Bird</name>
         <origin>Asia</origin>
         <color>Blue</color>
     </animal> 
     <animal animalID="b-2" xsi:type="bird">
         <name>Horn Bill</name>
         <origin>Asia</origin>
     </animal>
     <animal animalID="f-2" xsi:type="fish">
         <name>Whale</name>
         <origin>Europe</origin>
         <size>Large</size>
     </animal>
     <animal animalID="b-5" xsi:type="bird">
         <name>Parrot</name>
         <origin>Europe</origin>
     </animal>
    

以下のスキーマが出てきましたが、完全に間違っていると思います。

 <xsd:element name="bird" substitutionGroup="animals" 
         type="birdType"/>
 <xsd:element name="fish" substitutionGroup="animals" 
         type="fishType"/>
 <xsd:element name="animals">
<xsd:complexType>
    <xsd:sequence>
        <xsd:element name="animal" maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType>
</xsd:element>

 <xsd:element name="animal">
<xsd:complexType>
    <xsd:sequence>
        <xsd:element ref="bird" maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType>
</xsd:element>
4

2 に答える 2

0
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
<xsd:complexType name="animalType">
    <xsd:sequence>
        <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
        <xsd:element name="origin" type="xsd:string" minOccurs="1" maxOccurs="1"/>
    </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="birdType">
    <xsd:complexContent>
        <xsd:extension base="animalType">
            <xsd:sequence>
                <xsd:element name="color" type="xsd:string" minOccurs="0"/>
            </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="fishType">
    <xsd:complexContent>
        <xsd:extension base="animalType">
            <xsd:sequence>
                <xsd:element name="size" type="xsd:string" minOccurs="1"/>
            </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>
<xsd:element name="animals">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="animal" type="animalType" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>
</xsd:schema>
于 2012-11-25T13:20:18.627 に答える
0

私は生物学者ではありませんが、もし私が生物学者だったら、あなたの分類法に異議を唱えるでしょう...

xsi:type を使用して 2 つの型を区別する場合、スキーマには「bird」と「fish」という名前のグローバル複合型定義が含まれている必要があります。これらの両方を、「生き物」などの基本型から拡張して派生させることができます (ここでは実際の生物学を行っていないため...)。タイプcreativeには2つの共通要素nameとoriginが含まれ、2つの拡張機能にはオプションの要素colorとsizeがそれぞれ含まれます。animal 要素は、タイプ「creature」であると定義されています。

于 2012-11-25T10:59:24.857 に答える