您应该使用以下方法检查每个好友id是否都是现有的好友id。您还应该检查好友id是否不等于自身:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:complexType name="FriendsType">
<xs:sequence>
<xs:element ref="FRIEND" maxOccurs="unbounded"/>
</xs:sequence>
<xs:assert test="every $bfid in FRIEND/BEST_FRIEND_ID
satisfies $bfid = (FRIEND/@FRIEND_ID)"/>
<!-- Optional check best friend is not equals to itself -->
<xs:assert test="every $fr in FRIEND
satisfies $fr/@FRIEND_ID != $fr/BEST_FRIEND_ID"/>
</xs:complexType>
<xs:complexType name="FriendType">
<xs:sequence>
<xs:element ref="NAME"/>
<xs:element ref="BEST_FRIEND_ID"/>
</xs:sequence>
<xs:attribute name="FRIEND_ID" type="xs:integer"/>
</xs:complexType>
<xs:element name="FRIENDS" type="FriendsType"/>
<xs:element name="FRIEND" type="FriendType"/>
<xs:element name="NAME" type="xs:string"/>
<xs:element name="BEST_FRIEND_ID" type="xs:integer"/>
</xs:schema>
您还可以检查bestfriend id是否与内部的朋友id不同
FRIEND
标记而不是
FRIENDS
标签
<xs:complexType name="FriendType">
<xs:sequence>
<xs:element ref="NAME"/>
<xs:element ref="BEST_FRIEND_ID"/>
</xs:sequence>
<xs:attribute name="FRIEND_ID" type="xs:integer"/>
<xs:assert test="@FRIEND_ID != BEST_FRIEND_ID"/>
</xs:complexType>