Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I'm pretty sure I have already done what you are trying to achieve here. The trick is to define the unique, key and keyref constraints at a higher level (srs element in your case). Here is some code sample which checks the "requires" elements have been defined in an item/@name :</p> <p>Note how the constraints are defined at the items level.</p> <pre><code>&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"&gt; &lt;xs:element name="item"&gt; &lt;xs:complexType&gt; &lt;xs:sequence&gt; &lt;xs:element ref="special" minOccurs="0" maxOccurs="unbounded"/&gt; &lt;xs:element ref="requires" minOccurs="0" maxOccurs="unbounded"/&gt; &lt;/xs:sequence&gt; &lt;xs:attribute name="name" type="xs:string" use="required"/&gt; &lt;xs:attribute name="mana" type="xs:int"/&gt; &lt;xs:attribute name="life" type="xs:int"/&gt; &lt;xs:attribute name="manaRegen" type="xs:int"/&gt; &lt;xs:attribute name="hitRegen" type="xs:int"/&gt; &lt;xs:attribute name="damage" type="xs:int"/&gt; &lt;xs:attribute name="armor" type="xs:int"/&gt; &lt;xs:attribute name="attackSpeed" type="xs:int"/&gt; &lt;xs:attribute name="moveSpeed" type="xs:int"/&gt; &lt;xs:attribute name="str" type="xs:int"/&gt; &lt;xs:attribute name="agi" type="xs:int"/&gt; &lt;xs:attribute name="int" type="xs:int"/&gt; &lt;xs:attribute name="cost" type="xs:int" use="required"/&gt; &lt;xs:attribute name="image"/&gt; &lt;/xs:complexType&gt; &lt;/xs:element&gt; &lt;xs:element name="items"&gt; &lt;xs:complexType&gt; &lt;xs:sequence&gt; &lt;xs:element ref="shop" maxOccurs="unbounded"/&gt; &lt;/xs:sequence&gt; &lt;xs:attribute name="version" type="xs:string"/&gt; &lt;/xs:complexType&gt; &lt;xs:unique name="uniqueItemNames"&gt; &lt;xs:selector xpath="shop/item"/&gt; &lt;xs:field xpath="@name"/&gt; &lt;/xs:unique&gt; &lt;xs:unique name="uniqueShopNames"&gt; &lt;xs:selector xpath="shop"/&gt; &lt;xs:field xpath="@name"/&gt; &lt;/xs:unique&gt; &lt;xs:key name="itemKey"&gt; &lt;xs:selector xpath="shop/item"/&gt; &lt;xs:field xpath="@name"/&gt; &lt;/xs:key&gt; &lt;xs:keyref name="requiresValue" refer="itemKey"&gt; &lt;xs:selector xpath="shop/item/requires"/&gt; &lt;xs:field xpath="."/&gt; &lt;/xs:keyref&gt; &lt;/xs:element&gt; &lt;xs:element name="requires" type="xs:string"/&gt; &lt;xs:element name="shop"&gt; &lt;xs:complexType&gt; &lt;xs:sequence&gt; &lt;xs:element ref="item" maxOccurs="unbounded"/&gt; &lt;/xs:sequence&gt; &lt;xs:attribute name="name" type="xs:string" use="required"/&gt; &lt;/xs:complexType&gt; &lt;/xs:element&gt; &lt;xs:simpleType name="specialType"&gt; &lt;xs:restriction base="xs:string"&gt; &lt;xs:enumeration value="Activate"/&gt; &lt;xs:enumeration value="Aura"/&gt; &lt;xs:enumeration value="Effect"/&gt; &lt;xs:enumeration value="Orb"/&gt; &lt;xs:enumeration value="Info"/&gt; &lt;/xs:restriction&gt; &lt;/xs:simpleType&gt; &lt;xs:element name="special"&gt; &lt;xs:complexType&gt; &lt;xs:simpleContent&gt; &lt;xs:extension base="xs:string"&gt; &lt;xs:attribute name="type" type="specialType" use="required"/&gt; &lt;xs:attribute name="mana" type="xs:int"/&gt; &lt;xs:attribute name="cooldown" type="xs:int"/&gt; &lt;xs:attribute name="chance" type="xs:int"/&gt; &lt;/xs:extension&gt; &lt;/xs:simpleContent&gt; &lt;/xs:complexType&gt; &lt;/xs:element&gt; &lt;/xs:schema&gt; </code></pre> <p>XML Sample :</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dota.xsd" version="6.52d"&gt; &lt;shop name="Leragas The Vile"&gt; &lt;item name="Demon's Edge" image="FrostMourne.gif" cost="2600" damage="36"/&gt; &lt;item name="Eaglehorn" image="INV_Weapon_Bow_06.gif" cost="3300" agi="25"/&gt; &lt;item name="Messerschmidt's Reaver" image="SpiritWalkerMasterTraining.gif" cost="3200" str="25"/&gt; &lt;item name="Sacred Relic" image="StaffOfTeleportation.gif" cost="3800" damage="60"/&gt; &lt;item name="Hyperstone" image="Periapt1.gif" cost="2100" attackSpeed="55"/&gt; &lt;item name="Ring of Health" image="GoldRing.gif" cost="875" hitRegen="5"/&gt; &lt;item name="Void Stone" image="Periapt.gif" cost="875" manaRegen="100"/&gt; &lt;item name="Mystic Staff" image="StaffOfNegation.gif" cost="2700" int="25"/&gt; &lt;item name="Energy Booster" image="EnchantedGemstone.gif" cost="1000" mana="250"/&gt; &lt;item name="Point Booster" image="UsedSoulGem.gif" cost="1200" life="200" mana="150"/&gt; &lt;item name="Vitality Booster" image="SoulGem.gif" cost="1100" life="250"/&gt; &lt;/shop&gt; &lt;shop name="Level 1 (Human) Recipes"&gt; &lt;item name="Perseverance" image="OrbOfFire.gif" cost="0" damage="10" hitRegen="5" manaRegen="125"&gt; &lt;requires&gt;Ring of Health&lt;/requires&gt; &lt;requires&gt;Void Stone&lt;/requires&gt; &lt;/item&gt; &lt;item name="Headdress of Rejuvenation" image="INV_Helmet_17.gif" cost="225" agi="2" int="2" str="2"&gt; &lt;special type="Aura"&gt;+2 HP/Sec regen (500 AoE)&lt;/special&gt; &lt;requires&gt;Ring of Regeneration&lt;/requires&gt; &lt;requires&gt;Ironwood Branch&lt;/requires&gt; &lt;/item&gt; &lt;/shop&gt; &lt;/items&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload