999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于JCR的內容管理系統

2011-08-16 01:10:04景慎艷
長春工業大學學報 2011年4期
關鍵詞:定義內容

景慎艷

(遼寧對外經貿學院信息技術系,遼寧大連 116052)

0 引 言

隨著紙制文檔向電子文檔的過渡,人們意識到管理電子文檔的優勢。大量的軟件提供商也開發了各式各樣的內容管理系統,雖然這些內容管理系統的設計和實現方式各不相同,但是他們都有一個共同的特點,也可以說是缺點,那就是開發的產品都是建立在私有倉庫引擎基礎之上。這種無法互相兼容不但增加了系統的復雜性,還給系統的擴展和長期維護增加了難度。總的來說,就是內容管理系統的開發缺少一套可遵循的標準和規范,從而導致各系統間的交互、系統的升級、維護非常困難[1]。

Content Repository for Java Technology API(JSR-170)就是為解決上述問題而產生的一套標準接口。

為了滿足面向內容的應用需要,JCR規范為數據存儲和相關服務定義了一個抽象的模型和一套Java API。JCR的目標不僅包括傳統的內容管理系統,更廣泛地講,任何應用都必須處理非結構化的數字資產以及結構化或半結構化的信息。

通過一個簡單、通用的API和一個強大的、可擴展的對象類型系統,JCR倉庫模型能夠高效地訪問大型二進制對象和精細結構的分層數據。此外,許多RDBMS和文件系統上的特性已被納入到知識庫中,包括查詢、訪問控制的支持、版本控制、鎖定。這些服務的標準化支持能夠使應用更容易地使用這些功能。

1 JCR知識庫模型

JCR所定義的知識庫模型如圖1所示。

圖1 JCR知識庫模型

描述了一個知識庫 R,具有W0,W1,和 W2這3個工作區。W1的項圖包含一個根節點和A,B,C 3個子結點。A包含一個屬性D和一個子結點E,其中D是ST RING類型的屬性。E包含一個具有二進制類型的屬性 I。B包含一個LONG類型的屬性F和一個BOOLEAN類型的屬性G。結點C包含一個DOUBLE類型的屬性H[2]。

該模型就像是一個具有n個分支的樹,它由單一的知識庫構成,每個知識庫中可以擁有一個或多個工作區,每個工作區都包含一個項目樹,項目樹中包含結點和屬性,結點可以具有一個或多個子結點以及一個或多個屬性。實際的數據都是保存在屬性中,而結點相當于實際數據所保存的路徑。

每個節點都有且只有一個主節點類型。主節點類型定義了節點的特征,例如允許節點擁有的屬性和子節點。除了主節點類型之外,節點還可以有一個或多個混合(mixin)類型?;旌项愋透裥揎椘?向節點提供額外的特征。

具體來說,JCR實現可以提供3種預定義混合類型:

mix:versionable:允許節點支持版本管理;

mix:lockable:支持節點的鎖定功能;

mix:referenceable:提供自動創建的jcr:uuid屬性,給節點一個惟一可以引用的標識符。

2 基于JCR的內容管理系統的設計與實現

2.1 TaobaoShop的設計策略

文中以淘寶商店(TaobaoShop)為例,說明基于JCR的內容管理系統的設計與實現。

T aobaoShop的存儲結構拓撲圖如圖 2所示[3]。

圖2 TaobaoShop的存儲結構拓撲圖

“taobao:shopCatagory”結點代表店鋪的類別,例如服裝、電器、家居等。店鋪類別結點包含一個“taobao:catagoryName”(類別名稱)屬性。

“taobao:shop”結點是“taobao:shopCatagory”的子結點,代表店鋪。店鋪包含“taobao:shopName”(店鋪名稱)屬性。

“taobao:product”結點是“taobao:shop”的子結點,代表某一店鋪的商品。包含“taobao:productName”(商品名稱)、“taobao:productPrice”(商品價格)以及“taobao:productIntroduction”(商品介紹)屬性。

“taobao:transRecord”結點是“taobao:shop”的子結點,代表某一店鋪的交易記錄,包含“taobao:orderId”(訂單編號)、“taobao:order-Price”(訂單金額)以及“taobao:orderAddress”(訂單地址)屬性。

2.2 TaobaoShop的實現

上面描述了TaobaoShop的存儲結構,下面利用JCR的開源實現Jackrabbit來實現上面的存儲模型。

2.2.1 獲得知識庫

要訪問知識庫,首先必須要獲得一個知識庫[4]。

String configFile="repository.xml";

String repHomeDir="repository";

Hashtable env=new Hashtable();

env.put(Context.INITIA L_CONTEXT_FACTORY,

"org.apache.jackrabbit.core.jndi"+".provider.DummyInitialContextFactory");

env.put(Context.PROVIDER_URL,"localhost");

InitialContext ctx=new InitialContext(env);

RegistryHelper.registerRepository(ctx,"repo",configFile,

repHomeDir,true);

//得到知識庫

Repository repository=(Repository)ctx.lookup("repo");

2.2.2 獲得工作區

要訪問知識庫,必須要登錄到知識庫中的某一工作區。

SimpleCredentials cred=new SimpleCredentials("userid",

"password".toCharArray());

Session session=repository.login(cred,null);

//獲得默認工作區

Workspace ws=session.getWorkspace();

//獲得工作區ws的根節點

Node rootNode=session.getRootNode();

2.2.3 將內容添加到JCR倉庫中

//在根節點下添加"taobao:shopping"子結點。

NodetaobaoShopping= rootNode.addNode("taobao:shopping");

//在"taobao:shopping"結點下添加"taobao:shop-Catagory"子結點。

Node shopCatagory=taobaoShopping.addNode("taobao:shopCatagory");

//為"taobao:shopCatagory"結點定義"taobao:catagoryName"屬性和屬性值。

shopCatagory.setProperty("taobao:catagoryName","服裝");

//在服裝類別下添加一個店鋪子結點。

Node shop=shopCatagory.addNode("taobao:shop");

//定義店鋪名稱

shop.setProperty("taobao:shopName","上海淘樂服裝店");

//為"上海淘樂服裝店"添加商品子結點

Node product=shop.addNode("taobao:product");//定義商品名稱

product.setProperty("taobao:productName","蘭蘭S01男裝");

product.setProperty("taobao:productPrice",129.00);

product.setProperty("taobao:productIntroduction","商品詳細描述");

//為"上海淘樂服裝店"添加交易記錄子結點

Node transRecord=shop.addNode("taobao:transRecord");

//定義訂單編號

transRecord.setProperty("taobao:orderId","2011030400000001");

//定義訂單縱金額

transRecord.setProperty("taobao:orderPrice",569.30);

//定義訂單物流信息

transRecord.setProperty("taobao:orderAddress","北京市海淀區xxxxxx");

//保存添加的所有內容

session.save();

2.2.4 取得內容

可以通過獲取NodeIterator(它返回特點節點的所有子節點)來瀏覽知識庫中的所有內容。下面代碼可以獲取到某一店鋪的所有商品信息[5]。

Node shopping=rootNode.getNode("taobao:shopping");

Node shopCatagory=rootNode.getNode("taobao:shopCatagory");

NodeIterator it=shopCatagory.getNodes("taobao:shop");

while(it.hasNext()){

Node entry=it.nextNode();

System.out.println(entry.getName());System.out.println(entry.getProperty("taobao:shop-Name").

getString());

}

2.2.5 用XML導入和導出內容

JSR-170為了確保跨 JCR實現的移植性已經做了許多工作。它促進移植性的方式之一就是使用標準的XML導入和導出特性。通過使用這些工具,符合規范的供應商倉庫內容可以很容易地轉移到另一個符合規范的供應商倉庫。使用XML進行序列化的另一個優勢是:可以用傳統的XML解析工具操縱導出的倉庫[6]。

File outputFile=new File("shopping.xml");

FileOutputStream out=new FileOutputStream(outputFile);

session.exportSystemView("/taobao:shopping",out,false,false);

可以把生成的XM L文件導入到另一個知識庫[7]。

File inputFile=new File("shopping.xml");

FileInputStream in=new FileInputStream(input-File);

session.importXML("/",in,ImportUUIDBehavior.IMPORT_UUID_CREA TE_NEW);session.save();

2.2.6 添加二進制內容

“taobao:productIntroduction”屬性的類型為“nt:file”,也就是說該屬性可以保存二進制流。

下面的代碼可以把圖片文件以二進制流的形式保存到“taobao:productIntroduction”屬性中[8]。

File file=new File("蘭蘭S01男裝.gif");

MimeTable mt=MimeTable.getDefaultTable();

String mimeType=mt.getContentTypeFor(file.getName());

if(mimeType==null)mimeType="application/octet-stream";

product.setProperty("jcr:mimeType",mimeType);

product.setProperty("jcr:encoding","");

product.setProperty("jcr:data",new FileInput-Stream(file));

Calendar lastModified=Calendar.getInstance();

lastModified.setTimeInMillis(file.lastM odified());

product.setProperty("jcr:lastModified",lastModified);

3 結 語

通過對淘寶商店的設計,可以感受到通過JCR建立內容存儲倉庫,有效地降低了系統開發、維護成本,可以大大降低企業在不同底層存儲之間的數據遷移成本。隨著社會信息化程度的提高,內容管理應用的領域將會越來越多。應用不斷增多,對于公共的、標準的內容倉庫API的需求也將變得日益強烈。

[1]孔佳,李昀.內容管理系統的產生與發展[J].農業網絡信息,2008,23(3):89-92.

[2]于明達.NET多層架構在內容管理系統的設計研究[D]:[碩士學位論文].大連:大連海事大學,2009.

[3]薛勝軍,成敏.Java內容倉庫及其在CMS中的應用[J].計算機技術與發展,2009,19(1):241-244,247.

[4]張亞男,王鑫.基于內容管理的網站構建系統的研究[J].硅谷,2010,9(23):85-86.

[5]Sunil Patil.Advanced Java Content Repository API[EB/OL][2011-01-06].http://www.onjava.com/pub/a/onjava/2006/11/08/advanced-java-content-re.

[6]黎文導,盧瑜.J2EE平臺上基于XML數據交換系統的設計與實現[J].長春工業大學學報:自然科學版,2006,27(4):350-353.

[7]佚名.Java Content Repository API簡介[EB/OL][2011-01-06].http://www.ibm.com/developerworks/cn/java/j-jcr/.

[8]張建,劉更,賀朝霞,等.基于XM L實現Java內容倉庫和關系型數據庫的雙向映射[J].計算機應用研究,2009(1):211-214.

猜你喜歡
定義內容
內容回顧溫故知新
科學大眾(2022年11期)2022-06-21 09:20:52
內容回顧 溫故知新
科學大眾(2021年21期)2022-01-18 05:53:48
內容回顧溫故知新
科學大眾(2021年17期)2021-10-14 08:34:02
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風格”
主要內容
臺聲(2016年2期)2016-09-16 01:06:53
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
山的定義
公務員文萃(2013年5期)2013-03-11 16:08:37
教你正確用(十七)
海外英語(2006年11期)2006-11-30 05:16:56
主站蜘蛛池模板: 国产日韩av在线播放| 国产亚洲欧美另类一区二区| 爽爽影院十八禁在线观看| 欧美日韩国产综合视频在线观看| 91网址在线播放| 亚洲制服丝袜第一页| 国产福利微拍精品一区二区| 国产成人综合亚洲欧洲色就色| 成人小视频网| 日韩欧美视频第一区在线观看| 欧美激情视频一区| 日韩小视频在线播放| 亚洲一道AV无码午夜福利| 久久精品aⅴ无码中文字幕 | 亚州AV秘 一区二区三区| 成人福利在线免费观看| 92午夜福利影院一区二区三区| 日韩AV无码一区| 99久久亚洲精品影院| 国产精品女人呻吟在线观看| 国产欧美日韩va另类在线播放 | 欧美专区在线观看| 五月天久久综合| 91人人妻人人做人人爽男同| 中文字幕在线日韩91| 亚洲最黄视频| 国产精品久久久久久影院| 萌白酱国产一区二区| 免费又黄又爽又猛大片午夜| 国产性生大片免费观看性欧美| 中文字幕不卡免费高清视频| 久久国语对白| 亚洲精品第一页不卡| 欧美黄网在线| 国产美女无遮挡免费视频网站| 男女男免费视频网站国产| 久久黄色一级视频| 97成人在线视频| 亚洲第一成年网| 国产亚洲视频播放9000| 国产麻豆va精品视频| 亚国产欧美在线人成| 国产精品无码影视久久久久久久 | 欧美有码在线观看| 在线免费不卡视频| 1024国产在线| 成人福利在线免费观看| 91亚瑟视频| 国产区人妖精品人妖精品视频| 欧美色综合久久| 亚洲色欲色欲www在线观看| 在线国产你懂的| 欧美成人日韩| 亚洲日本韩在线观看| 毛片a级毛片免费观看免下载| 色香蕉网站| 香蕉在线视频网站| 国产午夜无码专区喷水| 色网站在线免费观看| 五月婷婷激情四射| 天天综合网亚洲网站| 偷拍久久网| 日本道综合一本久久久88| 欧美日韩国产系列在线观看| 九色综合伊人久久富二代| 欧美成人免费午夜全| 97超碰精品成人国产| 71pao成人国产永久免费视频| 亚洲欧美在线看片AI| 国产在线自乱拍播放| 亚洲天堂精品视频| 免费国产高清视频| 亚洲成A人V欧美综合| 国产日韩精品欧美一区灰| 理论片一区| 黄色网页在线播放| 欧美激情第一欧美在线| 国产午夜精品一区二区三| 国产日韩欧美中文| 国产精品无码制服丝袜| 黄色网站不卡无码| 青青青视频蜜桃一区二区|