2017-07-09 3 views
1

私は、プロジェクト定義を定義するクライアントをXMLで、プロジェクト定義スキーマに関連付ける(単純に)サプライヤは、データ供給スキーマとクライアント定義のプロジェクト定義とを満たすデータを供給する。スキーマと他のXMLファイルのグループを検証するための標準的な方法

私はこれを慣行/従うべきプロセスを定義することで行うことができますが、私の質問は「おそらくアノテーション/ appinfoを使ってこのタイプのことをする標準的な方法はありますか? (私の周りGoogleで検索してきたし、空が出ている)

私は程度によものの例は、(ほとんどのものは簡潔にするため取り除か)以下である:

簡体クライアントプロジェクトの定義スキーマ

<xs:schema ...> 
    <xs:element name="ProjectConfiguration"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Enum" type="EnumType" minOccurs="0" maxOccurs="unbounded" /> 
      </xs:sequence> 
      <xs:attribute name="id" type="xs:string" use="required" /> 
     </xs:complexType> 
    </xs:element> 

    <xs:complexType name="EnumType"> 
     <xs:sequence> 
      <xs:element name="Value" type="xs:string" minOccurs="1" maxOccurs="unbounded" /> 
     </xs:sequence> 
     <xs:attribute name="name" type="xs:string" use="required" /> 
    </xs:complexType> 
</xs:schema> 

クライアントプロジェクト定義のXML

<ProjectConfiguration id="myproj"> 
    <Enum name="myenum"> 
     <Value>AllowedValue1</Value> 
     <Value>AllowedValue2</Value> 
    </Enum> 
</ProjectConfiguration> 

簡体サプライヤーデータ供給スキーマ

<xs:schema ...> 
    <xs:element name="Data"> 
     <xs:complexType> 
      <xs:attribute name="value" type="xs:string" use="required"> 
       <xs:annotation> 
        <xs:documentation> 
         Here, I want the type to be validated against the list supplied 
         in the Client Project Definition XML. I know (think) that XSD 
         won't cut this, but am wondering if there is anything 
         that will in a standard manner. 
        </xs:documentation> 
       </xs:annotation> 
      </xs:attribute> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

疑いを避けるために、私は自分のコードベースを完全に制御していますが、外部からの制約はありません。最終的なソリューションは複数の階層/ストック構成(およびこれらのビア構成の継承および修正)を必要とするため、クライアントはすべてのプロジェクトのスキーマを定義する必要はありません。

私がしようとしているものと根本的に異なる別の方法がある場合、私はすべての耳です!

答えて

1

列挙型を別のXMLファイルで指定することはできず、制約としてXSDの値に適用されることは間違いありません。

最終的な解決策は、(コンフィギュレーションを経由して継承し、これらの改正)複数の層/株式構成 が参加するように私は、クライアントはすべてのプロジェクトのためのスキーマを定義する必要はありません。彼らはしているものの、

  • XSD 1.1はアサーションを持っている:ここまでの要件が行くように少し曖昧ですが、

はあなたがあまりにも限定的であることをXSD 1.0を見つけている場合は他のいくつかの検証オプションです現在のノードとその子孫にアクセスすることに限定されています。
  • SchematronにはXPathベースのアサーションがあり、ユーザー定義の 関数(XSLT構文)を呼び出すことができます。たとえば、列挙宣言を含む他のXML文書 を参照することができます。
  • Schematronが提供する標準化および事前定義された構造の費用は であるにもかかわらず、Raw XSLTが最も強力で柔軟性があります。
  • +1

    ありがとうございました。それはSchematronの方法が最高かもしれないように聞こえる。よく理解されています - 私は調査し、私のインスタンスで働いていた解決策で答えを出します。 – GHC

    関連する問題