ugrás a tartalomhoz

XUL tree RDF datasource

janoszen · 2010. Jan. 6. (Sze), 22.20
Sziasztok,

játszadozom a XUL-lal és sikerült összehozni egy JavaScriptes adatbetöltőt. Át szeretném írni ugyanezt RDF alapőra, hogy kiessen a JavaScript belőle (ha már van ilyen király fícsör). Gyártottam egy meglehetősen egyszerű RDF-et, ami a jelek szerint valid és majdnem 1:1 megfelel a mintakódnak. A tcpdump tanulsága szerint le is tölti az adatot, azonban amikor arra a fülre kattintok, ahol a tree elem van, kapok egy olyan hibát, hogy a this.view nem létezik a tree.xul-ban.

Kérdéseim:
1. Tudja-e valaki, hogy mitől lehet ez?
2. Van-e valakinek 1.9-es xulrunner alatt működő datasources mintakódja?
3. Hogyan lehet debuggolni értelmesen a xulrunnert, ha nem Firefox plugint ír az ember?

Forráskódot holnap tudok küldeni, ha a fenti nem segítene.

Köszönöm szépen
 
1

Tree

janoszen · 2010. Jan. 6. (Sze), 22.21
Persze azt nem írtam le, de implicit benne van, hogy tree elemről van szó.
2

XUL

Poetro · 2010. Jan. 7. (Cs), 00.13
A XUL fájlodat szépen meg tudod nyitni Fx-szel, és ha már ott vagy akkor Firebuggal szépen tudod debuggolni.
3

Nem elég

janoszen · 2010. Jan. 7. (Cs), 12.00
Sajnos nem elég, mert pl. A chrome.manifestben vannak létszükséges infók, ha jól néztem. Ráadásul a remote XULra érvényes a same origin policy is doksi szerint. Azért holnap még ezzel futok egy kört.

Update: valóban így volt, csináltam teszt verziót.
4

Forrás

janoszen · 2010. Jan. 7. (Cs), 14.05
Készítettem egy lecsonkított forrást. Ihun a XUL:

test.xul
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "test.dtd">
<window
  	id     = "test"
  	title  = "Title"
  	width  = "400"
  	height = "300"
  	xmlns  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  
	<tree ref="http://mydomain/conversation/all-conversations" datasources="test.rdf" id="archivelist" editable="false" height="200" width="500">
		<treecols>
			<treecol persist="width" id="hname" label="Name" flex="2" />
			<treecol persist="width" id="hlogin" label="Login" flex="1" />
			<treecol persist="width" id="hip" label="IP" flex="1" />
			<treecol persist="width" id="htimestamp" label="Timestamp" flex="1" />
			<treecol persist="width" id="hoperator" label="Operator" flex="1" />
		</treecols>

		<template>
		    <rule>
		      <treechildren>
		       <treeitem uri="rdf:*">
		         <treerow>
		           <treecell label="rdf:http://mydomain/conversation#name"/>
		           <treecell label="rdf:http://mydomain/conversation#username"/>
		           <treecell label="rdf:http://mydomain/conversation#ip"/>
		           <treecell label="rdf:http://mydomain/conversation#finish"/>
		           <treecell label="rdf:http://mydomain/conversation#operator"/>
		         </treerow>
		       </treeitem>
		      </treechildren>
		    </rule>
		</template>
	</tree>
</window>
test.rdf
<?xml version="1.0" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:conversation="http://mydomain/conversation/">
	<rdf:Description rdf:about="http://mydomain/conversation/"> 
		<conversation:id>1243</conversation:id>
		<conversation:name>Teszt Elek</conversation:name>
		<conversation:username></conversation:username>
		<conversation:ip>1.2.3.4</conversation:ip>
		<conversation:finish>2010-01-01 10:00:00</conversation:finish>

		<conversation:operator>user</conversation:operator>
	</rdf:Description>
	<rdf:Seq rdf:about="http://mydomain/conversation/all-conversations">
		
	</rdf:Seq>
</rdf:RDF>
test.dtd
<!ENTITY app.title	"DotRoll Ltd test">
<!ENTITY app.id		"test">
Mit cseszek el?
5

Seq > li > Description ?

Endyl · 2010. Jan. 7. (Cs), 19.45
A Description-nek nem egy Seq-en belüli li-ben kellene lennie? Még nem használtam rdf-et, de ha jól emlékszem az olvasottakra, akkor ott kéne lennie. De ez csak így hirtelen beugrott.
6

Köszi

janoszen · 2010. Jan. 8. (P), 10.24
Köszi, holnap megnézem. Sajnos nem sok _értelmes_ leírást találtam az RDFről, csak egy halom RFC-t, azt meg ezért a projektért nem akartam végigolvasni. Végülis most úgy működik a dolog, hogy JSON-t tölt be az alkalmazás, ami majdnem ugyanolyan jó.

Íme az új RDF, ezzel sem működik:
<?xml version="1.0" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:conversation="http://mydomain/conversation/">
	<rdf:Description rdf:about="http://mydomain/conversation/1243"> 
		<conversation:id>1243</conversation:id>
		<conversation:name>Teszt Elek</conversation:name>
		<conversation:username></conversation:username>
		<conversation:ip>1.2.3.4</conversation:ip>
		<conversation:finish>2010-01-01 10:00:00</conversation:finish>

		<conversation:operator>user</conversation:operator>
	</rdf:Description>
	<rdf:Seq rdf:about="http://mydomain/conversation/all-conversations">
		<rdf:li rdf:resource="http://mydomain/conversation/1243" />
	</rdf:Seq>
</rdf:RDF>
7

Így nálam működik:

Endyl · 2010. Jan. 8. (P), 21.23
test.xul:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window
    id     = "test"
    title  = "Title"
    width  = "400"
    height = "300"
    xmlns  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    
    <tree ref="http://mydomain/conversation/all-conversations"
          datasources="test.rdf"
          id="archivelist"
          editable="false"
          height="200"
          width="500"
          flags="dont-build-content">
        <treecols>
            <treecol persist="width" id="hname" label="Name" flex="2" />
            <treecol persist="width" id="hlogin" label="Login" flex="1" />
            <treecol persist="width" id="hip" label="IP" flex="1" />
            <treecol persist="width" id="htimestamp" label="Timestamp" flex="1" />
            <treecol persist="width" id="hoperator" label="Operator" flex="1" />
        </treecols>
  
        <template>
            <rule>
              <treechildren>
               <treeitem uri="rdf:*">
                 <treerow>
                   <treecell label="rdf:http://mydomain/conversation/rdf#name"/>
                   <treecell label="rdf:http://mydomain/conversation/rdf#username"/>
                   <treecell label="rdf:http://mydomain/conversation/rdf#ip"/>
                   <treecell label="rdf:http://mydomain/conversation/rdf#finish"/>
                   <treecell label="rdf:http://mydomain/conversation/rdf#operator"/>
                 </treerow>
               </treeitem>
              </treechildren>
            </rule>
        </template>
    </tree>
</window>
Változás:
-tree-hez flags="dont-build-content" hogy content builder helyett tree builder-t használjon a tartalom generálásához
-treecelleken label-ben a címzés a változtatott rdf szerint

test.rdf:

<?xml version="1.0" ?>  
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
          xmlns:conversation="http://mydomain/conversation/rdf#"> 
    <rdf:Seq rdf:about="http://mydomain/conversation/all-conversations">
      <rdf:li>
        <rdf:Description rdf:about="http://mydomain/conversation/1243">
          <conversation:id>1243</conversation:id>
          <conversation:name>Teszt Elek</conversation:name>
          <conversation:username></conversation:username>
          <conversation:ip>1.2.3.4</conversation:ip>
          <conversation:finish>2010-01-01 10:00:00</conversation:finish>
    
          <conversation:operator>user</conversation:operator>
        </rdf:Description>
      </rdf:li>
    </rdf:Seq>
</rdf:RDF>
Változás:
-conversation namespace címzéshez; itt igazándiból a #-en van a hangsúly, lehetne "http://mydomain/conversation#" is és akkor a xul-ban meg ugye a címzés pl.: "rdf:http://mydomain/conversation#name"

Ha jól nézem ennyi volt.
Jó, hogy előjött a téma, úgyis nemsokára szükségem lesz rá :)
8

Köszönöm

janoszen · 2010. Jan. 9. (Szo), 00.50
Huh, köszönöm. Hogy a bubánatba jöttél erre rá? Mármint szóval érted. :) Az összes példában az volt, hogy a Seq elemek külön vannak.
9

Puska :)

Endyl · 2010. Jan. 9. (Szo), 14.46
Bevallom puskáztam egy kicsit :)

[szerk]Most nézem, hogy itt is lehetnek érdekes dolgok. A vége felé ír a tree-kről is.[/szerk]