1

次の形式のxmlがあり、グループの状態は、定義状態で定義されているtrue falseの状態であるか、その値の1つで別のグループを使用できます。

この関係にxsdを使用するにはどうすればよいですか?定義とグループ名に解決されたIDとIDrefを使用しますが、グループの値が実際にグループで定義された値であることを制限するにはどうすればよいですか?

また、定義を使用する場合、値はtrue / false文字列である必要がある場合に、IDを区別する方法はありますか。別のグループ状態を使用する場合、その定義された状態の1つにする必要がありますか?

  <Definitions>
    <Definition Name="Name1"/>
    <Definition Name="Name2"  />
  </Definitions>

  <ValueGrps>
    <Group Name="grp1">
      <ComplexState Name="state1">
        <State Name="Name1" Value="true" />
        <State Name="Name2" Value="true" />
      </ComplexState>
      <ComplexState Name="state2">
        <State Name="Name1" Value="false" />
        <State Name="Name2" Value="true" />
      </ComplexState>
    </Group>
    <Group Name="grp2">
      <ComplexState Name="state1">
        <State Name="grp1" Value="state1" />           
      </ComplexState>
    </Group>      
  </ValueGrps>
4

1 に答える 1

1

XSD 1.0だけでは、ここでは役に立ちません。確かにSchematronを適用できます。.NETで動作するXSLT1.0実装があります(C#を指定したため)。

XSD 1.1には、必要なもののサポートが組み込まれています。ただし、XSD 1.1は、SaxonのEE for NETを購入するか、IKVMを使用して.NETにXercesJを「移植」するため、.NETでは十分にサポートされていません(私はそれを実行しました)。オープンな環境では、他の人がXSD1.1スキーマを使用するのに問題があります。

これが新しいデザインの場合、おそらくデザインの一部も変更します...たとえば、Stateグループの参照は定義の参照と同じではありませんState-次に、さまざまな参照タイプに対してさまざまなコンテンツモデルを定義します。また、key(unique)/keyrefを優先してID/IDREFを削除します。提供されたXMLで機能する例を以下に添付します。

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) 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 name="Definitions">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element maxOccurs="unbounded" name="Definition">
                <xsd:complexType>
                  <xsd:attribute name="Name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="ValueGrps">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element maxOccurs="unbounded" name="Group">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element maxOccurs="unbounded" name="ComplexState">
                      <xsd:complexType>
                        <xsd:sequence>
                          <xsd:element maxOccurs="unbounded" name="State">
                            <xsd:complexType>
                              <xsd:attribute name="Name" type="xsd:string" use="required" />
                              <xsd:attribute name="Value" type="xsd:string" use="required" />
                            </xsd:complexType>
                          </xsd:element>
                        </xsd:sequence>
                        <xsd:attribute name="Name" type="xsd:string" use="required" />
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                  <xsd:attribute name="Name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:key name="PK_1">
        <xsd:selector xpath="Definitions/Definition|ValueGrps/Group"/>
        <xsd:field xpath="@Name"/>      
    </xsd:key>
    <xsd:keyref name="FK_1" refer="PK_1">
        <xsd:selector xpath="ValueGrps/Group/ComplexState/State"/>
        <xsd:field xpath="@Name"/>
    </xsd:keyref>
  </xsd:element>
</xsd:schema>
于 2012-12-31T19:37:40.813 に答える