Саксон действительно верен здесь, все непосредственно построенные («встроенные») элементы имеют тип xs:untyped
(или xs:anyType
, если режим построения установлен на сохранение).
Элемент xsi: type не имеет смысла, пока элемент не будет проверен на соответствие вашим схемам. Самый простой способ сделать это - обернуть элемент в выражение проверки:
import schema namespace cdm-base="http://cdm.basic.upc.com" at "file:///Workspace/peal/peal40/trunk/common/schema/cdm-basic.xsd";
declare function local:matchType(
$input as element())
as element(*,cdm-base:ProductComponent)
{
validate { <cdm-base:product xsi:type="cdm-base:ProductComponent" /> }
};
Обратите внимание, что в XQuery 3.0, если вам на самом деле не нужен атрибут xsi:type
, вы можете проверить элемент как определенный тип:
import schema namespace cdm-base="http://cdm.basic.upc.com" at "file:///Workspace/peal/peal40/trunk/common/schema/cdm-basic.xsd";
declare function local:matchType(
$input as element())
as element(*,cdm-base:ProductComponent)
{
validate type cdm-base:ProductComponent { <cdm-base:product /> }
};