Xml 如何在xsd上为属性定义不同的作用域?

Xml 如何在xsd上为属性定义不同的作用域?,xml,xsd,schema,Xml,Xsd,Schema,元素上有name属性。此name属性在Package元素中必须是唯一的 但类内元素名称属性可能会在另一个类元素上重复,如 <Metamodel> <Package Name="serhat"> <OwnedType> <Class Name="serhat"></Class> </OwnedType> </Package> <Package Name="serhat2

元素上有name属性。此name属性在Package元素中必须是唯一的 但类内元素名称属性可能会在另一个类元素上重复,如

<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>
<?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>
<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.