У меня есть этот XSDключ, KeyRef тег в XSD
<xs:schema version="1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="foo">
<xs:complexType>
<xs:choice>
<xs:element name="bar"
minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id"
use="required"
type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="batz"
minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="idref"
use="required"
type="xs:string" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:key name="ID">
<xs:selector xpath="./bar" />
<xs:field xpath="@id" />
</xs:key>
<xs:keyref name="IDREF" refer="ID">
<xs:selector xpath="./batz" />
<xs:field xpath="@idref" />
</xs:keyref>
</xs:element>
</xs:schema>
и у меня есть эти два XML, которые используют этот XSD как validaion:
первый
<?xml version="1.0" encoding="UTF-8"?>
<foo xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:noNamespaceSchemaLocation=
'file:/home/tareq/NetBeansProjects/HTML5Application/public_html/refTest.xsd'>
<bar id="1"/>
<bar id="2"/>
</foo>
второй:
<?xml version="1.0" encoding="UTF-8"?>
<foo xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:noNamespaceSchemaLocation =
'file:/home/tareq/NetBeansProjects/HTML5Application/public_html/refTest.xsd'>
<batz idref="1" /> <!-- this should succeed because <bar id="1"> exists -->
<batz idref="3" /> <!-- this should FAIL -->
</foo>
проверка правильности ошибки и правильная работа при замене choice
t ag с тегом sequence
, и я пишу два xml в одном xml.
проблема возникает в этом xsd, я имею в виду, что два xml не могут быть ref/keyref между собой.
вот что я сейчас вижу, и вот что я пытаюсь сделать с 3 дней.