2016-11-08 6 views
0

のない任意のOR素子私はこのXMLを持っている::名前

<hierarchy> 
    <unix launcher="LauncherUnix"> 
     <linux/> 
     <aix/> 
    </unix> 
    <bdd> 
     <oracle launcher="LauncherOracle"/> 
     <mysql launcher="LauncherMySQL"/> 
    </bdd> 
</hierarchy> 

これは単純な木であり、私はXSDでそれを検証します。主なスキームは、ルート要素名hierarchyであり、その後、属性があるlauncherという名前のタグがいくつかあるだけです。

私はこのようなxs:anyにタイプを設定しよう:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="hierarchy" type="nodeHierarchy"/> 

    <xs:complexType name="nodeHierarchy"> 
     <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
      <xs:any type="nodeHierarchy"/> 
     </xs:sequence> 
     <xs:attribute name="launcher" use="optional"/> 
    </xs:complexType> 

</xs:schema> 

しかしxs:anyが型を持つことができないので、私はエラーを取得します。この後、私はこのようなxs:elementxs:anyを変更しよう:問題がtahtさ

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="hierarchy" type="nodeHierarchy"/> 

    <xs:complexType name="nodeHierarchy"> 
     <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
      <xs:element type="nodeHierarchy"/> 
     </xs:sequence> 
     <xs:attribute name="launcher" use="optional"/> 
    </xs:complexType> 

</xs:schema> 

xs:elementは名前を持っている必要があります。

シンプルなxsdでこの問題を解決できますか?

答えて

1

この問題を単純なxsdで解決することはできますか?

シンプル?いいえ。しかし、代替グループでは可能です。

あなたが基本的に望むのは、特定のタイプ(および場合によってはサブタイプ)の要素を持ち、異なる名前を持つことです。 _nodeを置き換えることができ

<xsd:complexType name="nodeHierarchy"> 
    <xsd:sequence> 
     <xsd:element ref="_node" minOccurs="0" maxOccurs="unbounded"/> 
    </xsd:sequence> 
    <xsd:attribute name="launcher" use="optional"/> 
</xsd:complexType> 

はその後の要素を定義します:あなたは、あなたの複合型では、この要素を参照することができ

<xsd:element name="_node" type="nodeHierarchy" abstract="true"/> 

<xsd:element name="oracle" type="nodeHierarchy" substitutionGroup="_node"/> 
<xsd:element name="mysql" type="nodeHierarchy" substitutionGroup="_node"/> 

は、所望のタイプの抽象要素を定義します。

これらの要素は、どこでも使用されています。

私の見解では、これは最良のスキーマ設計ではありません。 XML要素名にビジネスロジックを実装しないでください。