일반 그래프를 설명하는 EMF 용 스키마를 작성하고 있습니다. 문제는 이것이 directed graph 인 경우 에지는 src_node 및 dst_node의 속성을 가져야하며 그렇지 않은 경우 node_one 및 node_two가 있어야한다는 것입니다. 나는 "선택 사항"을 사용하여 상호 배타적 인 요소를 사용하려고 시도했지만 EMF에서는 "시퀀스"와 동일하게 기능합니다. 예컨대 NodeProperty<choice>은 EMF 용 xsd 스키마를 작성할 때 지원하지 않습니다.
<xsd:complexType name="NodeProperty">
<xsd:choice>
<xsd:element name="StringValue" type="xsd:string"/>
<xsd:element name="IntValue" type="xsd:int"/>
<xsd:element name="DoubleValue" type="xsd:double"/>
</xsd:choice>
<xsd:attribute name="Property" type="xsd:string"/>
</xsd:complexType>
substitutionGroup의 또 다른 문제에 대한 유사한 문제는 src_node 및 dst_node는 EMF에 의해 해결되지 않은 때문일 주장하는 것입니다. 전체 코드 :
<?xml version="1.0" encoding="UTF-8"?>
<xsd:simpleType name="GraphType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Directed"/>
<xsd:enumeration value="Undirected"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="NodeProperty">
<xsd:choice>
<xsd:element name="StringValue" type="xsd:string"/>
<xsd:element name="IntValue" type="xsd:int"/>
<xsd:element name="DoubleValue" type="xsd:double"/>
</xsd:choice>
<xsd:attribute name="Property" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="Node">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0"
name="Node" type="lib:NodeProperty"/>
</xsd:sequence>
<xsd:attribute name="NodeName" type="xsd:string" />
</xsd:complexType>
<xsd:element name="src_node" type="xsd:anyURI" ecore:reference="lib:Node"/>
<xsd:element name="node_one" type="xsd:anyURI" substitutionGroup="src_node"/>
<xsd:element name="dst_node" type="xsd:anyURI" ecore:reference="lib:Node"/>
<xsd:element name="node_two" type="xsd:anyURI" substitutionGroup="dst_node"/>
<xsd:complexType name="Edge">
<xsd:sequence>
<xsd:element ref="src_node"/>
<xsd:element ref="dst_node"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="GeneralGraph">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="type" type="lib:GraphType"/>
<xsd:element name="NodeList">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0"
name="Node" type="lib:Node"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="EdgeList">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0"
name="Edge" type="lib:Edge"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
감사합니다. 나는 당신의 제안을 따랐고 SubstionGroup은 괜찮습니다. 그러나 EMF는 여전히 src_node 오류를 주장하고 dst_node는 해결되지 않았습니다. 내 질문에 위의 코드를 추가했습니다. @lexicore – Yong
@Yong 네임 스페이스 때문에 어쩌면 말하기가 어렵습니다. – lexicore
감사합니다. 네, 맞습니다. 네임 스페이스 "lib : src_node"를 추가 한 후에 작동하지만 불행하게도 EMF에서는 여전히 src_node 및 dst_node 만 편집기에 표시됩니다. EMF가 substitutionGroup과 "choice"를 지원할 수 있는지 여부를 알고 있습니까? 다시 한 번 감사드립니다! @lexicore – Yong