1

しばらく検索して、属性の値ごとに検証を変更できない可能性があるという結論に達しました。

たとえば、「タイプ」属性と 2 つの要素 (「名前」と「説明」) を持つ 2 つの「アクション」ノードがあります。

「type」属性の値が「1」の場合のみ、「abc」子要素を持つ「a」要素があり、「type」属性が「2」の場合は、「yet」子要素を持つ「bla」要素があります。要素。

タイプ1の例

<action type="1">
  <name>yup</name>
  <description>yyy</description>
  <a>
    <abc>false</abc>
  </a>
</action>

タイプ2の例

<action type="2">
  <name>yup2</name>
  <description>RRR</description>
  <bla>
    <yet />
  </bla>
</action>

両方のタイプをチェックする 1 つの XSD* を作成したいのですが、これは可能ですか? もしそうなら、どのように?

  • MSSQL データベースのテーブルの XML 列に XSD を配置したいので、1 つの XSD でなければなりません。
4

2 に答える 2

1

そうです、MSSQL でサポートされている唯一の XSD バージョンである XSD 1.0 では不可能です。あなたが得ることができる最善の方法は、 と の間aで選択を作成することです。おそらく、属性値にblaいくつかの制約を設定するなどです。以下に図を示します。type

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="action">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string" />
        <xs:element name="description" type="xs:string" />
        <xs:choice>     
            <xs:element name="a">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="abc" type="xs:boolean" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="bla">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="yet" type="xs:anyType" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="type" type="xs:unsignedByte" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>

XML 構造を制御し、何らかの属性を使用してコンテンツ モデルを制御したい場合、XSD 1.0 でそれを行う唯一の方法は xsi:type です。

于 2012-09-26T13:30:33.200 に答える
0

ツール XML Stylus Studio を使用して、あらゆるタイプの複雑な XSD を作成できます。

詳細はこちら:http: //www.stylusstudio.com/

于 2012-09-26T11:32:53.787 に答える