Search the web
Sign In
New User? Sign Up
W3China · W3CHINA.ORG ÓʼþÁбí
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Message search is now enhanced, find messages faster. Take it for a spin.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
[ÎÄÕª] JenaÎĵµ¡¶An Introduction to RDF and the Jena RDF API   Message List  
Reply | Forward Message #200 of 387 |
±¾ÎÄ×ªÔØ×Ô W3CHINA.ORGÌÖÂÛÇø(BBS.W3CHINA.ORG)    Ô­ÎÄÁ´½Ó
×÷Õߣºapril1019
ÒÔÏÂΪԭÎÄ£º

JenaÎĵµ¡¶An Introduction to RDF and the Jena RDF API¡·µÄÒëÎÄ

RDFºÍJena RDF APIÈëÃÅ
________________________________________
ǰÑÔ
±¾ÎÄÊÇһƪ¶ÔW3CµÄ×ÊÔ´ÃèÊö¿ò¼Ü(RDF)ºÍ Jena(Ò»¸öJavaµÄRDF API)µÄ½Ì³ÌÐÔ½éÉÜ. ±¾ÎÄÊÇΪÄÇЩ²»ÊìϤRDFµÄ, ÒÔ¼°ÄÇЩͨ¹ý½¨Á¢Ô­ÐοÉÒÔ´ïµ½×îºÃѧϰЧ¹ûµÄ, »òÊÇÒòΪÆäËûÔ­ÒòÏ£ÍûÄÜ¿ìËÙ²Ù×÷JenaµÄ³ÌÐòÔ±¶øÐ´µÄ. ÎÒÃǼÙÉè¶ÁÕßÔÚÔĶÁ±¾ÎÄǰÒѾßÓÐÒ»¶¨µÄXMLºÍJava֪ʶ.
Èç¹û¶ÁÕßÔÚûÓÐÀí½âRDFÊý¾ÝÄ£Ð͵Ļù´¡ÉϾÍѸËÙ½øÈë²Ù×÷½×¶Î,ÍùÍù»áµ¼ÖÂʧ°ÜºÍʧÍû. È»¶ø,Èç¹û¹âѧϰÊý¾ÝÄ£ÐÍÓÖÊÇÊ®·Ö¿ÝÔ﷦ζµÄ, ²¢³£³£»áµ¼ÖÂÇúÕÛµÄÐζøÉÏѧµÄÄÑÌâ. ¸üºÃµÄѧϰ°ì·¨ÊÇÔÚÀí½âÊý¾ÝÄ£Ð͵ÄͬʱÁ·Ï°²Ù×÷Ëü. ¿ÉÒÔÏÈѧϰһµãÊý¾ÝÄ£ÐÍÔÙ¶¯ÊÖÊÔÒ»ÊÔ.È»ºóÔÚѧϰһµãÔÙÊÔÒ»ÊÔ. ÕâÑùÒ»À´¾ÍÄÜ´ïµ½ÀíÂÛʵ¼ùÏà½áºÏµÄЧ¹û.Êý¾ÝÄ£Ðͱ¾ÉíÊ®·Ö¼òµ¥,ËùÒÔѧϰ¹ý³Ì²»»áÌ«³¤.
RDF¾ßÓÐXMLµÄÓï·¨, ËùÒÔÐí¶àÊìϤXMLµÄÈ˾ͻáÈÏΪÒÔXMLÓï·¨µÄÐÎʽÀ´Ë¼¿¼RDF. È»¶ø, ÕâÊDz»¶ÔµÄ. RDFÓ¦¸ÃÒÔËüÊý¾ÝÄ£Ð͵ÄÐÎʽÀ´±»Àí½â. RDFÊý¾Ý¿ÉÊÇÓÃXMLÀ´±íʾ, µ«ÊÇÀí½âÊý¾ÝÄ£Ð͵ÄÖØÒªÐÔ¸üÔÚÀí½â´ËÓï·¨ÖØÒªÐÔÖ®ÉÏ.
Jena APIµÄÒ»¸öÔËÐÐÀý×Ó, °üÀ¨±¾½Ì³ÌÖÐËùÓÐÀý×ӵŤ×÷Ô´´úÂë¶¼¿ÉÒÔÔÚhttp://www.hpl.hp.com/semweb/ÏÂÔØ.
________________________________________
Ŀ¼
1. µ¼ÑÔ
2. ³ÂÊöStatements
3. RDFд²Ù×÷
4. RDF¶Á²Ù×÷
5. Jena RDF °ü
6. ²Ù×ÝÄ£ÐÍ
7. ²éѯģÐÍ
8. ¶ÔÄ£Ð͵IJÙ×÷ 
9. ÈÝÆ÷Containers
10. ¹ØÓÚLiteralsºÍÊý¾ÝÀàÐ͵ĸü¶à̽ÌÖ
11. ÊõÓï±í
________________________________________
µ¼ÑÔ
×ÊÔ´ÃèÊö¿ò¼ÜÊÇ(RDF)ÊÇÃèÊö×ÊÔ´µÄÒ»Ïî±ê×¼(ÔÚ¼¼ÊõÉÏÊÇW3CµÄÍÆ¼ö±ê×¼). Ê²Ã´ÊÇ×ÊÔ´? ÕâʵÔÚÊÇÒ»¸öºÜÄѻشðµÄÎÊÌâ, Æä¾«È·µÄ¶¨ÒåĿǰÉÐÔÚÕùÂÛÖÐ. ³öÓÚÎÒÃǵÄÄ¿µÄ, ÎÒÃÇ¿ÉÒÔ°Ñ×ÊÔ´ÏëÏó³ÉÈκÎÎÒÃÇ¿ÉÒÔÈ·¶¨Ê¶±ðµÄ¶«Î÷. ÔÚ±¾½Ì³ÌÖÐ,¶ÁÕßÄã±¾Éí¾ÍÊÇÒ»¸ö×ÊÔ´, ¶øÄãµÄÖ÷Ò³Ò²ÊÇÒ»¸ö×ÊÔ´, Êý×Ö1ºÍ¹ÊÊÂÖо޴óµÄ°×¾¨¶¼ÊÇ×ÊÔ´.
ÔÚ±¾½Ì³ÌÖÐ, ÎÒÃǵÄÀý×Ó»áÎ§ÈÆÈËÃÇÕ¹¿ª. ¼ÙÉèÈËÃÇ»áʹÓÃVCARDS, ¶øVCARD½«ÓÉRDF±íʾ»úÖÆÀ´ÃèÊö. ÎÒÃÇ×îºÃ°ÑRDF¿¼ÂdzÉÓɽáµãºÍ¼ýÍ·µÄÐÎʽ¹¹³ÉµÄͼ. Ò»¸ö¼òµ¥µÄvcardÔÚRDFÖпÉÄÜ¿´ÆðÀ´ÊÇÕâÑùµÄ:
 
×ÊÔ´John SmithÔÚͼÖÐÓÃÍÖÔ²±íʾ, ²¢±»Ò»¸öͳһ×ÊÔ´¶¨Î»·û(URI) Ëù±êʶ, ÔÚ±¾ÀýÖÐÊÇ"http://.../JohnSmith"). Èç¹ûÄãÏëҪͨ¹ýÄãµÄä¯ÀÀÆ÷À´·ÃÎÊÕâ¸ö×ÊÔ´µÄ»°,ÄãºÜÓпÉÄÜ»áʧ°Ü. ËÄÔµÄÓÞÈ˽ÚЦ»°²¢²»¾­µÃÆð¿¼Ñé, Ïà·´Èç¹ûÄãµÄä¯ÀÀÆ÷°ÑJohn Smith´«µÝµ½ÄãµÄ×ÀÃæµÄ»°, Äã²Å¸Ã¸Ðµ½¾ªÑÈ. Èç¹ûÄã²¢²»ÊìϤURI'sµÄ»°, Äã¿ÉÒÔ°ÑËüÃÇÏëÏó³É¼òµ¥µÄİÉúÃû×Ö.
×ÊÔ´ÓµÓÐÊôÐÔ(property). ÔÚÕâЩÀý×ÓÖÐ, ÎÒÃǶÔJohn SmithÃûƬÉϳöÏÖµÄÄÇЩÊôÐԺܸÐÐËȤ.ͼ1Ö»ÏÔʾÁËÒ»¸öÊôÐÔ, John SmithµÄÈ«Ãû. ÊôÐÔÊÇÓɱêÓÐÊôÐÔÃûµÄ¼ýÍ·±íʾµÄ. ÊôÐÔµÄÃû×ÖÒ²ÊÇÒ»¸öURI, µ«ÊÇÓÉÓÚURIÊ®·ÖÈß³¤±¿ÖØ, ËùÒÔͼÖн«ËüÏÔʾΪXML qnameµÄÐÎʽ. ÔÚ':'֮ǰµÄ²¿·Ö³ÆÎªÃüÃû¿Õ¼äǰ׺²¢±íʾÁËÒ»¸öÃüÃû¿Õ¼ä. ÔÚ':'Ö®ºóµÄ²¿·Ö³ÆÎª¾Ö²¿Ãû, ²¢±íʾÔÚÃüÃû¿Õ¼äÖеÄÒ»¸öÃû×Ö. ÔÚд³ÉRDF XMLÐÎʽʱ, ÊôÐÔ³£³£ÒÔqnameµÄÐÎʽ±íʾ, ÕâÊÇÒ»¸öÔÚͼÐκÍÎı¾Öеļòµ¥µÄËõд·½·¨. È»¶ø, ÑϸñµØ½², ÊôÐÔÓ¦¸ÃÓÃURIÀ´±êʶ. ÃüÃû¿Õ¼äǰ׺:¾Ö²¿ÃûµÄÐÎʽÊÇÒ»ÖÖÃüÃû¿Õ¼äÁ¬½Ó¾Ö²¿ÃûµÄURIËõд. µ±ä¯ÀÀÆ÷·ÃÎÊʱ, Óò¢Ã»ÓÐÇ¿ÖÆÊôÐÔµÄURI±ØÐëÖ¸ÏòһЩ¾ßÌåµÄÊÂÎï.
ÿ¸öÊôÐÔ¶¼ÓÐÒ»¸öÖµ. ÔÚ´ËÀýÖÐ, ÖµÎªÒ»¸öÎı¾(literal), ÎÒÃÇÏÖÔÚ¿ÉÒÔ°ÑËü¿´³ÉÒ»¸ö×Ö·û´®.Îı¾ÔÚͼÖÐÏÔʾΪ³¤·½ÐÎ.
JenaÊÇÒ»¸öJava API, ÎÒÃÇ¿ÉÒÔÓÃËüÀ´´´½¨ºÍ²Ù×ÝÖîÈçÉÏÊöÀýͼµÄRDFͼ. JenaÉèÓбíʾͼ(graph), ×ÊÔ´(resource), ÊôÐÔºÍÎı¾(literal)µÄ¶ÔÏóÀà. ±íʾ×ÊÔ´, ÊôÐÔºÍÎı¾µÄ½Ó¿Ú·Ö±ð³ÆÎªResource, Property, ºÍLiteral. ÔÚJenaÖÐ, Ò»¸öͼ(graph)±»³ÆÎªÒ»¸öÄ£ÐͲ¢±»Model½Ó¿ÚËù±íʾ.
´´½¨ÉÏÊöÀýͼ»ò³ÆÎªÉÏÊöÄ£Ð͵ĴúÂëºÜ¼òµ¥:
// some definitions
static String personURI    = "http://somewhere/JohnSmith";
static String fullName     = "John Smith";

// create an empty Model
Model model = ModelFactory.createDefaultModel();

// create the resource
Resource johnSmith = model.createResource(personURI);

// add the property
 johnSmith.addProperty(VCARD.FN, fullName);

ÕâЩ´úÂëÏȶ¨ÒåÁËһЩ³£Á¿, È»ºóʹÓÃÁËModelFactoryÀàÖеÄcreateDefaultMode()·½·¨´´½¨ÁËÒ»¸ö¿ÕµÄ»ùÓÚÄÚ´æ´æ´¢µÄÄ£ÐÍ(Model »ò model). Jena»¹°üº¬ÁËModel½Ó¿ÚµÄÆäËûʵÏÖ·½Ê½. ÀýÈç, Ê¹ÓùØÏµÊý¾Ý¿âµÄ, ÕâЩÀàÐÍ Model½Ó¿ÚÒ²¿ÉÒÔ´ÓModelFactoryÖд´½¨.
ÓÚÊÇJohn SmithÕâ¸ö×ÊÔ´¾Í±»´´½¨ÁË, ²¢ÏòÆäÌí¼ÓÁËÒ»¸öÊôÐÔ. ´ËÊôÐÔÓÉÒ»¸ö"³£" ("constant")ÀàVCARDÌṩ, Õâ¸öÀà±£´æÁËÔÚVCARDģʽ(schema)ÖÐËùÓж¨ÒåµÄ±íʾ¶ÔÏó. JenaҲΪÆäËûÒ»Ð©ÖøÃûµÄģʽÌṩÁ˳£ÀàµÄ±íʾ·½·¨, ÀýÈçÊÇRDFºÍRDFģʽ, Dublin ºËÐıê×¼ºÍDAML.
´´½¨×ÊÔ´ºÍÌí¼ÓÊôÐԵĴúÂë¿ÉÒÔд³É¸ü½ô´ÕµÄ²ãµþÐÎʽ:
Resource johnSmith =
        model.createResource(personURI)
             .addProperty(VCARD.FN, fullName);
Õâ¸öÀý×ӵŤ×÷´úÂë¿ÉÒÔÔÚJena·¢²¼µÄ²ÄÁϵĽ̳̰üÖеÄTutorial1ÖÐÕÒµ½. ×÷ΪÁ·Ï°, Äã×Ô¼º¿ÉÒÔ»ñµÃ´Ë´úÂë²¢ÐÞ¸ÄÆäÒÔ´´½¨Ò»¸ö¼òµ¥VCARD.
ÏÖÔÚÈÃÎÒÃÇΪvcardÔÙÔö¼ÓһЩ¸üÏêϸµÄÄÚÈÝ, ÒÔ±ã̽Ë÷¸ü¶àµÄRDFºÍJenaµÄÌØÐÔ.
ÔÚµÚÒ»¸öÀý×ÓÀï, ÊôÐÔֵΪһ¸öÎı¾. È»¶øRDFÊôÐÔÒ²¿ÉÒÔ²ÉÓÃÆäËûµÄ×ÊÔ´×÷ΪÆäÊôÐÔÖµ. ÏÂÃæÕâ¸öÀý×ÓʹÓó£ÓõÄRDF¼¼ÊõչʾÁËÈçºÎ±íʾJohn SmithÃû×ֵIJ»Í¬²¿·Ö:
 
ÔÚÕâÀïÎÒÃÇÔö¼ÓÁËÒ»¸öеÄÊôÐÔ, vcard:N, À´±íʾJohn SmithÃû×ֵĽṹ. Õâ¸öÄ£ÐÍÓм¸µãÓÐȤ֮´¦. ×¢ÒâÊôÐÔvcard:NʹÓÃÒ»¸ö×ÊÔ´×÷ΪÆðÊôÐÔÖµ. Í¬Ê±×¢Òâ´ú±í¸´ºÏÃû×ÖµÄÍÖÔ²²¢Ã»ÓÐURI±êʶ. Ëü±»ÈÏΪÊÇÒ»¸ö¿Õ°×½áµã(blank Node).
´´½¨´ËÀýµÄJena´úÂëҲʮ·Ö¼òµ¥. Ê×ÏÈÊÇһЩÉùÃ÷ºÍ¶Ô¿ÕÄ£Ð͵Ĵ´½¨.
// some definitions
String personURI    = "http://somewhere/JohnSmith";
String givenName    = "John";
String familyName   = "Smith";
String fullName     = givenName + " " + familyName;

// create an empty Model
Model model = ModelFactory.createDefaultModel();

// create the resource
//   and add the properties cascading style
Resource johnSmith
  = model.createResource(personURI)
         .addProperty(VCARD.FN, fullName)
         .addProperty(VCARD.N,
                      model.createResource()
                           .addProperty(VCARD.Given, givenName)
                           .addProperty(VCARD.Family, familyName));
´ËÀýµÄ¹¤×÷´úÂë¿ÉÒÔÔÚJena·¢²¼²ÄÁϵĽ̳̰üµÄTutorial2Öеõ½.
________________________________________
³ÂÊö
RDFÄ£ÐÍÖеÄÿһ¸ö¼ýÍ·±íʾΪһ¸ö³ÂÊö(statement). Ã¿Ò»¸ö³ÂÊöÉùÃ÷Á˹ØÓÚij¸ö×ÊÔ´µÄij¸öÊÂʵ. Ò»¸ö³ÂÊöÓÐÈý²¿·Ö×é³É.
Ö÷Ìå, Ò²¾ÍÊǼýÍ·µÄ³ö·¢µÄ×ÊÔ´.
ν´Ê, Ò²¾ÍÊDZêʶ¼ýÍ·µÄÊôÐÔ.
¿ÍÌå, Ò²¾ÍÊǼýÍ·ËùÖ¸ÏòµÄÄǸö×ÊÔ´»òÎı¾.
Ò»¸ö³ÂÊöÓÐʱҲ½Ð×öÒ»¸öÈýÔª×éµÄÔ­Òò¾ÍÊÇËüÓÉÈý²¿·Ö×é³É.
Ò»¸öRDFÄ£ÐÍ(ÒëÕß×¢: Ö¸JenaÖеĽӿÚModel)ÊÇÓÉÒ»×é³ÂÊöËù×é³ÉµÄ. ÔÚTutorial2ÖÐ, Ã¿µ÷ÓÃÒ»´ÎaddPropertyº¯Êý¾Í»áÔÚÄ£ÐÍÖÐÔö¼ÓÁíÒ»¸ö³ÂÊö. (ÒòΪһ¸öÄ£ÐÍÊÇÓÉÒ»×é³ÂÊö×é³ÉµÄ, ËùÒÔÔö¼ÓÒ»¸öÖØ¸´µÄ³ÂÊö²¢²»»á²úÉúÈκÎÒâÒå.) JenaÄ£Ðͽӿڶ¨ÒåÁËÒ»¸ölistStatements()·½·¨, ´Ë·½·¨»á·µ»ØÒ»¸öStmtIteratorÀàÐ͵ıäÁ¿. StmtItorÊÇJavaÖÐIteratorµÄÒ»¸ö×ÓÀàÐÍ, Õâ¸öStmtIterator±äÁ¿Öظ´µü´úÁ˸ýӿÚÄ£ÐÍÖеÄËùÓгÂÊö. StmtIteratorÀàÐÍÖÐÓÐÒ»¸ö·½·¨nextStatement(), ¸Ã·½·¨»á´Óiterator·µ»ØÏÂÒ»¸ö³ÂÊö. (¾ÍºÍnext()·µ»ØµÄÒ»Ñù, µ«ÊÇÒѽ«ÆäÓ³ÉäΪStatementÀàÐÍ). ½Ó¿ÚStatementÌṩÁË·ÃÎʳÂÊöÖÐÖ÷Ìå, Î½´ÊºÍ¿ÍÌåµÄ·½·¨.
ÏÖÔÚÎÒÃÇ»áÓÃʹÓÃÄǸö½Ó¿ÚÀ´À©Õ¹Tutorial2, Ê¹ÆðÁгöËùÓеĴ´½¨µÄ³ÂÊö²¢½«ËüÃÇ´òÓ¡³öÀ´. ´ËÀýÍêÕûµÄ´úÂë¿ÉÒÔÔÚTutorial3ÖÐÕÒµ½.
// list the statements in the Model
StmtIterator iter = model.listStatements();

// print out the predicate, subject and object of each statement
while (iter.hasNext()) {
    Statement stmt      = iter.nextStatement();  // get next statement
    Resource  subject   = stmt.getSubject();     // get the subject
    Property  predicate = stmt.getPredicate();   // get the predicate
    RDFNode   object    = stmt.getObject();      // get the object

    System.out.print(subject.toString());
    System.out.print(" " + predicate.toString() + " ");
    if (object instanceof Resource) {
       System.out.print(object.toString());
    } else {
        // object is a literal
        System.out.print(" \\"" + object.toString() + "\\"");
    }

    System.out.println(" .");

ÒòΪһ¸ö³ÂÊöµÄ¿ÍÌå¿ÉÒÔÊÇÒ»¸ö×ÊÔ´Ò²¿ÉÒÔÊÇÒ»¸öÎı¾. getObject()·½·¨»á·µ»ØÒ»¸öÀàÐÍΪRDFNodeµÄ¿ÍÌå, RDFNodeÊÇResourceºÍLiteralÀ๲ͬµÄ³¬Àà. ÎªÁËÈ·¶¨±¾ÀýÖеĿÍÌåÈ·ÇеÄÀàÐÍ, ´úÂëÖÐʹÓàinstanceofÀ´È·¶¨ÆäÀàÐͺÍÏàÓ¦µÄ´¦Àí.
ÔËÐкó, ´Ë³ÌÐò»Ø²úÉúÓë´ËÏàËÆµÄÊä³ö:
http://somewhere/JohnSmith http://www.w3.org/2001/vcard-rdf/3.0#N anon:14df86:ecc3dee17b:-7fff.
anon:14df86:ecc3dee17b:-7fff http://www.w3.org/2001/vcard-rdf/3.0#Family  "Smith".
anon:14df86:ecc3dee17b:-7fff http://www.w3.org/2001/vcard-rdf/3.0#Given  "John" .
http://somewhere/JohnSmith http://www.w3.org/2001/vcard-rdf/3.0#FN  "John Smith".

ÏÖÔÚÄãÃ÷°×ÁËΪʲôģÐ͹¹½¨»á¸ü¼ÓÇåÎú. Èç¹ûÄã×Ðϸ¹Û²ì, ¾Í»á·¢ÏÖÉÏÃæÃ¿Ò»Ðж¼ÓÉÈý¸öÓò×é³É, ÕâÈý¸öÓò·Ö±ð´ú±íÁËÿһ¸ö³ÂÊöµÄÖ÷Ìå, Î½´ÊºÍ¿ÍÌå. ÔÚ´ËÄ£ÐÍÖÐÓÐËĸö¼ýÍ·, ËùÒÔ»áÓÐËĸö³ÂÊö. "anon:14df86:ecc3dee17b:-7fff"ÊÇÓÐJena²úÉúµÄÒ»¸öÄÚ²¿±êʶ·û, Ëü²»ÊÇÒ»¸öURI, Ò²²»Ó¦¸ÃÓëURI»ìÏý. ËüÖ»ÊÇJena´¦ÀíʱʹÓõÄÒ»¸öÄÚ²¿±êºÅ.
W3CµÄRDFºËÐŤ×÷С×鶨ÒåÁËÒ»¸öÀàËÆµÄ±íʾ·ûºÅ³ÆÎªN-ÈýÔª×é(N-Triples). Õâ¸öÃû×Ö±íʾ»áʹÓÃ"ÈýÔª×é·ûºÅ". ÔÚÏÂÒ»½ÚÖÐÎÒÃǻῴµ½JenaÓÐÒ»¸öÄÚÖõÄN-ÈýÔª×éд»úÖÆ(writer).
________________________________________
дRDF
JenaÉèÓжÁдXMLÐÎʽµÄRDF·½·¨. ÕâЩ·½·¨¿ÉÒÔ±»ÓÃÀ´½«Ò»¸öRDFÄ£Ðͱ£´æµ½Îļþ²¢ÔÚÈÕºóÖØÐ½«Æä¶Á»Ø.
Tutorial3´´½¨ÁËÒ»¸öÄ£ÐͲ¢½«ÆäÒÔÈýÔª×éµÄÐÎʽÊä³ö. Tutorial4¶ÔTutorial3×öÁËÐÞ¸Ä, Ê¹Æä½«´ËÄ£ÐÍÒÔRDF XMLµÄÐÎʽÊä³öµ½±ê×¼Êä³öÁ÷ÖÐ. Õâ¸ö´úÂëÒÀȻʮ·Ö¼òµ¥: model.write¿ÉÒÔ´øÒ»¸öOutputStreamµÄ²ÎÊý.
// now write the model in XML form to a file
model.write(System.out);

Ó¦¸ÃÓÐÀàËÆµÄÊä³ö:
<rdf:RDF
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:vcard='http://www.w3.org/2001/vcard-rdf/3.0#'
 >
  <rdf:Description rdf:about='http://somewhere/JohnSmith&#39;>
    <vcard:FN>John Smith</vcard:FN>
    <vcard:N rdf:nodeID="A0"/>
  </rdf:Description>
  <rdf:Description rdf:nodeID="A0">
    <vcard:Given>John</vcard:Given>
    <vcard:Family>Smith</vcard:Family>
  </rdf:Description>
</rdf:RDF>

W3CµÄRDF¹æ¸ñ˵Ã÷Ê鹿¶¨ÁËÈçºÎÓàXMLµÄÐÎʽÀ´±íʾRDF. RDF XMLµÄÓ﷨ʮ·Ö¸´ÔÓ. ¶ÁÕß¿ÉÒÔÔÚRDFºËÐŤ×÷С×éÖÆ¶¨µÄRDFÈëÃÅÆª(primer)ÖÐÕÒµ½¸üÏêϸµÄÖ¸µ¼. µ«ÊDz»¹ÜÔõôÑù, ÈÃÎÒÃÇÏÈѸËÙ¿´Ò»ÏÂÓ¦¸ÃÈçºÎ½âÊÍÉÏÃæµÄRDF XMLÊä³ö
RDF³£³£Ç¶ÈëÔÚÒ»¸ö<rdf:RDF>ÔªËØÖÐ. Èç¹ûÓÐÆäËûµÄ·½·¨ÖªµÀ´ËXMLÊÇRDFµÄ»°,¸ÃÔªËØÊÇ¿ÉÒÔ²»Ð´µÄ. È»¶øÎÒÃdz£³£»áʹÓÃËü. ÔÚÕâ¸öRDFÔªËØÖж¨ÒåÁËÁ½¸öÔÚ±¾ÎĵµÖÐʹÓõÄÃüÃû¿Õ¼ä. ½ÓÏÂÀ´ÊÇÒ»¸ö<rdf:Description>ÔªËØ, ´ËÔªËØÃèÊöÁËURIΪ"http://somewhere/JohnSmith"µÄ×ÊÔ´. Èç¹ûÆäÖеÄrdf:aboutÊôÐÔ±»Ê¡ÂԵϰ, Õâ¸öÔªËØ¾Í±íʾһ¸ö¿Õ°×½áµã.
<vcard:FN>ÔªËØÃèÊöÁË´Ë×ÊÔ´µÄÒ»¸öÊôÐÔ. ÊôÐÔµÄÃû×Ö"FN"ÊÇÊôÓÚvcardÃüÃû¿Õ¼äµÄ. RDF»áͨ¹ýÁ¬½ÓÃüÃû¿Õ¼äǰ׺µÄURIºÍÃû×Ö¾Ö²¿Ãû"FN"À´ÐγɸÃ×ÊÔ´µÄURI "http://www.w3.org/2001/vcard-rdf/3.0#FN". Õâ¸öÊôÐÔµÄֵΪÎı¾"John Smith".
<vcard:N>ÔªËØÊÇÒ»¸ö×ÊÔ´. ÔÚ´ËÀýÖÐ, Õâ¸ö×ÊÔ´ÊÇÓÃÒ»¸öÏà¶ÔURIÀ´±íʾµÄ. RDF»áͨ¹ýÁ¬½ÓÕâ¸öÏà¶ÔURIºÍ´ËÎĵµµÄ»ù×¼URIÀ´°ÑËüת»»ÎªÒ»¸ö¾ø¶ÔURI.
µ«ÊÇ, ÔÚÕâ¸öRDF XMLÊä³öÖÐÓÐÒ»¸ö´íÎó, Ëü²¢Ã»ÓÐ׼ȷµØ±íʾÎÒÃÇËù´´½¨µÄÄ£ÐÍ. Ä£ÐÍÖеĿհ׽áµã±»·ÖÅäÁËÒ»¸öURI. Ëü²»ÔÙÊǿհ׵ÄÁË. RDF/XMLÓï·¨²¢²»ÄܱíʾËùÓеÄRDFÄ£ÐÍ. ÀýÈçËü²»Äܱíʾһ¸öͬʱÊÇÁ½¸ö³ÂÊöµÄ¿ÍÌåµÄ¿Õ°×½áµã. ÎÒÃÇÓÃÀ´Ð´Õâ¸öRDF/XMLµÄ'ÑÆ'writer·½·¨²¢Ã»ÓÐÊÔͼȥÕýÈ·µÄÊéдÕâ¸öÄ£Ð͵Ä×Ó¼¯, ËäÈ»ÆäÔ­±¾¿ÉÒÔ±»ÕýÈ·Êéд. Ëü¸øÃ¿Ò»¸ö¿Õ°×½áµãÒ»¸öURI, Ê¹Æä²»ÔÙ¿Õ°×.
JenaÓÐÒ»¸öÀ©Õ¹µÄ½Ó¿Ú, ËüÔÊÐíеÄΪ²»Í¬µÄRDF´®Ðл¯ÓïÑÔÉè¼ÆµÄwriter¿ÉÒÔ±»ÇáÒ׵زåÈë. ÒÔÉϵĵ÷Óûἤ·¢Ò»¸ö±ê×¼µÄ'ÑÆ'writer·½·¨. JenaÒ²°üº¬ÁËÒ»¸ö¸ü¼Ó¸´ÔÓµÄRDF/XML writer, Ëü¿ÉÒÔ±»ÓÃЯ´øÁíÒ»¸ö²ÎÊýµÄwrite()·½·¨Ëùµ÷ÓÃ.
// now write the model in XML form to a file
model.write(System.out, "RDF/XML-ABBREV");
 
´Ëwriter, Ò²¾ÍÊÇËùνµÄPrettyWriter, ÀûÓÃRDF/XMLËõдÓï·¨°ÑÄ£ÐÍдµØ¸üΪ½ô´Õ. ËüÒ²Äܱ£´æ¾¡¿ÉÄܱ£Áô¿Õ°×½áµã. È»¶ø, Ëü²¢²»ºÏÊÊÀ´Êä³ö´óµÄÄ£ÐÍ. ÒòΪËüµÄÐÔÄܲ»¿ÉÄܱ»ÈËÃÇËù½ÓÊÜ. ÒªÊä³ö´óµÄÎļþºÍ±£Áô¿Õ°×½áµã, ¿ÉÒÔÓÃN-ÈýÔª×éµÄÐÎʽÊä³ö:
// now write the model in XML form to a file
model.write(System.out, "N-TRIPLE");

Õâ»á²úÉúÀàËÆÓÚTutorial3µÄÊä³ö, ´ËÊä³ö»á×ñÑ­N-ÈýÔª×éµÄ¹æ¸ñ.

________________________________________
¶ÁRDF
Tutorial 5 ÑÝʾÁËÈçºÎ½«ÓÃRDF XML¼Ç¼µÄ³ÂÊö¶ÁÈëÒ»¸öÄ£ÐÍ. ÔÚ´ËÀýÖÐ, ÎÒÃÇÌṩÁËÒ»¸öСÐÍRDF/XMLÐÎʽµÄvcardµÄÊý¾Ý¿â. ÏÂÃæ´úÂë»á½«Æä¶ÁÈëºÍд³ö. ×¢Òâ: Èç¹ûÒªÔËÐÐÕâ¸öС³ÌÐò, Ó¦¸Ã°ÑÊäÈëÎļþ·ÅÔÚÄãµÄclasspathËùÖ¸ÏòµÄĿ¼»òjarÖÐ.

 // create an empty model
 Model model = ModelFactory.createDefaultModel();

 // use the class loader to find the input file
 InputStream in = Tutorial05.class
                               .getClassLoader()
                               .getResourceAsStream(inputFileName);
if (in == null) {
    throw new IllegalArgumentException(
                                 "file: " + inputFileName + " not found");
}

// read the RDF/XML file
model.read(new InputStreamReader(in), "");

// write it to standard out
model.write(System.out);
      
read()·½·¨Öеĵڶþ¸ö²ÎÊýÊÇÒ»¸öURI, ËüÊDZ»ÓÃÀ´½â¾öÏà¶ÔURIµÄ. ÒòΪÔÚ²âÊÔÎļþÖÐûÓÐʹÓÃÏà¶ÔURI, ËùÒÔËüÔÊÐí±»ÖÃΪ¿ÕÖµ. ÔËÐÐʱ, Tutorial5»á²úÉúÀàËÆÈçϵÄXMLÊä³ö
<rdf:RDF
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:vcard='http://www.w3.org/2001/vcard-rdf/3.0#'
 >
  <rdf:Description rdf:nodeID="A0">
    <vcard:Family>Smith</vcard:Family>
    <vcard:Given>John</vcard:Given>
  </rdf:Description>
  <rdf:Description rdf:about='http://somewhere/JohnSmith/&#39;>
    <vcard:FN>John Smith</vcard:FN>
    <vcard:N rdf:nodeID="A0"/>
  </rdf:Description>
  <rdf:Description rdf:about='http://somewhere/SarahJones/&#39;>
    <vcard:FN>Sarah Jones</vcard:FN>
    <vcard:N rdf:nodeID="A1"/>
  </rdf:Description>
  <rdf:Description rdf:about='http://somewhere/MattJones/&#39;>
    <vcard:FN>Matt Jones</vcard:FN>
    <vcard:N rdf:nodeID="A2"/>
  </rdf:Description>
  <rdf:Description rdf:nodeID="A3">
    <vcard:Family>Smith</vcard:Family>
    <vcard:Given>Rebecca</vcard:Given>
  </rdf:Description>
  <rdf:Description rdf:nodeID="A1">
    <vcard:Family>Jones</vcard:Family>
    <vcard:Given>Sarah</vcard:Given>
  </rdf:Description>
  <rdf:Description rdf:nodeID="A2">
    <vcard:Family>Jones</vcard:Family>
    <vcard:Given>Matthew</vcard:Given>
  </rdf:Description>
  <rdf:Description rdf:about='http://somewhere/RebeccaSmith/&#39;>
    <vcard:FN>Becky Smith</vcard:FN>
    <vcard:N rdf:nodeID="A3"/>
  </rdf:Description>
</rdf:RDF>

________________________________________
Jena RDF °ü
JenaÊÇÒ»¸öΪÓïÒåÍøÓ¦ÓÃÉè¼ÆµÄÒ»¸öJava API. ¶ÔÓ¦Óÿª·¢Õß¶øÑÔ, Ö÷Òª¿ÉÓõÄRDF°üÊÇcom.hp.hpl.jena.rdf.model. ÒòΪAPIÊÇÒԽӿڵķ½Ê½¶¨ÒåµÄ, ËùÒÔÓ¦ÓôúÂë¿ÉÒÔʹÓò»Í¬µÄʵÏÖ»úÖÆ¶ø²»Óøıä´úÂë±¾Éí. Õâ¸ö°ü°üº¬ÁË¿ÉÒÔ±íʾģÐÍ, ×ÊÔ´, ÊôÐÔ, Îı¾, ³ÂÊöºÍÆäËûRDF¹Ø¼ü¸ÅÄîµÄ½Ó¿Ú, »¹ÓÐÒ»¸öÓÃÀ´´´½¨Ä£Ð͵ÄModelFactory. ËùÒÔÈç¹ûÒªÓ¦ÓôúÂëÓëʵÏÖÀà±£³Ö¶ÀÁ¢, ×îºÃ¾¡¿ÉÄܵØÊ¹ÓýӿÚ, ¶ø²»ÒªÊ¹ÓÃÌØ¶¨µÄʵÏÖÀà.
com.hp.hpl.jena.Tutorial°ü°üº¬Á˱¾½Ì³ÌËùÓÐÀý×ÓÖÐʹÓõ½µÄ¹¤×÷Ô´´úÂë.
com.hp.hpl.jena.implÕâЩ°ü°üº¬ÁËÐí¶àÖ´ÐÐʱËù³£ÓõÄÖ´ÐÐÀà. ±ÈÈç, ËüÃǶ¨ÒåÁËÖîÈçResourseImpl, PropertyImplºÍLiteralImplµÄÀà, ÕâЩÀà¿ÉÒÔ±»²»Í¬µÄÓ¦ÓÃÖ±½ÓʹÓÃÒ²¿ÉÒÔ±»¼Ì³ÐʹÓÃ. Ó¦ÓóÌÐòÓ¦¸Ã¾¡¿ÉÄÜÉÙµØÖ±½ÓʹÓÃÕâЩÀà. ÀýÈç, ÓëÆäʹÓÃResouceImplÀ´´´½¨Ò»¸öеÄʵÀý, ¸üºÃµÄ°ì·¨ÊÇʹÓÃÈκÎÕýÔÚʹÓõÄÄ£Ð͵ÄcreateResource·½·¨À´Íê³É. ÄÇÑùµÄ»°, Èç¹ûÄ£Ð͵ÄÖ´ÐвÉÓÃÁËÒ»¸öÓÅ»¯µÄResouceÖ´ÐÐ, ÄÇôÔÚÕâÁ½ÖÖÀàÐÍÖв»ÐèÒªÓÐÈκεÄת»»¹¤×÷.

________________________________________
²Ù×ÝÄ£ÐÍ
µ½Ä¿Ç°ÎªÖ¹, ±¾½Ì³ÌÖ÷Òª½²ÊöµÄÊÇÈçºÎ´´½¨, ¶ÁÈëºÍÊä³öRDFÄ£ÐÍ. ÏÖÔÚÊÇʱºòÒª½²ÊöÈçºÎ·ÃÎÊÄ£ÐÍÖеÄÐÅÏ¢.
Èç¹ûÓÐÁËÒ»¸ö×ÊÔ´µÄURI, ÄÇô¾Í¿ÉÒÔÓÃModel.getResource(String uri)À´´ÓÄ£ÐÍ»ñÈ¡Õâ¸ö×ÊÔ´¶ÔÏó. Õâ¸ö·½·¨±»¶¨ÒåÀ´·µ»ØÒ»¸ö×ÊÔ´¶ÔÏó, Èç¹ûËüȷʵ´æÔÚÓÚÄ£ÐÍÖÐ, ·ñÔòµÄ»°¾Í´´½¨Ò»¸öеÄ. ÀýÈç, ÈçºÎ´ÓÄ£ÐÍÖлñÈ¡Adam Smith×ÊÔ´, Õâ¸öÄ£ÐÍÊÇTutorial5ÖдÓÎļþ¶ÁÈëµÄ:
// retrieve the John Smith vcard resource from the model
Resource vcard = model.getResource(johnSmithURI);
  
Resouce½Ó¿Ú¶¨ÒåÁËһϵÁÐÓÃÓÚ·ÃÎÊij¸ö×ÊÔ´µÄÊôÐԵķ½·¨. Resource.getProperty(Property p)·½·¨·ÃÎÊÁ˸Ã×ÊÔ´µÄÊôÐÔ. Õâ¸ö·½·¨²»ÔÊÐíͨ³£µÄJava·ÃÎʵÄת»», ÒòΪËù·µ»ØµÄ¶ÔÏóÊÇStatement, ¶ø²»ÊÇÄãËùÔ¤¼ÆµÄProperty. ·µ»ØÕû¸ö³ÂÊöµÄºÃ´¦ÊÇÔÊÐíÓ¦ÓóÌÐòͨ¹ýʹÓÃËüµÄij¸ö·ÃÎÊ·½·¨À´·ÃÎʸóÂÊöµÄ¿ÍÌåÀ´·ÃÎÊÕâ¸öÊôÐÔÖµ. ÀýÈçÈçºÎ»ñÈ¡×÷Ϊvcard:NÊôÐÔÖµµÄ×ÊÔ´:
// retrieve the value of the N property
Resource name = (Resource) vcard.getProperty(VCARD.N)
                                .getObject();

Ò»°ã¶øÑÔ, Ò»¸ö³ÂÊöµÄ¿ÍÌå¿ÉÒÔÊÇÒ»¸ö×ÊÔ´»òÊÇÒ»¸öÎı¾. ËùÒÔ´ËÓ¦ÓóÌÐò´úÂëÖªµÀÕâ¸öÖµÒ»¶¨ÊǸö×ÊÔ´, ¾Í½«ÀàÐÍ×ÊÔ´Ó³Éäµ½·µ»ØµÄ¶ÔÏóÉÏ. JenaµÄÄ¿±êÖ®Ò»ÊÇÌṩ»á·µ»ØÖµÎªÌض¨ÀàÐ͵ķ½·¨, ÕâÑù,Ó¦ÓóÌÐò¾Í²»±ØÔÙ×öÀàÐÍת»»¹¤×÷, Ò²²»±ØÔÙ±àÒëʱ×öÀàÐͼì²é¹¤×÷. ÒÔÉϵĴúÂëÆ¬¶ÎÒ²¿ÉÒÔд³É¸ü·½±ãµÄÐÎʽ:
// retrieve the value of the FN property
Resource name = vcard.getProperty(VCARD.N)
                     .getResource();
ÀàËÆµØ, ÊôÐÔµÄÎı¾ÖµÒ²¿ÉÒÔ±»»ñÈ¡:
// retrieve the given name property
String fullName = vcard.getProperty(VCARD.FN)
                        .getString();

ÔÚÕâ¸öÀý×ÓÖÐ, ×ÊÔ´vcardÖ»ÓÐÒ»¸övcard:FNÊôÐÔºÍÒ»¸övcard:NÊôÐÔ. RDFÔÊÐí×ÊÔ´ÓÐÖØ¸´µÄÊôÐÔ, ÀýÈçAdam¿ÉÄÜÓг¬¹ýÒ»¸öµÄêdzÆ. ÈÃÎÒÃǼÙÉèËûÓÐÁ½¸öêdzÆ:
// add two nickname properties to vcard
vcard.addProperty(VCARD.NICKNAME, "Smithy")
.addProperty(VCARD.NICKNAME, "Adman");

ÕýÈçÇ°ÃæËùÌáµ½µÄÄÇÑù, Jena½«RDFÄ£ÐͱíʾΪһ×é³ÂÊö, ËùÒÔÔÚÄ£ÐÍÖÐÐÂÔöÒ»¸öÓëÔ­ÓгÂÊöÓÐ×ÅÏàͬµÄÖ÷Ìå,ν´ÊºÍ¿ÍÌåµÄ³ÂÊö²¢²»»áºóʲô×÷ÓÃ. JenaûÓж¨Òå»á·µ»ØÄ£ÐÍÖдæÔÚµÄÁ½¸öêdzÆÖеÄÄÄÒ»¸ö. Vcard.getProperty(VCARD.NICKNAME)µ÷ÓõĽá¹ûÊDz»È·¶¨µÄ. Jena»á·µ»ØÕâЩֵÖеÄijһ¸ö, µ«ÊDz¢²»±£Ö¤Á½´ÎÁ¬ÐøµÄµ÷Óûáͬһ¸öÖµ.
Ò»¸öÊôÐÔºÜÓпÉÄÜ»á³öÏÖ¶à´Î, ¶ø·½·¨Resource.listProperty(Property p)¿ÉÒÔÓÃÀ´·µ»ØÒ»¸öiterator, Õâ¸öiterator»áÁгöËùÓеÄÖµ. ´Ë·½·¨Ëù·µ»ØµÄiterator·µ»ØµÄ¶ÔÏóµÄÀàÐÍΪStatement.ÎÒÃÇ¿ÉÒÔÏñÕâÑùÁгöËùÓеÄêdzÆ:
// set up the output
System.out.println("The nicknames of \\""
                      + fullName + "\\" are:");
// list the nicknames
StmtIterator iter = vcard.listProperties(VCARD.NICKNAME);
while (iter.hasNext()) {
    System.out.println("    " + iter.nextStatement()
                                    .getObject()
                                    .toString());
}

´Ë´úÂë¿ÉÒÔÔÚTutorial6ÖÐÕÒµ½, ÔËÐкó»á²úÉúÈçÏÂÊä³ö:
The nicknames of "John Smith" are:
    Smithy
    Adman
Ò»¸ö×ÊÔ´µÄËùÓÐÊôÐÔ¿ÉÒÔÓò»´ø²ÎÊýµÄlistStatement()·½·¨Áгö.
________________________________________
²éѯģÐÍ
ǰһ½ÚÌÖÂÛÁËÈçºÎͨ¹ýÒ»¸öÓÐ×ÅÒÑÖªURIµÄ×ÊÔ´À´²Ù×ÝÄ£ÐÍ. ±¾½ÚÒªÌÖÂÛ²éѯģÐÍ. ºËÐĵÄJena APIÖ»Ö§³ÖһЩÓÐÏ޵IJéѯԭÓï. ¶ÔÓÚ¸üÇ¿´ó²éѯÉ豸RDQLµÄ½éÉܲ»ÔÚ´ËÎĵµÖÐ.
ÁгöÄ£ÐÍËùÓгÂÊöµÄModel.listStatements()·½·¨Ò²ÐíÊÇ×îԭʼµÄ²éѯģÐÍ·½Ê½. È»¶ø²¢²»ÍƼöÔÚ´óÐ͵ÄÄ£ÐÍÉÏʹÓÃÕâ¸ö·½·¨. ÀàËÆµÄÓÐModel.listSubjects(), µ«ÆäËù·µ»ØµÄiterator»áµü´úËùÓк¬ÓÐÊôÐÔµÄ×ÊÔ´, ÀýÈçÊÇһЩ³ÂÊöµÄÖ÷Ìå.
Model.listSubjectsWithProperty(Property p, RDFNode o)·½·¨Ëù·µ»ØµÄiteratorµø´úÁËËùÓоßÓÐÊôÐÔpÇÒpÊôÐÔµÄֵΪoµÄ×ÊÔ´. ÎÒÃÇ¿ÉÄÜ»áÔ¤¼ÆÊ¹ÓÃrdf:typeÊôÐÔÀ´ËÑË÷×ÊÔ´µÄÀàÐÍÊôÐÔÒÔ»ñµÃËùÓеÄvcard×ÊÔ´:
// retrieve all resource of type Vcard.
ResIterator iter = model.listSubjectsWithProperty(RDF.type, VCARD.Vcard);

È»¶ø, ²»ÐÒµÄÊÇ, ÎÒÃÇÏÖÔÚÕýÔÚʹÓõÄvcardģʽ²¢Ã»ÓÐΪvcard¶¨ÒåÀàÐÍ. È»¶ø, Èç¹ûÎÒÃǼÙÉèÖ»ÓÐÀàÐÍΪvcardµÄ×ÊÔ´²Å»áʹÓÃvcard:FNÊôÐÔ, ²¢ÇÒÔÚÎÒÃǵÄÊý¾ÝÖÐ, ËùÓдËÀà×ÊÔ´¶¼ÓÐÕâÑùÒ»¸öÊôÐÔ, ÄÇôÎÒÃǾͿÉÒÔÏñÕâÑùÕÒµ½ËùÓеÄvcard:
// list vcards
ResIterator iter = model.listSubjectsWithProperty(VCARD.FN);
while (iter.hasNext()) {
    Resource r = iter.nextResource();
    ...
}

ËùÓеÄÕâЩ²éѯ·½·¨²»¹ýÊÇÔÚÔ­Óï²éѯ·½·¨model.listStatements(Select s)ÉÏÉÔ×ö±ä»¯¶øÒÑ. ´Ë·½·¨»á·µ»ØÒ»¸öiterator, ¸Ãiterator»áµø´úÄ£ÐÍÖÐËùÓб»sÑ¡ÖеijÂÊö. Õâ¸öselector½Ó¿Ú±»Éè¼Æ³É¿ÉÀ©Õ¹µÄ, µ«ÊÇĿǰ, ËüÖ»ÓÐÒ»¸öÖ´ÐÐÀà,ÄǾÍÊÇcom.hp.hpl.jena.rdf.model°üÖеÄSimpleSelectorÀà. ÔÚJenaÖÐʹÓÃSimpleSelectorÊǺÜÉÙ¼ûµÄÇé¿ö, ¼´µ±ÐèÒªÖ±½ÓʹÓÃÒ»¸öÌØ¶¨Àà¶ø²»ÊÇʹÓýӿÚ. SimpleSelectorµÄ¹¹Ô캯Êý´øÓÐÈý¸ö²ÎÊý:

Selector selector = new SimpleSelector(subject, predicate, object)
 
Õâ¸öselector»áÑ¡ÔñËùÓÐÖ÷ÌåÓë²ÎÊýsubjectÏàÅä, Î½´ÊÓë²ÎÊýpredicateÏàÅä, ÇÒ¿ÍÌåÓë²ÎÊýobjectÏàÅäµÄ³ÂÊö. 
Èç¹ûij¸ö²ÎÊýֵΪnull, ÔòËü±íʾÓëÈκÎÖµ¾ùÆ¥Åä; ·ñÔòµÄ»°, ËüÃÇ¾Í»áÆ¥ÅäÒ»ÑùµÄ×ÊÔ´»òÎı¾. (µ±Á½¸ö×ÊÔ´ÓÐÏàͬµÄURI»òÊÇͬһ¸ö¿Õ°×½áµãʱ, ÕâÁ½¸ö×ÊÔ´¾ÍÊÇÒ»ÑùµÄ; µ±Á½¸öÎı¾ÊÇÒ»ÑùµÄµ±ÇÒ½öµ±ËüÃǵÄËùÓгɷֶ¼ÊÇÒ»ÑùµÄ.) ËùÒÔ:
Selector selector = new SimpleSelector(null, null, null);
  
»áÑ¡ÔñÄ£ÐÍÖÐËùÓеijÂÊö.
Selector selector = new SimpleSelector(null, VCARD.FN, null);
  
»áÑ¡ÔñËùÓÐν´ÊΪVCARD.FNµÄ³ÂÊö, ¶ø¶ÔÖ÷ÌåºÍ¿ÍÌåûÓÐÒªÇó. ×÷Ϊһ¸öÌØÊâµÄËõд,
listStatements( S, P, O ) 
µÈͬÓë
listStatements( new SimpleSelector( S, P, O ) ) 
ÏÂÃæµÄ´úÂë¿ÉÒÔÔÚTutorial7ÖÐÕÒµ½, ÁоÙÁËÊý¾Ý¿âÖÐËùÓÐvcardÖеÄÈ«Ãû.
// select all the resources with a VCARD.FN property
ResIterator iter = model.listSubjectsWithProperty(VCARD.FN);
if (iter.hasNext()) {
    System.out.println("The database contains vcards for:");
    while (iter.hasNext()) {
        System.out.println("  " + iter.nextStatement()
                                      .getProperty(VCARD.FN)
                                      .getString());
    }
} else {
    System.out.println("No vcards were found in the database");
}
         
Õâ¸ö»á²úÉúÀàËÆÈçϵÄÊä³ö:
The database contains vcards for:
  Sarah Jones
  John Smith
  Matt Jones
  Becky Smith
  
ÄãµÄÏÂÒ»¸öÁ·Ï°ÊÇÐ޸Ĵ˴úÂëÒÔʹÓÃSimpleSelector¶ø²»ÊÇʹÓÃlistSubjectsWithPropertyÀ´´ïµ½ÏàͬµÄЧ¹û.
ÈÃÎÒÃÇ¿´¿´ÈçºÎ¶ÔËùÑ¡ÔñµÄ³ÂÊöʵÐиüºÃµÄ¿ØÖÆ. SimpleSelector¿ÉÒÔ±»¼Ì³Ð, ËüµÄselect·½·¨¿ÉÒÔ±»ÐÞ¸ÄÀ´ÊµÏÖ¸üºÃµÄ¹ýÂË:
// select all the resources with a VCARD.FN property
// whose value ends with "Smith"
StmtIterator iter = model.listStatements(
    new SimpleSelector(null, VCARD.FN, (RDFNode) null) {
        public boolean selects(Statement s)
            {return s.getString().endsWith("Smith");}
});

Õâ¸öʾÀýʹÓÃÁËÒ»¸ö¼ò½àµÄJava¼¼Êõ, ¾ÍÊǵ±´´½¨´ËÀàµÄÒ»¸öʵÀýÊ±ÖØÔØÒ»¸öÄÚÁªµÄ·½·¨. ÕâÀïselects(¡­)·½·¨»á¼ì²éÒÔ±£Ö¤È«ÃûÒÔ"Smith"×ö½áβ. ÖØÒªµÄÊÇҪעÒâ¶ÔÖ÷Ìå, Î½ÓïºÍ¿ÍÌåµÄ¹ýÂËÊÇÔÚµ÷ÓÃselects(¡­)·½·¨Ö®Ç°µÄÖ´ÐеÄ, ËùÒÔ¶îÍâµÄ²âÊÔÖ»»á±»Ó¦ÓÃÓÚÆ¥ÅäµÄ³ÂÊö.
ÍêÕûµÄ´úÂë¿ÉÒÔÔÚTutorial8ÖÐÕÒµ½, ²¢»á²úÉúÈçϵÄÊä³ö:
The database contains vcards for:
  John Smith
  Becky Smith
ÄãÒ²Ðí»áÈÏΪÏÂÃæµÄ´úÂë:
// do all filtering in the selects method
StmtIterator iter = model.listStatements(
  new
      SimpleSelector(null, null, (RDFNode) null) {
          public boolean selects(Statement s) {
              return (subject == null   || s.getSubject().equals(subject))
                  && (predicate == null || s.getPredicate().equals(predicate))
                  && (object == null    || s.getObject().equals(object))
          }
     }
 });
µÈͬÓÚ:
StmtIterator iter =
  model.listStatements(new SimpleSelector(subject, predicate, object)

ËäÈ»ÔÚ¹¦ÄÜÉÏËüÃÇ¿ÉÄÜÊǵÈͬµÄ, µ«ÊǵÚÒ»ÖÖÐÎʽ»áÁоٳöÄ£ÐÍÖÐËùÓеijÂÊö, È»ºóÔÙ¶ÔËüÃǽøÐÐÖðÒ»µÄ²âÊÔ. ¶øµÚ¶þÖÖÐÎʽÔòÔÊÐíÖ´ÐÐʱ½¨Á¢Ë÷ÒýÀ´ÌṩÐÔÄÜ. Äã¿ÉÒÔÔÚÒ»¸ö´óÄ£ÐÍÖÐ×Ô¼ºÊÔÊÔÑéÖ¤Ò»ÏÂ, µ«ÊÇÏÖÔÚÏÈΪ×Ô¼ºµ¹Ò»±­¿§·ÈÐÝϢһϰÉ.
________________________________________
¶ÔÄ£Ð͵IJÙ×÷
JenaÌṩÁ˰ÑÄ£Ð͵±×÷Ò»¸ö¼¯ºÏÕûÌåÀ´²Ù×ݵÄÈýÖÖ²Ù×÷·½·¨. ¼´ÈýÖÖ³£Óõļ¯ºÏ²Ù×÷:²¢, ½»ºÍ²î.
Á½¸öÄ£Ð͵IJ¢²Ù×÷¾ÍÊǰѱíʾÁ½¸öÄ£Ð͵ijÂÊö¼¯µÄ²¢²Ù×÷. ÕâÊÇRDFÉè¼ÆËùÖ§³ÖµÄ¹Ø¼ü²Ù×÷Ö®Ò». Ëü´Ë²Ù×÷ÔÊÐí°Ñ·ÖÀëµÄÊý¾ÝÔ´ºÏ²¢µ½Ò»Æð. ¿¼ÂÇÏÂÃæÁ½¸öÄ£ÐÍ:

 ºÍ 
µ±ËüÃDZ»ºÏ²¢Ê±, Á½¸öhttp://...JohnSmith»áºÏ²¢³ÉÒ»¸ö, Öظ´µÄvcard:FN¼ýÍ·»á±»¶ªÆú, ´Ëʱ¾Í»á²úÉú:
 

ÈÃÎÒÃÇ¿´Ò»ÏÂÕâ¸ö´úÂëµÄ¹¦ÄÜ(ÍêÕûµÄ´úÂëÔÚTutorial9ÖÐ), ÔÙ¿´¿´»á·¢Éúʲô.
// read the RDF/XML files
model1.read(new InputStreamReader(in1), "");
model2.read(new InputStreamReader(in2), "");

// merge the Models
Model model = model1.union(model2);

// print the Model as RDF/XML
model.write(system.out, "RDF/XML-ABBREV");

petty writer»á²úÉúÈçϵÄÊä³ö:
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:vcard="http://www.w3.org/2001/vcard-rdf/3.0#">
  <rdf:Description rdf:about="http://somewhere/JohnSmith/">
    <vcard:EMAIL>
      <vcard:internet>
        <rdf:value>John@...</rdf:value>
      </vcard:internet>
    </vcard:EMAIL>
    <vcard:N rdf:parseType="Resource">
      <vcard:Given>John</vcard:Given>
      <vcard:Family>Smith</vcard:Family>
    </vcard:N>
    <vcard:FN>John Smith</vcard:FN>
  </rdf:Description>
</rdf:RDF>

¼´±ãÄã²»ÊìϤRDF/XMLµÄÓ﷨ϸ½Ú, ÄãÈÔÈ»¿ÉÒÔÇå³þµÄ¿´¼ûÄ£ÐÍÈçͬԤÆÚ°ã±»ºÏ²¢ÁË. ÎÒÃÇ¿ÉÒÔÔÚÀàËÆµÄ·½Ê½ÏÂÔËËãÄ£Ð͵Ľ»²Ù×÷ºÍ²î²Ù×÷.
________________________________________
ÈÝÆ÷
RDF¶¨ÒåÁËÒ»ÀàÌØÊâµÄ×ÊÔ´À´±íʾÊÂÎïµÄ¼¯ºÏ. ÕâЩ×ÊÔ´³ÆÎªÈÝÆ÷. Ò»¸öÈÝÆ÷µÄ³ÉÔ±¿ÉÒÔÊÇ×ÊÔ´Ò²¿ÉÒÔÊÇÎı¾. ÓÐÈýÀàÈÝÆ÷: 
Ò»¸öBAGÊÇÒ»¸öÎÞÐòµÄ¼¯ºÏ.
Ò»¸öALTÊÇÒ»¸öÓÃÀ´±íʾ±¸Ñ¡ÏîµÄÎÞÐòµÄ¼¯ºÏ.
Ò»¸öSEQÊÇÒ»¸öÓÐÐòµÄ¼¯ºÏ.
Ò»¸öÈÝÆ÷ÓÉÒ»¸ö×ÊÔ´±íʾ. ¸Ã×ÊÔ´»áÓÐÒ»¸ördf:typeÊôÐÔ, ÊôÐÔֵΪrdf:Bag, »òrdf:Alt, »òÊÇrdf:Seq, ÔÙ»òÊÇÕâЩÀàÐ͵Ä×ÓÀàÐÍ, ÕâÈ¡¾öÓÚÈÝÆ÷µÄÀàÐÍ. ÈÝÆ÷µÄµÚÒ»¸ö³ÉÔ±ÊÇÈÝÆ÷µÄrdf:_1µÄÊôÐÔËù¶ÔÓ¦µÄÊôÐÔÖµ; µÚ¶þ¸ö³ÉÔ±ÊÇÈÝÆ÷µÄrdf:_2ÊôÐÔµÄÖµ, ÒÀ´ËÀàÍÆ. ÕâЩrdf:_nnnÊôÐÔ±»³ÆÎªÐòÊýÊôÐÔ.
ÀýÈç, Ò»¸öº¬ÓÐSmithµÄvcardµÄ¼òµ¥bagÈÝÆ÷µÄÄ£ÐÍ¿ÉÄܻῴÆðÀ´ÊÇÕâÑùµÄ:
 

ËäÈ»bagÈÝÆ÷µÄ³ÉÔ±ÃDZ»rdf:_1,rdf_2µÈµÈµÄÊôÐÔËù±íʾ, µ«ÊÇÕâЩÊôÐÔµÄ˳ÐòÈ´²¢²»ÖØÒª. ¼´±ãÎÒÃǽ«rdf:_1ºÍrdf:_2µÄÊôÐÔÖµ½»»», µ«Êǽ»»»ºóµÄÄ£ÐÍÈÔÈ»±íʾÏàͬµÄÐÅÏ¢.
AltÊÇÉè¼ÆÓÃÀ´±íʾ±»Ñ¡ÏîµÄ. ÀýÈç, ÎÒÃǼٶ¨ÓÐÒ»¸ö±íʾÈí¼þ²úÆ·µÄ×ÊÔ´. Ëü¿ÉÄÜÓÐÒ»¸öÊôÐÔָʾ´ÓÄÄÀï¿ÉÒÔ»ñµÃ´ÎÈí¼þ²úÆ·. Õâ¸öÊôÐÔÖµ¿ÉÄÜÊÇÒ»¸ö°üº¬¸÷ÖÖÏÂÔØµØÖ·µÄAlt¼¯ºÏ. AltÊÇÎÞÐòµÄ, ³ýÁËrdf:_1ÊôÐÔÓÐ×ÅÌØÊâµÄÒâÒå, Ëü±íʾĬÈϵÄÑ¡Ïî.
¾¡¹ÜÎÒÃÇ¿ÉÒÔÓûù±¾µÄ×ÊÔ´ºÍÊôÐÔ»úÖÆÀ´´¦ÀíÈÝÆ÷, JenaΪ´¦ÀíÈÝÆ÷Éè¼ÆÁËÏÔʽµÄ½Ó¿ÚºÍÖ´ÐÐÀà. Òª±ÜÃâÔÚʹÓÃÒ»¸ö¶ÔÏóÀ´²Ù×÷ÈÝÆ÷µÄͬʱȥʹÓõͲ㷽·¨À´¸Ä±äÈÝÆ÷.
ÈÃÎÒÃÇÐÞ¸ÄTutorial8ÒÔ´´½¨Ò»¸öbag:
// create a bag
Bag smiths = model.createBag();

// select all the resources with a VCARD.FN property
// whose value ends with "Smith"
StmtIterator iter = model.listStatements(
    new SimpleSelector(null, VCARD.FN, (RDFNode) null) {
        public boolean selects(Statement s) {
                return s.getString().endsWith("Smith");
        }
    });
// add the Smith's to the bag
while (iter.hasNext()) {
    smiths.add(iter.next().getSubject());
}

Èç¹ûÎÒÃǽ«´ÎÄ£ÐÍÊä³ö¿ÉÒÔ¿´¼ûËüº¬ÓÐÀàËÆÈçϵijɷÖ:
<rdf:RDF
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:vcard='http://www.w3.org/2001/vcard-rdf/3.0#'
 >
...
  <rdf:Description rdf:nodeID="A3">
    <rdf:type rdf:resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag'/>
    <rdf:_1 rdf:resource='http://somewhere/JohnSmith/&#39;/>
    <rdf:_2 rdf:resource='http://somewhere/RebeccaSmith/&#39;/>
  </rdf:Description>
</rdf:RDF>

Õâ±íʾÁËBag×ÊÔ´.
ÈÝÆ÷½Ó¿ÚÌṩÁËÒ»¸öiteratorÀ´ÁоÙÈÝÆ÷µÄÄÚÈÝ:
// print out the members of the bag
NodeIterator iter2 = smiths.iterator();
if (iter2.hasNext()) {
    System.out.println("The bag contains:");
    while (iter2.hasNext()) {
        System.out.println("  " +
            (Resource) iter2.next())
                            .getProperty(VCARD.FN)
                            .getString());
    }
} else {
    System.out.println("The bag is empty");
}

²¢»á²úÉúÈçϵÄÊä³ö:
The bag contains:
  John Smith
  Becky Smith

±¾ÀýµÄ¿ÉÖ´ÐдúÂë¿ÉÒÔÔÚTutorial10ÖÐÕÒµ½.
JenaÀàËùÌṩµÄ²Ù×ÝÈÝÆ÷µÄ·½·¨°üÀ¨Ôö¼ÓгÉÔ±, ÔÚÈÝÆ÷Öмä²åÈëгÉÔ±ºÍɾ³ýÒÑÓеijÉÔ±. JenaÈÝÆ÷ÀàĿǰ±£Ö¤ËùʹÓõÄÐòÊýÊôÐÔÁбí»á´Órdf:_1¿ªÊ¼²¢ÇÒÊÇÏàÁÚµÄ. RDFºËÐŤ×÷С×é·ÅËÉÁË´ËÏîÏÞÖÆ, ÒÔÔÊÐíÓоֲ¿µÄÈÝÆ÷±íʾ. ËùÒÔÕâÊÇJena½«À´¿ÉÄÜ»áÐ޸ĵĵط½Ö®Ò».

________________________________________
¹ØÓÚÎı¾(Literals)ºÍÊý¾ÝÀàÐ͵ĸü¶à̽ÌÖ
RDFÎı¾(literals)²¢²»½ö½öÊǼòµ¥µÄ×Ö·û´®¶øÒÑ. Îı¾¿ÉÄÜÓÐÒ»¸öÓïÑÔ±êÇ©À´Ö¸Ê¾¸ÃÎı¾Ê¹ÓõÄÓïÑÔ. ÓÐÓ¢ÓïÓïÑÔ±êÇ©µÄÎı¾"chat"»á±»ÈÏΪÓëÓÐ×Å·¨ÓïÓïÑÔ±êÇ©µÄÎı¾"chat"ÊDz»Í¬µÄ. Õâ¸öÆæ¹ÖµÄÌØÐÔÊÇÔ­ÓÐRDF/XMLÓï·¨²úÉúµÄØÍÏó(artefact).
ÁíÍâ, ÊÂʵÉϹ²ÓÐÁ½ÖÖÎı¾. ÔÚÒ»ÖÖÀï, ×Ö·û´®³É·ÖÖ»ÊǼòµ¥µÄ×Ö·û´®. ¶øÔÚÁíÒ»ÖÖÀï, ×Ö·û´®³É·Ö±»Ô¤¼ÆÎª¸ñʽÁ¼ºÃµÄXMLƬ¶Î. µ±Ò»¸öRDFÄ£Ðͱ»Ð´³ÉRDF/XMLÐÎʽʱ, Ò»¸öÌØÊâµÄʹÓÃparseType='Literal'µÄÊôÐÔ(attribute)¹¹Ôì»á±»Ê¹ÓÃÀ´±íʾËü.
ÔÚJenaÖÐ, µ±Ò»¸öÎı¾±»´´½¨Ê±, ÕâЩÊôÐԾͱ»ÉèÖÃÁË. ÀýÈç, ÔÚTutorial11ÖÐ:
// create the resource
Resource r = model.createResource();

// add the property
r.addProperty(RDFS.label, model.createLiteral("chat", "en"))
 .addProperty(RDFS.label, model.createLiteral("chat", "fr"))
 .addProperty(RDFS.label, model.createLiteral("<em>chat</em>", true));

// write out the Model
model.write(system.out);

»á²úÉú:

<rdf:RDF
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#'
 >
  <rdf:Description rdf:nodeID="A0">
    <rdfs:label xml:lang='en'>chat</rdfs:label>
    <rdfs:label xml:lang='fr'>chat</rdfs:label>
    <rdfs:label xml:lang='en' rdf:parseType='Literal'><em>chat</em></rdfs:label>
  </rdf:Description>
</rdf:RDF>

Èç¹ûÁ½¸öÎı¾±»ÈÏΪÊÇÏàͬµÄ, ËüÃÇÒ»¶¨¶¼ÊÇXMLµÄÎı¾»ò¶¼ÊǼòµ¥µÄÎı¾. ÁíÍâ, ËüÃÇÁ½¸öҪô¶¼Ã»ÓÐÓïÑÔ±êÇ©, ÒªÃ´ÓÐÏàͬµÄÓïÑÔ±êÇ©. ¶Ô¼òµ¥µÄÎı¾¶øÑÔ, Á½ÕßµÄ×Ö·û´®Ò»¶¨ÊÇÏàͬµÄ. XMLÎı¾µÄµÈͬÓÐÁ½µãÒªÇó. µÚÒ», Ç°ÃæÌáµ½µÄÒªÇó±ØÐë±»Âú×ã²¢ÇÒ×Ö·û´®±ØÐëÏàͬ. µÚ¶þ, Èç¹ûËüÃÇ×Ö·û´®µÄcannonicalizationÒ»ÑùµÄ»°, ËüÃǾÍÊÇÒ»ÑùµÄ.(ÒëÕß×¢: ÕÒ²»µ½cannonicalizationÖÐÎĵĽâÊÍ.).
Jena½Ó¿ÚÒ²Ö§³ÖÀàÐÍÎÄ×Ö. ÀÏʽµÄ¶Ô´ýÀàÐÍÎÄ×ֵķ½·¨ÊǰÑËûÃǵ±³ÉÊÇ×Ö·û´®µÄËõд: ÓÐÀàÐ͵ÄÖµ»áͨ¹ýJavaµÄ³£Ó÷½·¨×ª»»Îª×Ö·û´®, ²¢ÇÒÕâЩ×Ö·û´®±»´æ´¢ÔÚÄ£ÐÍÖÐ. ÀýÈç, ¿ÉÒÔÊÔÒ»ÊÔ(×¢Òâ:¶ÔÓÚ¼òµ¥ÀàÐÍÎÄ×Ö, ÎÒÃÇ¿ÉÒÔÊ¡ÂÔ¶Ômodel.createLiteral(¡­)µÄµ÷ÓÃ):
// create the resource
Resource r = model.createResource();

// add the property
r.addProperty(RDFS.label, "11")
 .addProperty(RDFS.label, 11);

// write out the Model
model.write(system.out, "N-TRIPLE");

²úÉúµÄÊä³öÈçÏÂ:
_:A... <http://www.w3.org/2000/01/rdf-schema#label> "11" .

ÒòΪÁ½¸öÎı¾¶¼ÊÇ×Ö·û´®"11", ËùÒÔÖ»»áÓÐÒ»¸ö³ÂÊö±»Ìí¼Ó.
RDFºËÐŤ×÷С×鶨ÒåÁËÖ§³ÖRDFÊý¾ÝÀàÐ͵ĻúÖÆ. JenaÖ§³ÖÄÇЩʹÓÃÀàÐÍÎÄ×ֵĻúÖÆ; µ«ÊDZ¾½Ì³ÌÖв»»á¶Ô´ËÌÖÂÛ.
________________________________________
ÊõÓï±í
¿Õ°×½áµã 
±íʾһ¸ö×ÊÔ´, µ«ÊDz¢Ã»ÓÐָʾ¸Ã×ÊÔ´µÄURI. ¿Õ°×½áµãµÄ×÷ÓÃÈçͬµÚÒ»Âß¼­ÖеĴæÔÚ·ûºÏ±äÁ¿.
Dublin ºËÐÄ
Ò»¸ö¹ØÓÚÍøÂç×ÊÔ´µÄÔªÊý¾Ý±ê×¼. ¸üÏêϸµÄÐÅÏ¢¿ÉÒÔÔÚDublin Core web siteÕÒµ½.
Îı¾
Ò»¸ö¿ÉÒÔ×÷ΪÊôÐÔÖµµÄ×Ö·û´®.
¿ÍÌå 
ÈýÔª×éµÄÒ»²¿·Ö, Ò²¾ÍÊdzÂÊöµÄÖµ.
ν´Ê
ÈýÔª×éµÄÊôÐÔ²¿·Ö.
ÊôÐÔ
ÊôÐÔ(property)ÊÇ×ÊÔ´µÄÒ»¸öÊôÐÔ(attribute). ÀýÈç, DC.titleÊÇÒ»¸öÊôÐÔ, RDF.typeÒ²ÊÇÒ»¸öÊôÐÔ.
×ÊÔ´ 
ij¸öʵÌå. Ëü¿ÉÒÔÊÇÒ»¸öÍøÂç×ÊÔ´, ÀýÈçÒ»¸öÍøÒ³; ËüÒ²¿ÉÒÔÊÇÒ»¸ö¾ßÌåµÄÎïÀí¶ÔÏó, ÀýÈçÒ»¿ÃÊ÷»òÒ»Á¾³µ; ËüÒ²¿ÉÒÔÊÇÒ»¸ö³éÏóµÄ¸ÅÄî, ÀýÈç¹ú¼ÊÏóÆå»ò×ãÇò. ×ÊÔ´ÓÉURIÃüÃû.
³ÂÊö
RDFÄ£ÐÍÖеÄÒ»¸ö¼ýÍ·, Í¨³£±»½âÀí½âΪһ¸öÊÂʵ
Ö÷Ìå 
RDFÄ£ÐÍÖмýÍ·³ö·¢µãµÄÄǸö×ÊÔ´.
ÈýÔª×é 
Ò»¸öº¬ÓÐÖ÷Ìå, Î½´ÊºÍ¿ÍÌåµÄ½á¹¹. ÊdzÂÊöµÄÁíÒ»Öֳƺô.
________________________________________
½Å×¢
RDF×ÊÔ´µÄ±êÇ©¿ÉÒÔ°üÀ¨Ò»¸öƬ¶Î±êÇ©, ÀýÈçhttp://hostname/rdf/Tutorial/#ch-Introduction, ËùÒÔ, ÑϸñµØ½², Ò»¸öRDF×ÊÔ´ÊÇÓÉÒ»¸öURI±íʾµÄ.
Îı¾¿ÉÒÔ±íʾΪһ¸ö×Ö·û´®, Ò²¿ÉÒÔÓÐÒ»¸ö¿ÉÑ¡µÄÓïÑÔ±àÂëÀ´±íʾ¸Ã×Ö·û´®µÄÓïÑÔ. ÀýÈç, Îı¾¿ÉÄÜÓÐÒ»¸ö±íʾӢÓïµÄÓïÑÔ±àÂë"en", ¶øÎı¾"deux"¿ÉÄÜÓÐÒ»¸ö±íʾ·¨ÓïµÄÓïÑÔ±àÂë"fr".
________________________________________
×÷Õß: Brian McBride 
¸üÐÂÈË: Daniel Boothby and Chris Dollin 
$Id: index.html,v 1.11 2004/01/09 17:16:06 andy_seaborne Exp $
·­ÒëÕß:april1019(ÕâÊÇÎҵķ­Òë,Ï£Íû¶Ô´ó¼ÒÓаïÖú)


<Íê>
²ÎÓëÌÖÂÛ±¾Ö÷Ìâ



Fri Jul 22, 2005 4:46 am

w3china_org
Offline Offline
Send Email Send Email

Forward
Message #200 of 387 |
Expand Messages Author Sort by Date

±¾ÎÄ×ªÔØ×Ô W3CHINA.ORGÌÖÂÛÇø (BBS.W3CHINA.ORG) Ô­ÎÄÁ´½Ó ×÷Õߣº april1019 ÒÔÏÂΪԭÎÄ£º JenaÎĵµ¡¶An Introduction to RDF and the Jena RDF...
W3CHINA.ORGÌÖÂÛÇø
w3china_org
Offline Send Email
Jul 22, 2005
4:45 am
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help