5 votes

xs:anyURI peut-il contenir des crochets dans le XSD ?

Validation XML échoue avec une erreur :

Élément 'CategoryPageUrl' : ' http://www.example.com/products?my_query_parameter[]=45 n'est pas une valeur valide du type atomique 'xs:anyURI'., ligne 29

L'alimentation ressemble à ça :

    <Category>
        <ExternalId>1234</ExternalId>
        <Name>Name</Name>
        <CategoryPageUrl>http://www.example.com/products?my_query_parameter[]=45</CategoryPageUrl>
    </Category>

Un schéma approprié ressemble à ceci :

<xs:complexType name="CategoryType">
  <xs:all>
    <xs:element name="ExternalId" type="ExternalIdType" minOccurs="0"/>
    <xs:element name="Name" type="xs:string" minOccurs="0"/>
    <xs:element name="CategoryPageUrl" type="xs:anyURI" minOccurs="0"/>
  </xs:all>
</xs:complexType>

5voto

kjhughes Points 5581

Non, un xs:anyURI ne peut pas contenir de crochets ( [ o ] ).

Votre URI lui-même est invalide, et pas seulement pour XSD...

xs:anyURI suit RFC 2396 tel que modifié par RFC 2732 .

La RFC 2396 présente les productions suivantes pour l'option query de l'URI, où vous essayez d'utiliser des crochets :

  query         = *uric
  uric          = reserved | unreserved | escaped
  reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
                  "$" | ","
  unreserved    = alphanum | mark
  mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" |
                  "(" | ")"

  escaped       = "%" hex hex
  hex           = digit | "A" | "B" | "C" | "D" | "E" | "F" |
                          "a" | "b" | "c" | "d" | "e" | "f"

  alphanum      = alpha | digit
  alpha         = lowalpha | upalpha

  lowalpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" |
             "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" |
             "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"
  upalpha  = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" |
             "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" |
             "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
  digit    = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" |
             "8" | "9"

Comme vous pouvez le voir, [ y ] n'y sont pas autorisés. De plus, les crochets sont généralement considérés comme étant imprudent n'importe où dans un URI, par 2.4.3. Caractères US-ASCII exclus :

unwise      = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`"

La RFC 2732 définit une syntaxe pour l'adresse IPv6 en utilisant les éléments suivants [ y ] mais ce n'est pas dans le cadre de la query d'un URI.

0voto

Aussi, RFC1738 déclare que ces caractères ne sont pas sûrs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X