2

xsd:any 要素に属性を追加するにはどうすればよいですか? たとえば、次のようになります。

<xsd:element name="requests">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:any namespace="http://xxx.yyy.com" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

エラーなしでスキーマに対して次の xml を検証できるように、属性として any に追加するにはどうすればよいですか。

<requests>
    <operation count="1">
<requests>
4

2 に答える 2

0

xsd:any には属性宣言を含めることはできません。これは、基本的に、名前空間「http://xxx.yyy.com」内で定義されているすべての要素をシーケンス内で宣言できるためです。別の XSD を使用してその名前空間を検証していない場合は、xsd:any の代わりに次を使用できます。

<xsd:element name="operation">
   <xsd:complexType>
      <xsd:attribute name="count" type="nonNegativeInteger" use="required"/>
   </xsd:complexType>
</xsd:element>

それ以外の場合は、XSD の先頭で「http://xxx.yyy.com」の名前空間プレフィックスを宣言し、xsd:any の代わりにそのスキーマ内の要素を参照する必要があります。したがって、「http://xxx.yyy.com」のスキーマに次の宣言が含まれているとします。

<xsd:complexType name="operationType">
   <xsd:attribute name="count" type="nonNegativeInteger" use="required"/>
</xsd:complexType>

次に、XSD でこの型を参照できます。

<xsd:element name="requests">           
   <xsd:complexType>           
      <xsd:sequence>           
         <xsd:element type="optype:operationType"/>           
      </xsd:sequence>           
   </xsd:complexType>           
</xsd:element>  
于 2011-09-06T14:25:09.680 に答える
0

count 属性がある限り、任意の要素を子として許可したいと言っている場合、XSD 1.0 ではそれを行うことはできません。アサーションを使用して、XSD 1.1 (現在、Saxon と Xerces でサポートされています) で実行できます。

<xs:assert test="every $x in * satisfies (exists($x/@count) and $x/@count castable to xs:integer)"/> 
于 2011-09-06T16:18:30.417 に答える