2009-06-01 16 views
1

Ich versuche, mit Typen zu wählen Elemente, die Untertypen sind, so habe ich ein Testdokument mit Untertypen von xs: Ganzzahl und xs: float.So richten Sie Schema-aware XQuery ein

Wie kann ich XQuery mitteilen, dass die in meinem Schema definierten Typen verwendet werden sollen?

(Es könnte von Bedeutung sein, dass ich oXygen und Saxon-SA bin mit)

Eingabedokument:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="test-inherit.xsd"> 
    <int>4</int> 
    <rest-int>5</rest-int> 
    <rest-float>6</rest-float> 
</root> 

WXS Schema:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="int" type="xs:integer"/> 
       <xs:element name="rest-int" type="rest-int"/> 
       <xs:element name="rest-float" type="rest-float"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:simpleType name="rest-int"> 
     <xs:restriction base="xs:integer"> 
      <xs:maxInclusive value="10"></xs:maxInclusive> 
      <xs:minInclusive value="0"></xs:minInclusive> 
     </xs:restriction> 
    </xs:simpleType> 

    <xs:simpleType name="rest-float"> 
     <xs:restriction base="xs:float"> 
      <xs:maxInclusive value="10"></xs:maxInclusive> 
      <xs:minInclusive value="0"></xs:minInclusive> 
     </xs:restriction> 
    </xs:simpleType> 

</xs:schema> 

XQuery:

for $integer in doc("test-inherit.xml")//element(xs:integer) 
return <integer>{$integer}</integer> 

Antwort

1

Sie müssen import t das Schema in Ihrer XQuery. Wenn Sie möchten, dass das geladene Dokument für dieses Schema validiert wird (und den Dokumentknoten entsprechend zugeordnete Schematypen), müssen Sie den Ausdruck validate Ausdruck:

import schema default element namespace "" at "myschema.xsd"; 
for $integer in (validate { doc("test-inherit.xml") })//schema-element(int) 
return <integer>{$integer}</integer> 
verwenden
Verwandte Themen