È possibile verificare un'espressione XPath rispetto a un documento XML per verificarlo, ma esiste un modo semplice per verificare la stessa espressione XPath rispetto allo schema per tale documento?Posso convalidare un'espressione XPath su uno schema XML?
Dire che ho uno schema XSD come questo:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ... etc>
<xsd:element name="RootData">
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element name="FirstChild">
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element name="FirstGrandChild">
... etc etc
C'è un modo facile o built-in per verificare che il XPath:
/RootData/FirstChild/FirstGrandChild
sarebbe valido contro tutti i documenti XML che può essere basato su quello schema? (Edit: Credo che voglio dire potenzialmente valida; il documento XML attuale potrebbe non contenere quegli elementi, ma che XPath potrebbe ancora essere considerata potenzialmente valida per lo schema considerando che, per esempio, /RootData/ClearlyInvalidChild/ThisElementDoesntExistEither
è chiaramente valido..)
Ovviamente potrei aspettarmi che funzioni su espressioni XPath canoniche piuttosto che su una complessità arbitraria, ma va bene.
Sto pensando in particolare a .NET ma sono curioso di sapere se altre implementazioni lo rendono possibile. Non è così importante che voglio rotolare il mio, per esempio io non voglia di scrivere il mio codice per trasformare questa espressione XPath in un altro come:
/xsd:schema/xsd:element[@name='RootData']/xsd:complexType/xsd:sequence/xsd:element[@name='FirstChild']/...etc...
... anche se so che potrei fallo se dovessi davvero.
Cheers!
Tale XPath ad es. Non sarà valido contro * qualsiasi * documento basato su tale XSD - se FirstChild (o FirstGrandChild) si verificano 0 volte, quindi non sono sicuro di cosa si sta cercando. Forse vuoi dire che un XPath potrebbe essere valido contro * alcuni * documenti basati su quello schema. Si prega di precisare. – 13ren
Ovviamente intendo "potenzialmente valido". Questo è un po 'quello che stavo ottenendo facendo riferimento a XPath canonico, ma ho modificato per chiarire che sto assumendo anche un possibile documento XML. – Gavin
Non sono sicuro che le "espressioni XPath canoniche" abbiano una definizione tecnica precisa - la mia ipotesi era che intendevi nomi semplici senza vincoli. BTW: per i nomi semplici, quella trasformazione è semplice con le espressioni regolari (ma sfortunatamente non funzionerà per i tipi nominati, perché non sono nidificati) – 13ren