XMLの学習曲線を上って、list
要素を使用して検証問題を説明しました。私は、特定のkey
の値をメンバーとして許可するlist
要素を作成しようとしています。LIST要素の導出
以下のモデルを作成するのに役立つ小さなコンテキスト。 にはそれぞれユニークなNAME
という種類があります。 NAME
形式は、simpleType要素のパターンによって制限されます。 REFDESType
。 NAME
の一意性は、キーsource_key
によって適用されます。
このsource_key
を生産的に使用して関連するデータフィールドに入力制限を提供しようとする試みは、まだ意図した結果をもたらさない。 POWERSOURCE
は、これらの使用目的フィールドの1つであり、要素MODE
の子です。その目的は、POWERSOURCE
が1つまたは複数のMSXML解析に失敗する可能性があることです。 {OK、笑いを浮かべて歓迎します。}はい、これはサードパーティのライブラリを持たないスタンドアロンのEXCEL 2013ベースのアプリ向けに開発されています。
私にはとにかく眩しいと思われる1つの問題は、REFDESType
の木にPOWERSOURCE
の2方向からです。 NAME
を通り過ぎ、再びREFDESList
を通過します。うーん
解析エラー:keyref
'GEN-1 GEN-2 GEN-3 GEN-4' アイデンティティ制約 '{http://www.myCo.com} source_key' のkey
に解決しません。
確かに、list
を使用するのは明らかです。さて、もし私がこの方法がどうしてうまくいかないか理解できれば。代替アプローチも歓迎されます。
ELA.XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.myCo.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ela="http://www.myCo.com" elementFormDefault="qualified">
<xs:element name="DB">
<xs:complexType>
<xs:sequence>
<xs:element ref="ela:SOURCE" maxOccurs="unbounded"/>
<xs:element ref="ela:MODE" minOccurs="6" maxOccurs="13"/>
</xs:sequence>
</xs:complexType>
<xs:key name="source_key">
<xs:selector xpath="ela:SOURCE"/>
<xs:field xpath="ela:NAME"/>
</xs:key>
</xs:element>
<xs:element name="SOURCE" type="ela:SOURCEType"/>
<xs:element name="NAME" type="ela:REFDESType"/>
<xs:element name="MODE" type="ela:MODEType"/>
<xs:element name="POWERSOURCE" type="ela:REFDESList">
<xs:keyref name="powersource_ref" refer="ela:source_key">
<xs:selector xpath="."/>
<xs:field xpath="."/>
</xs:keyref>
</xs:element>
<xs:simpleType name="REFDESList">
<xs:list itemType="ela:REFDESType"/>
</xs:simpleType>
<xs:simpleType name="REFDESType">
<xs:restriction base="xs:string">
<xs:minLength value="2"/>
<xs:maxLength value="9"/>
<xs:pattern value="[A-Z]([A-Z0-9; -]){1,8}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="MODEType">
<xs:sequence>
<xs:element ref="ela:POWERSOURCE"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SOURCEType" mixed="true">
<xs:sequence>
<xs:element ref="ela:NAME"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
sample.xmlに:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ela:DB xmlns:ela="http://www.myCo.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.myCo.com ELA.xsd">
<ela:SOURCE>
<ela:NAME>GEN-1</ela:NAME>
</ela:SOURCE>
<ela:SOURCE>
<ela:NAME>GEN-2</ela:NAME>
</ela:SOURCE>
<ela:SOURCE>
<ela:NAME>GEN-3</ela:NAME>
</ela:SOURCE>
<ela:SOURCE>
<ela:NAME>GEN-4</ela:NAME>
</ela:SOURCE>
<ela:MODE>
<ela:POWERSOURCE>GEN-1 GEN-2 GEN-3 GEN-4</ela:POWERSOURCE>
</ela:MODE>
</ela:DB>
TY @Mayerと@Michaelケイセット。 ListObjectテーブルへのインポート/エクスポート時のExcel固有のmaxOccursの制限のために、私はマルチPOWERSOURCE要素を改善することを試みていました。つまり、それらを単一の要素 'list'に集約し、モデルの残りの部分に適用します。悲しいかな、XSD 1.0バージョンに拘束されるという制約。一口... – IronX
私は私のOPの追加レビューが必要だと思います。理由は、W3Cサイトの['list'] [1]の例は、USStatesという名前の' list'の実装における一意の値の使用を具体的に示しているということです。 W3Cの例のUSStatesリストは、USState要素から派生しています。この要素には、50個の一意の状態略語がすべて列挙されます。 [1]:http://www.w3.org/TR/xmlschema-0/#ListDt – IronX
あなたのご意見が分かりますか分かりません。 リストには、スペースで区切られた項目が含まれています。 リスト項目は単純な種類であり、そのように制限することができます。 これは、キー制約または一意性とは関係ありません。 キー制約は、個々のリスト項目ではなく、* whole *リストにのみ一致します。 – Meyer