2012-02-23 7 views
3
<Metamodel> 
    <Package Name="serhat"> 
    <OwnedType> 
     <Class Name="serhat"></Class> 
    </OwnedType> 
    </Package> 
    <Package Name="serhat2"> 
    <OwnedType> 
     <Class Name="serhat"></Class> 
    </OwnedType> 
    </Package> 
    <Class Name="serhat"></Class> 
</Metamodel> 

私は要素に名前属性を持っています。この名前属性は、パッケージ要素 では一意でなければなりませんが、クラス要素名属性は次のような別のクラス要素で繰り返すことができます。xsdの属性に異なるスコープを定義するにはどうすればよいですか?

<Package Name="serhat"> 
    <OwnedType> 
     <Class Name="serhat"></Class> 
    </OwnedType> 
    </Package> 
    <Package Name="serhat2"> 
    <OwnedType> 
     <Class Name="serhat"></Class> 
    </OwnedType> 
    </Package> 

この属性はどのように定義できますか?

答えて

2

私は、あなたが望むのは属性ではなく、アイデンティティの制約であると信じています。だから、生成されたXSDが(私はパッケージの下のクラスは、何らかの形で繰り返す必要がありますと仮定)、次のようになります。

<?xml version="1.0" encoding="utf-8"?> 
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)--> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Metamodel"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element maxOccurs="unbounded" name="Package"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <xsd:element name="OwnedType"> 
           <xsd:complexType> 
            <xsd:sequence> 
             <xsd:element ref="Class" maxOccurs="unbounded"/> 
             </xsd:sequence> 
           </xsd:complexType> 
          </xsd:element> 
         </xsd:sequence> 
         <xsd:attribute name="Name" type="xsd:string" use="required"/> 
        </xsd:complexType> 
        <xsd:unique name="ClassNameUniqueInPackage"> 
         <xsd:selector xpath="OwnedType/Class"/> 
         <xsd:field xpath="@Name"/> 
         </xsd:unique> 
       </xsd:element> 
       <xsd:element ref="Class"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="Class"> 
     <xsd:complexType> 
      <xsd:attribute name="Name" type="xsd:string" use="required"/> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 
これにより

は、モデルを想定し、次のXMLが検証されます:

<Metamodel> 
    <Package Name="serhat"> 
     <OwnedType> 
      <Class Name="serhat"></Class> 
      <Class Name="serhat2"></Class> 
     </OwnedType> 
    </Package> 
    <Package Name="serhat2"> 
     <OwnedType> 
      <Class Name="serhat"></Class> 
     </OwnedType> 
    </Package> 
    <Class Name="serhat"></Class> 
</Metamodel> 

ではなく、この:

<Metamodel> 
    <Package Name="serhat"> 
     <OwnedType> 
      <Class Name="serhat"></Class> 
      <Class Name="serhat"></Class> 
     </OwnedType> 
    </Package> 
    <Package Name="serhat2"> 
     <OwnedType> 
      <Class Name="serhat"></Class> 
     </OwnedType> 
    </Package> 
    <Class Name="serhat"></Class> 
</Metamodel> 

エラーは次のようになります。

Error occurred while loading [], line 5 position 5 
There is a duplicate key sequence 'serhat' for the 'ClassNameUniqueInPackage' key or unique identity constraint. 
+0

かなり良い解決策:) –

関連する問題