ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
1408
1408
EMPFEHLEN
-
Hallo zusammen!
Ich habe leider folgendes Problem:
Ich möchte gern mit Hilfe von Schematron eine Fehlermeldung ausgeben, wenn im Dateiname (Document_number) an der 21-23. Stelle nicht "ELV" oder "ELX" oder "ELZ" geschrieben ist. D.h. man müsste vielleicht nur die 23.Stelle nach [VXZ] abfragen, das habe ich aber leider nicht hinbekommen
hier die XML:
Das funktioniert aber leider nicht so wie gedachtCode xml:1 2 3 4 5 6 7 8 9 10 11 12 13 14
<kbl:KBL_container> <External_reference> <Document_type>KAB</Document_type> <Document_number>TAB_886_016_JK_KPR_ELV_____300611</Document_number> </External_reference> </kbl:KBL_container> hier mein Versuch in Schematron: <pattern> <rule context="//External_reference[Document_type='KAB']"> <assert test="contains(Document_number, '[E][L][VX]'"> Achtung! </assert> </rule> </pattern>

Kann mir jemand helfen?
Viele GrüßeGeändert von sabine84 (03.01.12 um 16:57 Uhr) Grund: Codetags
-
03.01.12 16:32 #2
- Registriert seit
- Dec 2011
- Beiträge
- 30
Welche XPath-Version verwendest du mit Schematron? XPath 1.0 hat keine Unterstützung für reguläre Ausdrücke, die du im Titel deines Posts erwähnst. Für deine Anforderung reicht aber eventuell substring http://www.w3.org/TR/xpath/#function-substring
Code :1
<assert test="substring(Document_number, 21, 3) = 'ELV' or substring(Document_number, 21, 3) = 'ELX' or substring(Document_number, 21, 3) = 'ELZ'"/>
-
Hi!
Ich verwende XPath 2.0
Würde es gern über reguläre Ausdrücke abfragen, da ich wenn dies einmal funktioniert noch mehrere Stelle im Name abfragen möchste.
Viele Grüße
-
03.01.12 17:05 #4
- Registriert seit
- Dec 2011
- Beiträge
- 30
Mit XPath 2.0 gibt es eine matches-Funktion http://www.w3.org/TR/xpath-functions/#func-matches, also etwa (ungetestet)
testet, ob nach zwanzig beliebigen Zeichen die zwei Buchstaben "EL" gefolgt von "V" oder "X" oder "Z" vorkommen.Code :1
<assert test="matches(Document_number, '^.{20}EL(V|X|Z)')"/>
-
Hi!
Danke für die schnelle Hilfe!
Scheinbar unterstützt zwar der Oxygen Editor das XPath2.0 aber Schematron nicht.
Ich habe es so versucht wie oben beschrieben, aber Fehlermeldung:
# W [ISO Schematron] Error in expression machtes (Document_number,'^.{20}EL(V|X|Z)'): Unknown system function: matches
Kann ich noch was anderes versuchen?
-
03.01.12 19:12 #6
- Registriert seit
- Dec 2011
- Beiträge
- 30
So die matches-Funktion nicht erkannt wird, wird deine Schematron-Implementierung wohl nur XPath 1.0 unterstützen. Unter http://www.xfront.com/schematron/sch...nd-xpath2.html wird erklärt, man könne das für Oxygen konfigurieren
Ansonsten frag eventuell in einem Oxygen-Forum nach, so sich hier niemand meldet, der sich damit auskennt.Code :1 2 3 4 5
To switch to XPath 2.0 do this: Under Oxygen's Options menu, select Preferences Under XML, select XML Parser Under "Schematron XPath Version", click on 2.0
-
Ich habe auf XPath 2.0 umgestellt. Die Funktion matches geht leider trotzdem nicht.
Geändert von sabine84 (04.01.12 um 09:43 Uhr)
-
04.01.12 13:48 #8
- Registriert seit
- Dec 2011
- Beiträge
- 30
Ich habe Schematron bisher nicht mit XPath bzw. XSLT 2.0 benutzt, aber ich habe jetzt mal probeweise http://www.schematron.com/tmp/iso-schematron-xslt2.zip heruntergeladen und dann mit Hilfe von Saxon 9.3 und http://www.dpawson.co.uk/schematron/ folgendes Beispiel probiert: das Schematron-Schema ist
ein Beispiel-Dokument, das geprüft werden soll, istCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2" schemaVersion="ISO19757-3"> <title>Testing matches function</title> <pattern> <rule context="foo"> <assert test="matches(bar, '^[A-Z]{5}[0-9]{3}$')">Pattern matches(bar, '^[A-Z]{5}[0-9]{3}$') needs to be matched.</assert> </rule> </pattern> </schema>
das funktioniert bei mir dann reibungslos, wenn man in zwei Schritten erst das Schema verarbeitet und dann das im ersten Schritt erhaltene XSLT-Stylesheet auf das XML-Dokument anwendet, Ausgabe ist dannCode :1 2 3 4 5 6 7 8
<root> <foo> <bar>ABCDE123</bar> </foo> <foo> <bar>12345678</bar> </foo> </root>
Mit Oxygen kann ich nicht helfen, da solltest du unter http://www.oxygenxml.com/forum/ nach einem geeigneten Forum suchen, so hier keine anderen Oxygen-Benutzer lesen, die helfen können.Code :1
Pattern matches(bar, '^[A-Z]{5}[0-9]{3}$') needs to be matched.
Ähnliche Themen
-
Reguläre Ausdrücke in VBA
Von Trash im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 06.01.09, 12:43 -
Reguläre Ausdrücke
Von Steusi im Forum Coders TalkAntworten: 4Letzter Beitrag: 11.12.08, 13:01 -
Reguläre Ausdrücke
Von Binio im Forum PHPAntworten: 14Letzter Beitrag: 17.09.08, 16:44 -
Reguläre Ausdrücke
Von philBerlin im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 4Letzter Beitrag: 28.02.08, 13:11 -
Reguläre Ausdrücke
Von son gohan im Forum PHPAntworten: 6Letzter Beitrag: 16.02.06, 23:46





Zitieren
Login





