2012-11-12 10 views
5

Chciałbym utworzyć ograniczenie dla typu XSD, aby umożliwić tylko element o rozmiarze od 0 do 64, kropkę i inny element o rozmiarze od 0 do 64 Próbowałem tego, ale bez powodzenia.Wyrażenie regularne w schemacie XSD: mix i maksymalny rozmiar dwóch połączonych elementów

<xs:simpleType name="myString_Type"> 
     <xs:restriction base="xs:string"> 
      <xs:pattern value="^([a-zA-Z\-]){0-64}.$([a-zA-Z\-]){0-64}"/> 
     </xs:restriction> 
</xs:simpleType> 

Dzięki.

+1

Chyba masz na myśli: [ '^ [a-zA-Z -] {0,64} [ .] [a-zA-Z-] {0,64} $ '] (http://regex101.com/r/yQ3jE7) – NullUserException

+0

Tak, masz rację i bardzo szybko! Dzięki! –

Odpowiedz

4

i $ nie są używane do wyrażeń regularnych w XSD - zawsze pasuje od początku i końca, tak jakby były tam. Dlatego właśnie je pominąć:

[a-zA-Z\-]{0,64}\.[a-zA-Z\-]{0,64} 

i uciec z . (lub użyć klasę postaci jak NullUserException powiedział).

Z XML Schema part 2: datatypes specyfikacji:

przeciwieństwie do niektórych popularnych języków wyrażeń regularnych (w tym te określone przez Perl i standardowych narzędzi Unix), regularne język wyrażenie zdefiniowane tu niejawnie zakotwicza wszystkich wyrażeń regularnych na głowę i ogon, Najczęstszym zastosowaniem wyrażeń regularnych w · wzorzec · jest dopasowanie do wszystkich literałów.

Ich przykładem jest użycie A.*Z nie ^A.*Z$

Ponieważ ^ i $ nie są znaki specjalne, to będzie po prostu spróbować dopasować je w dokumencie XML.

Mówi się, że unix to zbiór niekompatybilnych składni wyrażeń regularnych, więc nie stosując się do standardu unix, podążają za tradycją unix.


Można przetestować ten przykład na: http://www.utilities-online.info/xsdvalidation/ (przykład z testów NullUserException)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="eg" type="myString_Type"/> 

    <xs:simpleType name="myString_Type"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[a-zA-Z\-]{0,64}\.[a-zA-Z\-]{0,64}"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

<eg>something.something-else</eg> 
+2

Nie musisz uciekać z tego myślnika ('[a-zA-Z-]' powinno działać) – NullUserException

+0

Tak, również miałeś to w swojej odpowiedzi. Twoja droga wygląda na czystszą, ale wydaje mi się, że wyjątkowa semantyka zapewnia wyjątkową składnię. Twoja droga to wyjątek od wyjątku - mądrzejszy, bardziej złożony i bardziej czytelny dla czytelnika. Rozsądne osoby mogą się nie zgodzić, co jest ważniejsze! BTW: Naprawdę podobało mi się twoje użycie testera regex online ([tutaj] (http://regex101.com/r/yQ3jE7), jest prawdopodobnie jeden do testowania xsd ... um najlepiej znalazłem jest http: // www.utilities-online.info/xsdvalidation/#.UKJI_2ZCOBs, ale nie w pobliżu tak dobrze jak narzędzie regex. Dodam mój przykład: – 13ren

+0

@NullUserException BTW Myślę, że prawdziwy problem z regex jest testowanie ich. być pewnym, co zaakceptują, a co nie, jest to z natury trudne, ponieważ regex jest już optymalnie zwartym sposobem na wyrażenie języka, który akceptują/dopasowują, więc myślę, że po prostu musisz je zrozumieć. zawsze trudne, nawet dla ekspertów, stąd też "2 problemy" jwz. Twoje narzędzie do wyrażania pomaga w zrozumieniu i testowaniu konkretnych instancji ... ale zastanawiam się, czy istnieje sposób na zapewnienie większej pomocy w sprawdzaniu ich języka (co one pasują) , ogólnie... – 13ren

Powiązane problemy