[ priki @ 07.01.2008. 15:01 ] @
naime, prvi put radim sa XSL-om

pomocu XSL-a radim transformaciju jednog XML-a fajla u drugi fajl
taj XSL koji koristim, koristi više schema

mene interesuje kako da uključim i te scheme u tranformaciju
pošto mi MSXML digne grešku, verovatno traži da sve šeme budu
uključene u proces tranformacije

Hvala
Srdjan
[ mmix @ 08.01.2008. 13:00 ] @
Kad kazes vise shema, na sta konkretno mislis?
Daj neki primer...

I koji XSLT engine koristis?
[ priki @ 09.01.2008. 08:11 ] @
pa koristim XMLpad za generiranje i MSXML
nasao sam neke opcije u prg jeziku da iskljucim scheme iz procesa transformacije

Code:

resolveExternals := False;


sad koliko je to pametno, videćemo

samo me interesuje kako ukombinovati sve te scheme
ovo je deo koda XSL-a, ako je neki tag nezatvoren, slucajno je


Code:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns="http://edavki.durs.si/Documents/Schemas/REK_2_1.xsd" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:edp="http://edavki.durs.si/Documents/Schemas/EDP-Common-1.xsd" xmlns:podo="http://edavki.durs.si/Documents/Schemas/PODO-Common-1.xsd"
  xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
  <xsl:decimal-format name="MyFormat" NaN="0.00"/>
  <xsl:variable name="xmlH" select="document('xmlHead.xml')/head/ROW"/>
  <xsl:template match="/">
    <Envelope
      xsi:schemaLocation="http://edavki.durs.si/Documents/Schemas/REK_2_1.xsd http://edavki.durs.si/Documents/Schemas/REK_2_1.xsd">
      <!-- head write -->
      <xsl:element name="edp:Header">
        <xsl:element name="edp:taxpayer">
          <xsl:if test="string($xmlH/acPoobTaxId)">
            <xsl:element name="edp:taxNumber">
              <xsl:value-of select="$xmlH/acPoobTaxId"/>
            </xsl:element>
        </xsl:element>
      </xsl:element>
      <xsl:element name="edp:Signatures"/>
      <!-- end of head write -->
      <xsl:element name="body">
        <xsl:element name="edp:bodyContent"/>
        <xsl:element name="REK">
          <xsl:element name="REK_2">
            <xsl:if test="string($xmlH/acOurCompany)">
              <xsl:element name="F005_Name">
                <xsl:value-of select="$xmlH/acOurCompany"/>
              </xsl:element>
            </xsl:if>
            <xsl:for-each select="dataset/ROW">
              <xsl:if test="AOP='101'">
                <xsl:element name="F101">
                  <xsl:call-template name="FormatDecimal">
                    <xsl:with-param name="value" select="anAmount"/>
                  </xsl:call-template>
                </xsl:element>
              </xsl:if>
            </xsl:for-each>
        </xsl:element>
      </xsl:element>
    </Envelope>

[ mmix @ 09.01.2008. 13:14 ] @
PA bogami, fali ti podosta zatvarajucih tagova :)

pozatvarao sam gde treba, pa probaj ovo ispod. Mada, fali ti "FormatDecimal" tempalte u sorsu. Meni iskreno i dalje nije jasno gde je zapravo tvoj problem i sta ti pokusavas da postignes niti gde ti msxml baca gresku...

Code:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns="http://edavki.durs.si/Documents/Schemas/REK_2_1.xsd"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:edp="http://edavki.durs.si/Documents/Schemas/EDP-Common-1.xsd" 
    xmlns:podo="http://edavki.durs.si/Documents/Schemas/PODO-Common-1.xsd"
    xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:decimal-format name="MyFormat" NaN="0.00"/>
    <xsl:variable name="xmlH" select="document('xmlHead.xml')/head/ROW"/>
    <xsl:template match="/">
        <Envelope xsi:schemaLocation="http://edavki.durs.si/Documents/Schemas/REK_2_1.xsd http://edavki.durs.si/Documents/Schemas/REK_2_1.xsd">
            <!-- head write -->
            <xsl:element name="edp:Header">
                <xsl:element name="edp:taxpayer">
                    <xsl:if test="string($xmlH/acPoobTaxId)">
                        <xsl:element name="edp:taxNumber">
                            <xsl:value-of select="$xmlH/acPoobTaxId"/>
                        </xsl:element>
                    </xsl:if>
                </xsl:element>
            </xsl:element>
            <xsl:element name="edp:Signatures"/>
            <!-- end of head write -->
            <xsl:element name="body">
                <xsl:element name="edp:bodyContent"/>
                <xsl:element name="REK">
                    <xsl:element name="REK_2">
                        <xsl:if test="string($xmlH/acOurCompany)">
                            <xsl:element name="F005_Name">
                                <xsl:value-of select="$xmlH/acOurCompany"/>
                            </xsl:element>
                        </xsl:if>
                        <xsl:for-each select="dataset/ROW">
                            <xsl:if test="AOP='101'">
                                <xsl:element name="F101">
                                    <xsl:call-template name="FormatDecimal">
                                        <xsl:with-param name="value" select="anAmount"/>
                                    </xsl:call-template>
                                </xsl:element>
                            </xsl:if>
                        </xsl:for-each>
                    </xsl:element>
                </xsl:element>
            </xsl:element>
        </Envelope>
    </xsl:template>
</xsl:stylesheet>
[ priki @ 09.01.2008. 13:55 ] @
Citat:
PA bogami, fali ti podosta zatvarajucih tagova :)
pozatvarao sam gde treba, pa probaj ovo ispod. Mada, fali ti "FormatDecimal" tempalte u sorsu. Meni iskreno i dalje nije jasno gde je zapravo tvoj problem i sta ti pokusavas da postignes niti gde ti msxml baca gresku...



poslao sam ti skracenu verziju
inace unutra je sve sto treba da sadrzi
sva formatiranja i ostalo

ovako
radi se sa tri šeme
dve uopštene šeme,
jedna samo za taj dokument

kad validiram taj xml,
traži mi pored te posebne i druge dve šeme negde
ako ih nema digne mi grešku

mene interesuje na koji način
da li samo tako što se sve tri šeme stave u isti folder
(probao sam, ne radi)

?

nadam se da je sad jasnije

[Ovu poruku je menjao priki dana 09.01.2008. u 16:13 GMT+1]

[Ovu poruku je menjao priki dana 09.01.2008. u 16:13 GMT+1]
[ jablan @ 09.01.2008. 22:24 ] @
Koliko je meni poznato, šeme samih dokumenata koji se transformišu nemaju puno veze sa transformacijom, tj. transformacija ne povlači sa sobom i validaciju. Druga stvar su šeme, tj. nejmspejsovi samih transformacija, koji moraju da budu cakum-pakum - u slučaju da koristiš nešto izvan čistog XSLT-a (neke biblioteke funkcija, ekstenzije specifične za pojedine endžine itd).
[ priki @ 09.01.2008. 23:43 ] @
pa logično je da transformacija nema veze sa validacijom

ali vidi ovako, pošto sam jako svež u XSL(T) svetu i
nemam nešto puno znanja za polemiku, no biće :)
pa ću ti napisaću moj scenario

uglavnom, fajlovi se formiraju preko XSL-a
to je sve odradjeno poštujući te tri šeme
provereno je preko programa XMLSpy gde za svaki fajl,
ima ih 4, prijavi da su "valid", svi

prilikom formiranja tog dokumenta, preko transform
funkcije (nista validate) u MSXML-u (radi se preko
interfejsa u Delphiju do MSXML-a, instanca objekta,
inače koristi se čist XSLT, nikakve dodatne biblioteke ili slično)
traži mi pored šeme za taj dokumenat i te ostale dve generalne šeme,
znači total 3, jednostavno se podigne neki error sa imenom
jedne od dve generalne šeme.

ukoliko property resolveExternals, koji se nalazi u tom interfejsu
prema MSXML-u, stavi se na false, transformacija se odradi bez problema
(a taj property kaže "ne koristi ostale šeme" (ugrubo))

zato pitam kako ukljuciti sve te šeme u proces validacije,

��m���~��iȣzx�y�������h��޲֧��ڭ�.���
[ jablan @ 10.01.2008. 14:00 ] @
Mislim da ne prosleđuješ putanje do šema kako treba. Pogledaj ovde:

http://207.46.199.254/en-us/library/ms256100.aspx

i načelno

Google: "schemalocation"
[ priki @ 10.01.2008. 18:12 ] @
ajd ok, probacu jos jednom