Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Validacija XML iz XSD šeme u u drugim jezicima

[es] :: .NET :: Validacija XML iz XSD šeme u u drugim jezicima

[ Pregleda: 2603 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.lanaco.com.

Sajt: www.knjigaimena.com


+5 Profil

icon Validacija XML iz XSD šeme u u drugim jezicima25.06.2008. u 12:46 - pre 192 meseci
Imam XSD šemu u kojoj je definisan element 'Broj' kao decimalni broj

XSD
Code:

   ...
   <xs:element name="Broj" type="xs:decimal" nillable="false"/>
   ...


i funkciju u C# koja validira XML

Code:

public void ValidateXML(String XMLfileName, String XSDfileName)
{
      ...
      XmlTextReader reader = new XmlTextReader(XMLfileName);
      XmlValidatingReader vreader = new XmlValidatingReader(reader);
      XmlSchemaCollection xsc = new XmlSchemaCollection();
      xsc.Add(null, XSDfileName);
      vreader.Schemas.Add(xsc);
      vreader.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
      while (vreader.Read())
      {
      }
      ...
}

private void ValidationCallBack(object sender, ValidationEventArgs args)
    {
     ...
    }


u XMLu koji se validira validacija prođe uspješno ako je format broja 123.45 tj. engleski format broja
međutim meni treba u XMLu da bude naš format broja tj. 123,45

Thred koji poziva funkciju za validaciju je u našoj kulturi tj.

Code:

   Thread.CurrentThread.CurrentCulture = new CultureInfo("bs-Latn-BA", true);
    ili
   Thread.CurrentThread.CurrentCulture = new CultureInfo("sr-Latn-CS", true);
    ili   
   Thread.CurrentThread.CurrentCulture = new CultureInfo("hr-HR", true);


ali funkcija vreader.Read() uvjek validira na engleskom tako da validacija broja 123,45 pozove ValidationCallBack pa je uvjek false :(

Kako ovo rešiti?
Da li u funkciji ValidateXML treba nešto izmeniti ili u XSD treba nešto dodati pa da ga na taj način validator interpretira kao brojeve u našoj kulturu?

Hvala unapred
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Validacija XML iz XSD šeme u u drugim jezicima25.06.2008. u 13:21 - pre 192 meseci
To je po defaultu, regionalna podesavanja i culture nemaju veze sa XSD schemom. Imaj u vidu da XML nije prezentacioni sloj, on sluzi za transfer podataka i samim tim se podaci prenose u istom formatu svuda, ti kad dekodiras XML i prikazujes podatke negde onda ih parsiras u regionalna podesavanja. Da nije tako nastupio bi opsti haos nekompatibilnosti XML-ova preko kultura sto bi ubilo njihovu inicijalnu primenu.

Iz w3c standarda za decimal u xsd, obrati paznju na boldovano:
Citat:
3.2.3 decimal
[Definition:] decimal represents a subset of the real numbers, which can be represented by decimal numerals. The ·value space· of decimal is the set of numbers that can be obtained by multiplying an integer by a non-positive power of ten, i.e., expressible as i × 10^-n where i and n are integers and n >= 0. Precision is not reflected in this value space; the number 2.0 is not distinct from the number 2.00. The ·order-relation· on decimal is the order relation on real numbers, restricted to this subset.

Note: All ·minimally conforming· processors ·must· support decimal numbers with a minimum of 18 decimal digits (i.e., with a ·totalDigits· of 18 ). However, ·minimally conforming· processors ·may· set an application-defined limit on the maximum number of decimal digits they are prepared to support, in which case that application-defined maximum number ·must· be clearly documented.
3.2.3.1 Lexical representation
decimal has a lexical representation consisting of a finite-length sequence of decimal digits (#x30-#x39) separated by a period as a decimal indicator. An optional leading sign is allowed. If the sign is omitted, "+" is assumed. Leading and trailing zeroes are optional. If the fractional part is zero, the period and following zero(es) can be omitted. For example: -1.23, 12678967.543233, +100000.00, 210.



Ako bas moras da proveravas sa , (sto ti uopste NE preporucujem) mozes eventualno da ga deklarises kao xs:string simple type sa pattern facetom koji podesis na regular expression za taj decimal, npr:

Code:
        <xs:element name="Broj" nillable="false">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="^[-+]?\\d*,?\\d*$" />
            </xs:restriction>
          </xs:simpleType>
        </xs:element>



Nesto me zeza ES sa kodiranjem \ u code bloku, \\d ima samo jedan \


[Ovu poruku je menjao mmix dana 25.06.2008. u 14:33 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.lanaco.com.

Sajt: www.knjigaimena.com


+5 Profil

icon Re: Validacija XML iz XSD šeme u drugim jezicima25.06.2008. u 14:26 - pre 192 meseci
Hvala na odgovou :)

Čemu onda služi atribut xml:lang?

Code:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xml:lang="bs-latn-ba" ...


 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Validacija XML iz XSD šeme u u drugim jezicima25.06.2008. u 15:46 - pre 192 meseci
Svacemu i nicemu

xml:lang je opisni atribut koji "zainteresovanoj strani" govori u kom govornom jeziku je literalni sadrzaj (i koriste se ISO639 kodovi jezika, ne .NET culture identifikatori), npr:

Code:
<questions xml:lang="en">
   <question>What's the time?</question>
   <question>What's your name?</question>
</questions>
<questions xml:lang="sr">
   <question>Koliko ima sati?</question>
   <question>Kako se zoves?</question>
</questions>


Nema uticaja na parsiranje samog XML-a i nema uticaja na XSD validaciju. Na korisniku XML-a je da odluci da li ce i kako iskoristiti ovaj atribut.
Npr za gornji xml mozes da iskoristis XPath /questions[@xml:lang='en'] da dodjes do liste engleskih pitanja. U svakom slucaju nema efekta na tvoj problem jer se odnosi samo na interpretaciju tekstualnog sadrzaja, ne na numericke podatke i njihov format.


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: Validacija XML iz XSD šeme u u drugim jezicima

[ Pregleda: 2603 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.