自分では直せない問題があります。私のXSDは非常に複雑ですが、ここでは同じ問題を抱えているより単純なコードです。
これはXSDです:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema id="Race"
xmlns:xs = "http://www.w3.org/2001/XMLSchema"
targetNamespace="myrace.org/"
xmlns="myrace.org/"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="race" msdata:IsDataSet="true">
<xs:complexType>
<xs:sequence>
<xs:element name="runner" type="runnerType" maxOccurs="10">
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:keyref name="predecessorKey" refer="runKey">
<xs:selector xpath="runner/predecessor"/>
<xs:field xpath="@foreignKey"/>
</xs:keyref>
<xs:unique name="runIdChecker">
<xs:selector xpath="runner"/>
<xs:field xpath="@primaryKey"/>
</xs:unique>
<xs:unique name="oneToOneChecker">
<xs:selector xpath="runner/predecessor"/>
<xs:field xpath="@foreignKey"/>
</xs:unique>
<xs:key name="runKey">
<xs:selector xpath="runner"/>
<xs:field xpath="@primaryKey"/>
</xs:key>
</xs:element>
<xs:complexType name="runnerType">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
<xs:element name="predecessor" type="predecessorType" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="primaryKey" type="xs:long" use="required"/>
</xs:complexType>
<xs:complexType name="predecessorType">
<xs:attribute name="foreignKey" type="xs:long" use="required"/>
</xs:complexType>
</xs:schema>
XSDは正常に機能しますが、2つの同様のprimaryKeyを書き込むとエラーが発生するはずですが、そうではありません。
一方、頭を次のように変更した場合:
<xs:schema id="Race"
xmlns:xs = "http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
それが動作します。しかし、私のグローバルプロジェクトとの一貫性の理由から、ヘッドを変更することはできず、最初のコードと同等のXSD->XML間の接続を定義する必要があります。
誰かが私の問題が何であり、私が何ができるかについて何か考えを持っていますか?
ありがとう
ベンジャミン