import schema namespace ipo="http://www.example.com/IPO"; import schema namespace pst="http://www.example.com/postals"; import schema namespace zips="http://www.example.com/zips"; import module namespace zok="http://www.example.com/xq/zips"; import module namespace pok="http://www.example.com/xq/postals"; declare function local:address-ok($a as element(*, ipo:Address)) as xs:boolean { typeswitch ($a) case $zip as element(*, ipo:USAddress) return zok:zip-ok($zip) case $postal as element(*, ipo:UKAddress ) return pok:postal-ok($postal) default return false() }; for $p in doc("ipo.xml")//element(ipo:purchaseOrder) where not( local:address-ok($p/shipTo) and local:address-ok($p/billTo)) return $p