2010-11-19 10 views
5

Ich habe eine XML-Datei, in der ich ein Attribut habe, dessen Wert ein XPath ist, um Inhalt in einem anderen Satz von XML-Dateien zu finden.XML-Schematypdefinition für XPath-Werte?

Beispiel:

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

Diese Datei kann gegen eine XSD validiert werden. Momentan bestätige ich nur, dass der Wert des Attributs eine Zeichenkette ist, aber ich möchte prüfen, ob es ein sintaktisch gültiger XPath-Wert ist.

Gibt es eine XML-Schema-Definition für XPath-Werte?

+1

Perez: RegExp und XPath Grammatik stimmen nicht überein. –

Antwort

3

Es gibt keinen XSD-Datentyp für einen XPATH-Ausdruck.

Das Beste, was Sie wahrscheinlich tun könnten, wäre die Verwendung eines xsd:restriction mit einem xsd:pattern, das ein Regex-Muster verwendet, um zu überprüfen, ob der Zeichenfolgenwert ein XPATH-Ausdruck ist.

Etwas wie folgt aus:

<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> 

Ich bin mir nicht bewusst ein RegexMuster, die bestätigen wird, dass eine bestimmte Zeichenfolge ist ein XPath-Ausdruck zu Referenz.

0

Ich bezweifle, dass XPath Daten ist, nicht XML. Die Spezifikation lautet hier: ht tp://www.w3.org/TR/xpath/

+0

Warum nicht? und xpath Ausdruck ist auch "Information"? :) – redben

+0

xpath ist nicht im XML-Format ausgedrückt, also kein XML-Schema. –

+0

Noch kann man ein Muster implementieren, das mit der richtigen Xpath-Syntax übereinstimmt? redben

0

Sie anyURI mit einem gewissen Muster verwenden könnte, und XPointer

XPointer Beispiel:

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

Letztlich ist die Antwort von redben vorgesehen ist die richtige Antwort (in der Tat habe ich gesehen, es behauptet, und ich glaube, daß Xslt nicht in XSD ausgedrückt werden), aber ich möchte die Aufmerksamkeit auf die xslt xsd ziehen, die für einen XPath-Ausdruck die folgende XSD Definition hat:

<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> 

Während ich weiß, dass diese Frage schon lange nicht mehr aktiv war, dachte ich, dass dies für jeden anderen, der sich mit diesem Thema befassen sollte, lehrreich sein könnte.

Verwandte Themen