Próbuję zdefiniować identyfikator id atrybutu jednego z tagów. Dokumentacja i mandaty schematu XSD Aby potwierdzić zestaw identyfikatora za pomocą xs:id.

Próbowałem "ID_123", który działał, ale kiedy próbowałem "123", to nie. I Googled z opcjami i kilkoma przykładami, ale nie mogłem znaleźć niczego oprócz tekstu napisanego Oto.

Czy niektórzy mogą podać kilka przykładów tutaj i jakie postacie są dozwolone? Do mojego zrozumienia, wszelkie znaki alfanumeryczne powinny działać, ale wydaje się, że powinna być kombinacja alfabetów (lub słowa ID?) I liczby.

1
Atihska 14 kwiecień 2021, 21:17

1 odpowiedź

Najlepsza odpowiedź

W3C XML Schema Definicja Język (XSD) 1.1 Część 2: Datatypy definiuje {{x0 }}:

3.4.8 ID

[Definicja:] {X0}} reprezentuje typ atrybutu ID z [ xml]. · Przestrzeń wartości · ID jest zestawem wszystkich strun, które · pasują · NCName produkcja w [przestrzeni nazw w XML]. · Przestrzeń leksykalna · ID jest zestawem wszystkich strun, które · mecz · {{x3} }. Produkcja w [Przestrzeń nazw w XML ]. Typ podstawowy · ID jest NCName.

Produkcja NCName ogranicza znaki, które można wykorzystać:

[4] NCName ::= NCNameStartChar NCNameChar*    /* An XML Name, minus the ":" */
[5] NCNameChar ::= NameChar - ':'
[6] NCNameStartChar ::= NameStartChar - ':'
[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] |
                      [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | 
                      [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
                      [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] |
                      [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | 
                  [#x0300-#x036F] | [#x203F-#x2040]

Wśród wielu ograniczeń odnotuj w szczególności, że xs:ID s nie może mieć znaków : w dowolnym miejscu nazwy i nie może mieć cyfry jako pierwszego znaku nazwy.

Dlatego twój ID_123 jest właściwy NCName, ale 123 nie jest to dlatego, że zaczyna się od cyfry.

2
kjhughes 14 kwiecień 2021, 19:13