[XSD] Mogelijkheid tot definieren van subqueries?

Pagina: 1
Acties:

  • Counter-Strike
  • Registratie: Maart 2000
  • Niet online

Counter-Strike

Maar ik speel het niet!

Topicstarter
Goedenavond,

Via een XSD schema:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
**snap**
    <xs:element name="picture" sql:relation="ph_pictures">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="details" sql:is-constant="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="views" type="xs:string" />
                            <xs:element name="description" type="xs:string" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="navigation" sql:is-constant="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="id" type="xs:int" />
                            <xs:element name="galleryId" type="xs:int" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:int" />
        </xs:complexType>
    </xs:element>
**snap**
</xs:schema>


generereer ik via een sqlxml querytemplate (een xpath-query):

code:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8" ?> 

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
    <xhtml_stylesheets />
    <xhtml_javascripts />
    <photography>
        <sql:xpath-query>
            /picture[@id=1]
        </sql:xpath-query>
    </photography>
</ROOT>


serverside (middels ASP.NET) een xml geformatteerde output uit een MS SQL 2000 database:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
    <xhtml_stylesheets /> 
    <xhtml_javascripts />

    <photography>
        <picture id="1">
            <details>
            <views>1000</views> 
            <description>Test</description> 
        </details>
        <navigation>
            <id>1</id> 
            <galleryId>1</galleryId> 
        </navigation>
        </picture>
    </photography>
</ROOT>


Waarna ik dit via XSLT omtover in een webpagina met leuke layout. Een schemaatje dat ik tijdens mijn zoektocht tegenkwam vermakkelijkt waarschijnlijk de situatie:

Afbeeldingslocatie: http://www.xs4all.nl/~aamvn/external/GoT/939425/ms-pres-sqlxml.jpg

Tot dusver geen problemen mee gehad, al moet ik toegeven dat het allemaal nog vrij nieuw voor me is. Nu stuut ik echter op een probleem waar ik niet uitkom.

Probleem.
In de bovenstaande xml output wil ik in de sectie <navigation> een element <last>nummer</last> aanbrengen. Het nummer correspondeert met het grootste getal uit een kolom die ik galleryId noem. In SQL:

code:
1
SELECT MAX(galleryId) FROM ph_pictures


Tot nogtoe is de enige manier waarop ik dit -gedeeltelijk- voor elkaar heb gekregen het toevoegen van een extra query aan de querytemplate (in FOR SQL EXPLICIT vorm, die ik nu juist probeer te vermijden):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8" ?> 

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
    <xhtml_stylesheets />
    <xhtml_javascripts />
    <photography>
        <sql:xpath-query>
            /picture[@id=1]
        </sql:xpath-query>
        <subqueries>
            <sql:query>
                SELECT  1               AS Tag,
                        NULL            AS Parent,
                        MAX(galleryId)  AS [navigation!1!last!element]
                FROM    ph_pictures
                FOR XML EXPLICIT                    
            </sql:query>
        </subqueries>
    </photography>
</ROOT>


Dit levert in ieder geval xml output met het <last> element, ik vind het alleen behoorlijk "ranzig":

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
    <xhtml_stylesheets /> 
    <xhtml_javascripts />
 
    <photography>
        <picture id="1">
            <details>
            <views>1000</views> 
            <description>Test</description> 
        </details>
        <navigation>
            <id>1</id> 
            <galleryId>1</galleryId> 
        </navigation>
        </picture>
        <subqueries>
            <last>2</last>
        </subqueries>
    </photography>
</ROOT>


Via google stuitte ik al op een nuttig resultaat (kopje: Oracle SQL Statement With Subquery) maar dit lijkt alleen bruikbaar met Oracle.

Heeft iemand een suggestie over het uitvoeren van een subquery binnen een XSD schema?

N.B. Excuses voor het misbruiken van de layout.

[ Voor 48% gewijzigd door Counter-Strike op 28-07-2004 21:06 ]

Dit is het einde van deze mededeling. De mogelijkheid tot reageren is aanwezig!


  • Counter-Strike
  • Registratie: Maart 2000
  • Niet online

Counter-Strike

Maar ik speel het niet!

Topicstarter
*bump*

Dit is het einde van deze mededeling. De mogelijkheid tot reageren is aanwezig!


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Is het noodzakelijk om de navigatie (data) elementen in de xml te verwerken?
Ik heb ook ooit een photo album generator gemaakt op basis van xml/xsl en ik specificeerde toen in het xsl bestand hoe de navigatie werkte.

Ik heb de template die ik gebruikte zo niet bij de hand maar XSLT/XPath heeft genoeg mogelijkheden om uit een xml bestand het totaal aantal pictures op te vragen, de laatste, de eerste, etc.

  • Counter-Strike
  • Registratie: Maart 2000
  • Niet online

Counter-Strike

Maar ik speel het niet!

Topicstarter
Hey bedankt voor je reactie!
Orphix schreef op 31 juli 2004 @ 20:28:
Is het noodzakelijk om de navigatie (data) elementen in de xml te verwerken?
Ik heb ook ooit een photo album generator gemaakt op basis van xml/xsl en ik specificeerde toen in het xsl bestand hoe de navigatie werkte.
Hier heb je een punt! Navigatie hoeft niet perse in xml, XSL biedt genoeg mogelijkheden om dat uit te werken. Dank voor de tip. De manier waarop is echter hetzelfde: (zie vetgedrukte stukje in jouw reactie)
Ik heb de template die ik gebruikte zo niet bij de hand maar XSLT/XPath heeft genoeg mogelijkheden om uit een xml bestand het totaal aantal pictures op te vragen, de laatste, de eerste, etc.
Daar zit hem nu dus het probleem. Het aantal pictures in een gallery wordt juist door die subquery kenbaar gemaakt! Ik heb al gezocht naar mogelijkheden van XPath, maar kwam helaas tot de conclusie dat veel van deze functies (nog?) niet beschikbaar zijn in SQLXML.

Zie hiertoe het volgde stukje:
WARNING: SQLXML 3.0 does not support the XPath functions and operators: xmlns, descendant-or-self, preceding-sibling, preceding, namespace, following-sibling, followingdescendant, ancestor-or-self, ancestor, ceiling(), mod, concat(), floor(), count(), contains(), id(), translate(), sum(), substring-before(), substring-after(), substring(), string-length(), starts-with(), round(), normalize-space(), namespace-uri(), name(), local-name(), position(), last(), lang() as well as node tests with the * wildcard.
Bron. Uit een overigens heel nuttige howto over SQLXML!

[ Voor 3% gewijzigd door Counter-Strike op 31-07-2004 22:37 ]

Dit is het einde van deze mededeling. De mogelijkheid tot reageren is aanwezig!