현재 Eclipse Modeling Framework를 사용하여 XML 스키마를 ECore로 변환하려고합니다. EMF는 속성이 EReference로 변환되어야 함을 나타내는 속성을 제공합니다. 그러나이 속성이 IDREF 또는 anyURI 유형 인 경우에만 작동합니다. 내 문제는 IDREF를 통해 참조 된 모든 ID가 전체 XML 문서에서 고유해야한다는 것입니다.XSD를 ECore로 변환
<A id="a1">
<B id="b1">
<ref idref="b2" />
</B>
<B id="b2">
<ref idref="b1" />
</B>
</A>
<A id="a2">
<B id="b1">
<ref idref="b2" />
</B>
<B id="b2">
<ref idref="b1" />
</B>
</A>
B-elelemts의 ID가을 sourrounding A-요소 내부에서만 고유 :하지만, 내 XML은 다음과 같은 구조를 가지고 있습니다. 따라서 파서는 B 요소의 ID를 유형 ID로 선언하면 오류가 발생합니다.
idref가 동일한 A 요소에 속한 B 요소의 속성 ID에 대한 참조임을 EMF에 어떻게 알릴 수 있습니까?
귀하는 완전히 옳습니다. 사실, 내 스키마에서 key/keyref를 사용하고 있습니다. EMF가 생성하는 것을보기 위해 ID/IDREF를 시도했습니다. 하지만 정말로 필요한 것은 key/keyref입니다. 나는 일시적인 참조에 대해 이미 읽었습니다. 그들이 무엇인지 설명해 주시겠습니까? 만약 당신이 정확하게 내 유일한 해결책을 수동으로 생성 된 코드를 편집 이해합니다. 이게 옳은 거니? – mupro
일시적인 참조는 XML serializer에서 직렬화되지 않는 참조입니다. 예, 솔루션은 두 명의 setter 및 getter에 대해 생성 된 코드를 특수화하는 것입니다. 당신이 참조를 해결하고 참조 된 것의 이름 (id)을 변경하는 것과 같은 작업이 필요한 까다로운 일들은 새로운 이름이 자동으로 직렬화되기를 바라겠습니까? 시도 할 수있는 가장 간단한 방법은 변경 가능한 false를 가진 일시적인 참조입니다. 따라서 getter 만 있고 setter가 없으며 해당 메서드에서 idref를 해결하기위한 모든 논리를 넣을 수 있습니다. –