推奨される方法は、unique/key/keyref コンストラクトを使用することです。この変更された XML を考慮して (ドキュメント要素を追加するため):
<Document>
<state id="1" name="S1"/>
<state id="2" name="S2"/>
<state id="3" name="S3"/>
<transition fromState="1" toState="2"/>
</Document>

この XSD はまさにあなたが望むことを行います:
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Document">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="state">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:unsignedByte" use="required"/>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="transition">
<xsd:complexType>
<xsd:attribute name="fromState" type="xsd:unsignedByte" use="required"/>
<xsd:attribute name="toState" type="xsd:unsignedByte" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="PKStates">
<xsd:selector xpath="state"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:keyref name="FKTransitionToStatesFrom" refer="PKStates">
<xsd:selector xpath="transition"/>
<xsd:field xpath="@fromState"/>
</xsd:keyref>
<xsd:keyref name="FKTransitionToStatesTo" refer="PKStates">
<xsd:selector xpath="transition"/>
<xsd:field xpath="@toState"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>

図を見ると、セレクターがどのように機能するかをより簡単に視覚化できます。これを使用することに決め、XSD にターゲット名前空間があり、要素や属性を修飾する場合は、必ず targetNamespace のプレフィックスを宣言し、XPath でそのプレフィックスを使用してください。
一般に、関連する XSD に基づいて XML 編集を容易にするために、この情報 (キー/キー参照) を使用してコンテンツ アシスト リストを作成する方法を知っているツールは多くありません。通常、特殊な性質を持つエディターは、XSD のみからの推論ではなく、ハードワイヤードの実装に基づいてそれを行います。