2010-11-19 14 views
5

Ho un file XML in cui ho un attributo il cui valore sarà un XPath per individuare il contenuto in un diverso set di file XML.Definizione del tipo di schema XML per i valori XPath?

Esempio:

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <IterestingNode Value="/html/head/title"/> 
</Root> 

Questo file può essere convalidato contro un XSD. Attualmente convalido solo che il valore dell'attributo è una stringa, ma vorrei verificare che sia un valore XPath sintatticamente valido.

Esiste una definizione dello schema XML per i valori XPath?

+1

Perez: RegExp e XPath Grammar non corrispondono. –

risposta

3

Non esiste un tipo di dati XSD per un'espressione XPATH.

Il meglio che si potrebbe probabilmente fare sarebbe quella di utilizzare un xsd:restriction con una xsd:pattern che utilizza un modello di espressione regolare per convalidare che il valore stringa è un'espressione XPath.

Qualcosa di simile a questo:

<xsd:simpleType name="XPathValueType"> 
    <xsd:restriction base="xsd:string"> 
    <xsd:pattern value="**PUT IN SOME REGEX PATTERN TO VERIFY THE STRING IS AN XPATH EXPRESSION**"/> 
    </xsd:restriction> 
</xsd:simpleType> 

io non sono a conoscenza di un modello di espressione regolare che convalidare che un dato stringa è un'espressione XPath per riferimento.

0

Dubito che xpath sia dati, non XML. La specifica è qui: ht tp://www.w3.org/TR/xpath/

+0

Perché no? e l'espressione xpath è anche "informazione"? :) – redben

+0

xpath non è espresso in formato XML, quindi non avrà uno schema XML. –

+0

Ancora uno può implementare un modello che corrisponde alla sintassi xpath corretta no? redben

0

Si potrebbe usare anyURI con un certo modello, e XPointer

XPointer esempio:

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <IterestingNode Value="doc.xml#xpointer(/html/head/title)"/> 
</Root> 
0

In definitiva, la risposta fornita da redben è la risposta corretta (in effetti ho visto ha sostenuto, e credo che XSLT non può essere espressa in XSD), ma vorrei richiamare l'attenzione sulla xslt xsd che ha la seguente definizione XSD per un'espressione XPath:

<xs:simpleType name="expression"> 
    <xs:annotation> 
     <xs:documentation> 
      An XPath 2.0 expression. 
     </xs:documentation> 
    </xs:annotation> 
    <xs:restriction base="xs:token"> 
     <xs:pattern value=".+"/> 
    </xs:restriction> 
</xs:simpleType> 

Mentre mi rendo conto che questa domanda non è stata attiva per molto tempo, ho pensato che questo potesse essere istruttivo per chiunque altro dovesse accadere su questo argomento.

Problemi correlati