我相信你想要的不在屬性中,而是在身份約束中。因此,生成的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.
相當不錯的解決方案:) – 2012-02-24 03:59:15