2009-06-08 12 views
7

要素の下で子が発生する回数を変更するXMLスキーマを拡張しようとしています。元のスキーマでタイプの子のmaxOccurs属性を変更するためにXSDスキーマを再定義することはできますか?

、親の型は、次のように定義されます

<xsd:complexType name="CrimeLineBusiness_Type"> 
    <xsd:complexContent> 
     <xsd:extension base="PCLINEBUSINESS"> 
      <xsd:sequence> 
       <xsd:element ref="CrimeSchedule" minOccurs="0"/> 
       <xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0"/> 
      </xsd:sequence> 
     </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 

私はそれがとても両方CrimeScheduleCrimeMoneyAndSecuritiesは、要素の繰り返しているようにしたいです。

<xsd:complexType name="CrimeLineBusiness_Type"> 
     <xsd:complexContent> 
      <xsd:extension base="CrimeLineBusiness_Type"> 
       <xsd:sequence> 
        <xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0" maxOccurs="unbounded"/> 
        <xsd:element ref="CrimeSchedule" minOccurs="0" maxOccurs="unbounded"/> 
       </xsd:sequence> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 

しかし、その後、私は次のエラーを取得する:子どもたちが実際に元のスキーマで定義されていたので、

cos-nonambig: CrimeSchedule and CrimeSchedule (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles.

これは、理にかなって私は、これは(xsd:redefineの内側に)うまくいくかもしれないと思いました。では、私は何をする必要があるのですか?

ありがとうございます!

答えて

12

拡張子を作成すると、新しいタイプのコンテンツモデルは、ベースのコンテンツモデルのシーケンスであり、新しいタイプで追加するものがすべて含まれます。あなたのケースでは例えば再定義CrimeLineBusiness_Typeタイプのコンテンツモデルは、あなたが欲しいものを達成しようとすることができますどのような

<xsd:sequence> 
    <xsd:sequence> 
    <xsd:element ref="CrimeSchedule" minOccurs="0"/> 
    <xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0"/> 
    </xsd:sequence> 
    <xsd:sequence> 
    <xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0" maxOccurs="unbounded"/> 
    <xsd:element ref="CrimeSchedule" minOccurs="0" maxOccurs="unbounded"/> 
    </xsd:sequence> 
</xsd:sequence> 

は、そのタイプの二重の再定義です。最初に、オプションでCrimeScheduleとCrimeMoneyAndSecuritiesの要素を削除し、必要に応じてそれらの要素を再度追加して、制約で再定義します。完全に動作するサンプルは以下を参照してください。

text.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

    <xsd:element name="test" type="CrimeLineBusiness_Type"/> 

    <xsd:complexType name="PCLINEBUSINESS"/> 
    <xsd:element name="CrimeSchedule"/> 
    <xsd:element name="CrimeMoneyAndSecurities"/> 

    <xsd:complexType name="CrimeLineBusiness_Type"> 
    <xsd:complexContent> 
     <xsd:extension base="PCLINEBUSINESS"> 
     <xsd:sequence> 
      <xsd:element ref="CrimeSchedule" minOccurs="0"/> 
      <xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0"/> 
     </xsd:sequence> 
     </xsd:extension> 
    </xsd:complexContent> 
    </xsd:complexType> 

</xsd:schema> 

redef1.xsd

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:redefine schemaLocation="test.xsd"> 

    <xs:complexType name="CrimeLineBusiness_Type"> 
     <xs:complexContent> 
     <xs:restriction base="CrimeLineBusiness_Type"> 
      <xs:sequence/> 
     </xs:restriction> 
     </xs:complexContent> 
    </xs:complexType> 
    </xs:redefine> 
</xs:schema> 

redef2.xsd

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:redefine schemaLocation="redef1.xsd"> 
    <xs:complexType name="CrimeLineBusiness_Type"> 
     <xs:complexContent> 
     <xs:extension base="CrimeLineBusiness_Type"> 
      <xs:sequence> 
      <xs:element maxOccurs="unbounded" minOccurs="0" ref="CrimeSchedule"/> 
      <xs:element maxOccurs="unbounded" minOccurs="0" ref="CrimeMoneyAndSecurities"/> 
      </xs:sequence> 
     </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
    </xs:redefine> 
</xs:schema> 

有効なXMLインスタンス、のtest.xml

<?xml version="1.0" encoding="UTF-8"?> 
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="redef2.xsd"> 

    <CrimeSchedule></CrimeSchedule> 
    <CrimeSchedule></CrimeSchedule> 
    <CrimeMoneyAndSecurities></CrimeMoneyAndSecurities> 
    <CrimeMoneyAndSecurities></CrimeMoneyAndSecurities> 

</test> 

よろしくお願いします。 George

+1

George!私はXSDが投票され、尋問者に受け入れられたことに対するいくつかの間違った答えを見たので、それゆえに信仰を失い始めていました。 – 13ren

+0

私はここで、「再定義で子を削除できますか?」という答えを探しました。しかし、私はジョージの答えが間違いなく "いいえ、上記と同様のパターンを使用しないで"の答えと同様にカバーしていると思います。 –

関連する問題