Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss
Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

RDF Mark doesn't influence Sweep and Sweep removes all, why?

0 views
Skip to first unread message

Зажигин Александр

unread,
May 1, 2009, 8:56:59 AM5/1/09
to dev-te...@lists.mozilla.org
I have created below RDF in memory:


<?xml version="1.0"?>
<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<RDF:Seq RDF:about="urn:root">
<RDF:li RDF:resource="urn:root:base_1"/>
<RDF:li RDF:resource="urn:root:base_2"/>
<RDF:li RDF:resource="urn:root:base_3"/>
</RDF:Seq>
<RDF:Description RDF:about="urn:root:base_2"
NC:id="2"
NC:name="10002" />
<RDF:Description RDF:about="urn:root:base_3"
NC:id="3"
NC:name="10003" />
<RDF:Description RDF:about="urn:root:base_1"
NC:id="1"
NC:name="10001" />
</RDF:RDF>

... and trying to Mark one and Sweep:


ds.QueryInterface(Components.interfaces.nsIRDFPurgeableDataSource);
ds.Mark(rdf.GetResource("urn:root:base_1"),
rdf.GetResource("http://home.netscape.com/NC-rdf#name"),
rdf.GetLiteral("1001"), true);
ds.Sweep();


... and it remove whole document. The result is:


<?xml version="1.0"?>
<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
</RDF:RDF>


... what is wrong?


Alexander.

Axel Hecht

unread,
May 1, 2009, 12:32:02 PM5/1/09
to

No idea, can you create an xpcshell test for that?

Axel

us...@domain.invalid

unread,
May 1, 2009, 4:18:27 PM5/1/09
to

>
> No idea, can you create an xpcshell test for that?
>
> Axel

This is the sctipt:

http://zazhigin.ru/testMarkSweep.js


And this is the output of the script:

<?xml version="1.0"?>
<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

<RDF:Description RDF:about="urn:root">

<Chapters RDF:resource="urn:root:chapter1"/>
</RDF:Description>
</RDF:RDF>


It was Marked only here -> "urn:root:chapter1" and I was expecting that
it will be removed by Sweep. And also I was expecting that
"urn:root:chapter2" container will stay, because this doesn't Mark.

Alexander.

Axel Hecht

unread,
May 1, 2009, 5:21:36 PM5/1/09
to

This seems to be the expected output of Sweep.

I slightly modified your data to make the RDF validator happy (default
namespace), and the arc that you Mark is preserved.

I'll comment on your original post in a sec.

Axel

PS: Data that I looked at on http://www.w3.org/RDF/Validator/ :

<?xml version="1.0"?> <RDF:RDF xmlns="urn:mystuff#"
xmlns:NC="http://home.netscape.com/NC-rdf#"

RDF:about="urn:root:chapter1"> <RDF:li
RDF:resource="urn:root:chapter1:article1"/> <RDF:li
RDF:resource="urn:root:chapter1:article2"/> </RDF:Seq>

<RDF:Description RDF:about="urn:root"> <Chapters

RDF:resource="urn:root:chapter1"/> <Chapters
RDF:resource="urn:root:chapter2"/> <Chapters
RDF:resource="urn:root:chapter3"/> </RDF:Description> <RDF:Description
RDF:about="urn:root:chapter1:article1"> <Title RDF:resource="title 1"/>
<Author RDF:resource="author 1"/> </RDF:Description>
<RDF:Description RDF:about="urn:root:chapter1:article2"> <Title
RDF:resource="title 2"/> <Author RDF:resource="author 2"/>
</RDF:Description> <RDF:Description
RDF:about="urn:root:chapter2:article1"> <Title RDF:resource="title 3"/>
<Author RDF:resource="author 3"/> </RDF:Description> <RDF:Seq
RDF:about="urn:root:chapter2"> <RDF:li
RDF:resource="urn:root:chapter2:article1"/> </RDF:Seq> </RDF:RDF>

Axel Hecht

unread,
May 1, 2009, 5:22:52 PM5/1/09
to
On 01.05.2009 5:56 Uhr, Зажигин Александр wrote:

The target you mark is rdf.GetLiteral("1001"), the target in your DS is
NC:name="10001". Missing '0'.

HTH

Axel

Alexander

unread,
May 1, 2009, 6:14:59 PM5/1/09
to
>>
>> It was Marked only here -> "urn:root:chapter1" and I was expecting that
>> it will be removed by Sweep. And also I was expecting that
>> "urn:root:chapter2" container will stay, because this doesn't Mark.
>
> This seems to be the expected output of Sweep.
>
> I slightly modified your data to make the RDF validator happy (default
> namespace), and the arc that you Mark is preserved.
>
> I'll comment on your original post in a sec.
>
> Axel
>
> PS: Data that I looked at on http://www.w3.org/RDF/Validator/ :
>


Mark / Sweep code:


ds.Mark(rdf.GetResource("urn:root"),
rdf.GetResource("urn:mystuff#Chapters"),
rdf.GetResource("urn:root:chapter1"), true);
ds.Sweep();


Output is:


<?xml version="1.0"?>
<RDF:RDF xmlns:NS1="urn:mystuff#"

<RDF:Description RDF:about="urn:root">

<NS1:Chapters RDF:resource="urn:root:chapter1"/>
</RDF:Description>
</RDF:RDF>


... and this is more less the same and I am still confused. My goal is
to receive something like (everything except removed "urn:root:chapter1"
branch):


<?xml version="1.0"?>
<RDF:RDF xmlns="urn:mystuff#"
xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

<RDF:Description RDF:about="urn:root">

<Chapters RDF:resource="urn:root:chapter2"/>
<Chapters RDF:resource="urn:root:chapter3"/>
</RDF:Description>

<RDF:Description RDF:about="urn:root:chapter2:article1">
<Title RDF:resource="title 3"/>
<Author RDF:resource="author 3"/>
</RDF:Description>
<RDF:Seq RDF:about="urn:root:chapter2">
<RDF:li RDF:resource="urn:root:chapter2:article1"/>
</RDF:Seq>
</RDF:RDF>


Sweep removes only Mark branches, am I right?


Alexander.

Axel Hecht

unread,
May 1, 2009, 7:41:18 PM5/1/09
to

Sweep removes anything but marked arcs. RDF doesn't know anything about
subtrees in RDF/XML. If you want to get a particular sub-graph excempt
from sweeping, you need to mark each and every arc in that sub-graph.

Axel

Alexander

unread,
May 2, 2009, 4:11:08 AM5/2/09
to
>> Mark / Sweep code:
>>
>>
>> ds.Mark(rdf.GetResource("urn:root"),
>> rdf.GetResource("urn:mystuff#Chapters"),
>> rdf.GetResource("urn:root:chapter1"), true);
>> ds.Sweep();
>>
>>
>> Output is:
>>
>>
>> <?xml version="1.0"?>
>> <RDF:RDF xmlns:NS1="urn:mystuff#"
>> xmlns:NC="http://home.netscape.com/NC-rdf#"
>> xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
>> <RDF:Description RDF:about="urn:root">
>> <NS1:Chapters RDF:resource="urn:root:chapter1"/>
>> </RDF:Description>
>> </RDF:RDF>
>>
>>
>>
>>
>> Sweep removes only Mark branches, am I right?
>
> Sweep removes anything but marked arcs. RDF doesn't know anything about
> subtrees in RDF/XML. If you want to get a particular sub-graph excempt
> from sweeping, you need to mark each and every arc in that sub-graph.
>


To be able to exclude from sweeping whole "urn:root:chapter1" sub-graph
(see http://zazhigin.ru/testMarkSweep.jpg). I have add follwing to the
script:


ds.Mark(


rdf.GetResource("urn:root:chapter1"),

rdf.GetResource("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),
rdf.GetResource("http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq"), true);
ds.Mark(


rdf.GetResource("urn:root:chapter1"),

rdf.GetResource("http://www.w3.org/1999/02/22-rdf-syntax-ns#_1"),
rdf.GetResource("urn:root:chapter1:article1"), true);
ds.Mark(


rdf.GetResource("urn:root:chapter1"),

rdf.GetResource("http://www.w3.org/1999/02/22-rdf-syntax-ns#_2"),
rdf.GetResource("urn:root:chapter1:article2"), true);


... and all of these doesn't influence Sweep, the result output is:


<?xml version="1.0"?>
<RDF:RDF xmlns:NS1="urn:mystuff#"
xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

<RDF:Description RDF:about="urn:root:chapter1" />


<RDF:Description RDF:about="urn:root">
<NS1:Chapters RDF:resource="urn:root:chapter1"/>
</RDF:Description>
</RDF:RDF>

... I was expecting below code isin:


<RDF:Seq RDF:about="urn:root:chapter1">
<RDF:li RDF:resource="urn:root:chapter1:article1"/>
<RDF:li RDF:resource="urn:root:chapter1:article2"/>
</RDF:Seq>


Alexander.

0 new messages