Goedenavond,
Via een XSD schema:
generereer ik via een sqlxml querytemplate (een xpath-query):
serverside (middels ASP.NET) een xml geformatteerde output uit een MS SQL 2000 database:
Waarna ik dit via XSLT omtover in een webpagina met leuke layout. Een schemaatje dat ik tijdens mijn zoektocht tegenkwam vermakkelijkt waarschijnlijk de situatie:

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:
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):
Dit levert in ieder geval xml output met het <last> element, ik vind het alleen behoorlijk "ranzig":
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.
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:

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!