4

base64 テキストまたは xop:Include 要素のいずれかである要素を定義する XML スキーマがあります。現在、これは base64Binary タイプとして定義されています。

<xs:element name="PackageBinary" type="xs:base64Binary" minOccurs="1" maxOccurs="1"/>

代わりに xop:Include 要素を挿入すると、次のようになります。

<PackageBinary>
    <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="http://google.com/data.bin" />
</PackageBinary>

しかし、これにより XML 検証エラーが発生します (私は .NET バリデーターを使用しています)。

親要素のコンテンツ モデルがテキストのみであるため、要素 'mds:xml-schema:soap11:PackageBinary' に子要素 ' http://www.w3.org/2004/08/xop/include:Include ' を含めることはできません。

これはbase64コンテンツではないので理にかなっていますが、これは一般的な方法だと思いました...? スキーマでこれをサポートする方法はありますか? (この構文をサポートする既存の製品がありますが、現在検証を追加しています。)

4

3 に答える 3

1

私が思いついた最善の方法は、任意のタグを許可するが、テキストを許可するように「混合」としてタグ付けされた複合型を作成することでした。これは、コンテンツを base64 として明示的に宣言するわけではありませんが、検証を通過させます。

<xs:complexType name="PackageBinaryInner" mixed="true">
  <xs:sequence>
    <xs:any minOccurs="0" maxOccurs="1"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="PackageBinary" type="PackageBinaryInner" minOccurs="1" maxOccurs="1"/>
于 2014-01-09T17:06:33.303 に答える
1

私が見つけた解決策は次のようなものです:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://example.org"
           elementFormDefault="qualified"
           xmlns="http://example.org" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:xop="http://www.w3.org/2004/08/xop/include">

<xs:import namespace="http://www.w3.org/2004/08/xop/include"
           schemaLocation="http://www.w3.org/2004/08/xop/include"/>

<xs:complexType name="PackageBinary" mixed="true">
  <xs:all>
    <xs:element ref="xop:Include"/>
  </xs:all>
</xs:complexType>
于 2014-05-13T10:02:39.003 に答える