2012-03-26 10 views
0

xsdを定義する方法を教えてもらえますか?リフレクティブスキーマの検証と定義

また、与えられた属性値に基づいて、対応する子タグのみが表示されるように(属性値に基づいて再帰的に)スキーマレベルで検証を実行する必要があります。

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <sample-tag type="one"> 
    <one></one> 
</sample-tag> 
<sample-tag type="two"> 
    <two></two> 
</sample-tag> 
<sample-tag type="three"> 
    <three></three> 
</sample-tag> 
<sample-tag type="onetwo"> 
    <one></one> 
    <two></two> 
</sample-tag> 
</root> 

答えて

0

XSDでは不可能です。 Schematronでこれが可能かどうかを確認してください。

0

サンプルXMLを近似値として取り上げると、厳密に言えば、目的の効果を得る方法が1つあります。これはxsi:typeと呼ばれています。私は個人的にxsi:typeを嫌いです。だから私はこの答えをむしろ学問的なものと考えています。

あなたはこのXMLに同意する場合:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <sample-tag xsi:type="one"> 
     <one></one> 
    </sample-tag> 
    <sample-tag xsi:type="two"> 
     <two></two> 
    </sample-tag> 
    <sample-tag xsi:type="three"> 
     <three></three> 
    </sample-tag> 
    <sample-tag xsi:type="onetwo"> 
     <one></one> 
     <two></two> 
    </sample-tag> 
</root> 

...その後、このXSDは何をしたいあなたを与えるだろう:

<?xml version="1.0" encoding="utf-8"?> 
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)--> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="root"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element maxOccurs="unbounded" name="sample-tag" type="sample-tag"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <xsd:complexType name="sample-tag" abstract="true"/> 
    <xsd:complexType name="one"> 
     <xsd:complexContent> 
      <xsd:extension base="sample-tag"> 
       <xsd:sequence> 
        <xsd:element name="one"/> 
       </xsd:sequence> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 
    <xsd:complexType name="two"> 
     <xsd:complexContent> 
      <xsd:extension base="sample-tag"> 
       <xsd:sequence> 
        <xsd:element name="two"/> 
       </xsd:sequence> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 
    <xsd:complexType name="three"> 
     <xsd:complexContent> 
      <xsd:extension base="sample-tag"> 
       <xsd:sequence> 
        <xsd:element name="three"/> 
       </xsd:sequence> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 
    <xsd:complexType name="onetwo"> 
     <xsd:complexContent> 
      <xsd:extension base="sample-tag"> 
       <xsd:sequence> 
        <xsd:element name="one"/> 
        <xsd:element name="two"/> 
       </xsd:sequence> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 
</xsd:schema> 

XSI場合:種類は問題外である、とXSD 1.1あなたは@ Pangeaの答えに行かなければなりません。

関連する問題