1

私はしばらくの間、次のケースに xsd ファイルを書き込もうとしています:

<Values xsi:type="me:ArrayOfValue">
   <Value xsi:type="xs:int">1</Value>
   <Value xsi:type="xs:string">I'm a string</Value>
   <Value xsi:type="me:Point">
      <X>10.2</X>
      <Y>2.3</y>
   </Value>
<Values/>

ここでは、単純型 (int、文字列) と複合型 (ポイント)の組み合わせがあります。

単純な型しかない場合は、unionを簡単に使用できることがわかっています。

だから私は選択オプションを試しました。

問題は、すべての要素に同じ名前 (値) を使用できないことです。

誰かがこれで私を助けてもらえますか??

4

2 に答える 2

1

読みやすくするために、以下は少し変更された XML です (答えの真実は変わりませんが、2 つの XSD をリストする必要がないため、読みやすくなります)。

<Values xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <Value xsi:type="xs:int">1</Value>
   <Value xsi:type="xs:string">I'm a string</Value>
   <Value xsi:type="Point">
      <X>10.2</X>
      <Y>2.3</Y>
   </Value>
</Values>

この XSD は上記を検証します。

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema xmlns:me="urn:tempuri-org" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Values">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" name="Value"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="Point" >
    <xsd:sequence minOccurs="0">
      <xsd:element name="X" type="xsd:decimal" />
      <xsd:element name="Y" type="xsd:decimal" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

問題は、日付が必要ない場合でも、xsi:type="xs:date" を使用して値になることです。しかし、これは XSD 1.0 の制限にすぎません。

許可された xsi:type 属性のリストを制約するには、XSD 1.1 に移行するか、XSD 1.0 プロセッサ上で Schematron 制約を使用する必要があります。

于 2013-05-27T20:27:24.180 に答える