2012-11-16 8 views
0

놀라운 데이터베이스 위키에서 추출한 데이터로 온톨로지를 채 웁니다. 위키의 모든 정보가 들어있는 xml을 추출 할 수 있습니다. 내 문제는이 XML이 너무 무거워서 (500Mo 이상) 아무 것도 할 수 없다는 것이다. xslt를 사용하여 훨씬 단순한 rdf 파일로 변환하려고 시도했지만 xml 파일 크기 때문에 매우 불가능합니다.거대한 xml 파일을 rdf로 변환하여 Ontology에 채우기

XML 문서는이 하나 페이지로 구성되어 있습니다이 경우 exemple 들어

<page> 
<title>Aeroika (Earth-616)</title> 
<ns>0</ns> 
<id>1035</id> 
    <sha1>11t0be5viqp0vsj8zwglfu3wea8fou4</sha1> 
<revision> 
    <id>1786343</id> 
    <timestamp>2011-10-04T17:49:37Z</timestamp> 
    <contributor> 
    <username>HamsterMan</username> 
    <id>2082346</id> 
    </contributor> 
    <minor/> 
    <text xml:space="preserve" bytes="1652">{{Marvel Database:Character Template 
| Image     = Aeroika (Earth-616).jpg 
| RealName    = Aeroika 
| CurrentAlias   = Aeroika 
| Aliases     = 
| Identity    = 
| Affiliation    = [[Defenders (Earth-616)|Defenders]] 
| Relatives    = 
| Universe    = Earth-616 
| BaseOfOperations  = [[Tunnelworld]] 

| Gender     = Male 
| Height     = 
| Weight     = 
| Eyes     = 
| Hair     = Gold 
| UnusualSkinColour  = Gold 
| UnusualFeatures   = Wings growing out of his head. 
}} 
[[Category:Flight]]</text> 
</revision> 
</page> 

가 나는 RDF에 중요한 datas를 추출 XSLT를했다.

<xsl:template match="/"> 
<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:si="http://www.w3schools.com/rdf/"> 

<xsl:for-each select="page"> 
    <xsl:choose> 
     <xsl:when test="contains(revision/text, 'Character Template')"> 
      <rdf:Description rdf:about="{title}"> 
       <Image><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Image'),'|'),'=')" /></Image> 
       <RealName><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'RealName'),'|'),'=')" /></RealName> 
       <CurrentAlias><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'CurrentAlias'),'|'),'=')" /></CurrentAlias> 
       <Aliases><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Aliases'),'|'),'=')" /></Aliases> 
       <Identity><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Identity'),'|'),'=')" /></Identity> 
       <Affiliation><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Affiliation'),'|'),'=')" /></Affiliation> 
       <Relatives><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Relatives'),'|'),'=')" /></Relatives> 
       <Universe><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Universe'),'|'),'=')" /></Universe> 
       <BaseOfOperations><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'BaseOfOperations'),'|'),'=')" /></BaseOfOperations> 
       <Gender><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Gender'),'|'),'=')" /></Gender> 
       <Height><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Height'),'|'),'=')" /></Height> 
       <Weight><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Weight'),'|'),'=')" /></Weight> 
       <Eyes><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Eyes'),'|'),'=')" /></Eyes> 
       <Hair><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Hair'),'|'),'=')" /></Hair> 
       <UnusualSkinColour><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'UnusualSkinColour'),'|'),'=')" /></UnusualSkinColour> 
       <UnusualFeatures><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'UnusualFeatures'),'|'),'=')" /></UnusualFeatures> 
       <Citizenship><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Citizenship'),'|'),'=')" /></Citizenship> 
       <MaritalStatus><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'MaritalStatus'),'|'),'=')" /></MaritalStatus> 
       <Occupation><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Occupation'),'|'),'=')" /></Occupation> 
       <Education><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Education'),'|'),'=')" /></Education> 
       <Origin><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Origin'),'|'),'=')" /></Origin> 
       <PlaceOfBirth><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'PlaceOfBirth'),'|'),'=')" /></PlaceOfBirth> 
       <Creators><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Creators'),'|'),'=')" /></Creators> 
       <First><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'First'),'|'),'=')" /></First> 
       <HistoryText><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'HistoryText'),'|'),'=')" /></HistoryText> 
       <Powers><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Powers'),'|'),'=')" /></Powers> 
       <Abilities><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Abilities'),'|'),'=')" /></Abilities> 
       <Strength><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Strength'),'|'),'=')" /></Strength> 
       <Weaknesses><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Weaknesses'),'|'),'=')" /></Weaknesses> 
       <Equipement><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Equipement'),'|'),'=')" /></Equipement> 
       <Transportation><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Transportation'),'|'),'=')" /></Transportation>  
       <Weapons><xsl:value-of select="substring-after(substring-before(substring-after(revision/text, 'Weapons'),'|'),'=')" /></Weapons> 
      </rdf:Description> 
     </xsl:when> 
     <xsl:otherwise> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:for-each> 
</rdf:RDF> 
</xsl:template> 

</xsl:stylesheet> 

내가 어떻게 할 수 있습니까? 감사합니다.

+2

이것은 매우 광범위한 질문입니다. 시작하려는 특정 XML 형식의 예와이를 매핑하려는 rdf 구조의 종류가 있습니까? 아마도 XML을 읽는 데 사용할 수있는 스트리밍 또는 "세미 스트리밍"접근 방식이 있지만 실제로 구조에 의존합니다. –

+0

표시에 감사드립니다. 나는 내 질문을 편집했다. 나는 이번에는 아무것도 잊지 않았 으면 좋겠다. 당신은 스트리밍이나 세미 스트리밍 접근 방식에 대해 이야기하지만 실제로 어떻게 그렇게하는지는 알지 못합니다. xslt로 가능합니까? 아니면 프로그램을 만들어야합니까? – Desnoxav

+0

성취하고자하는 것은 무엇입니까? 내 말은, 최종 출력물/앱이 마음에 들었던 것처럼 보입니까? 거기에서 시작하여 가지고있는 것에 뒤로 가십시오. 나는 RDF가 당신이 원하는 것이 아니라는 것을 의심하지만 좀 더 구체적 일 필요가있다. 일단 그렇게하면 필요한 변형은 아마도 매우 분명하고 직설적입니다. –

답변

1

XSLT 스타일 시트는 "일반"XML을 RDF/XML 구문으로 변환합니다. 이는 똑같이 커지거나 커지고 거의 처리가 어렵습니다. 더욱이 RDF/XML은 손으로 작성하기가 복잡하고 잘못하기 쉽습니다. XSLT를 디버깅하는 것은 악몽이 될 것입니다.

데이터 집합을 더 간단하고 쉽게 처리하는 것이 목표라면 XML 대신 RDF Turtle 또는 RDF N-Triples 구문을 사용하는 것이 좋습니다. 이들은 매우 간단하고 압축 된 텍스트 기반 형식으로 스트리밍 처리에 적합하며 모든 RDF 지원 소프트웨어는 이러한 형식을 읽고 쓸 수 있습니다.

XSLT를 사용할 수 있습니다. 확장 성 문제가있는 경우 몇 가지 기본 XML 지원이있는 프로그래밍/스크립팅 언어를 사용하십시오. 파서 출력을 처리하고 RDF 데이터를 생성하는 간단한 스크립트/프로그램에 스트리밍 XML 파서 및 후크 가져 오기 즉석에서. 또는 입력 XML이 상당히 규칙적으로 구조화되어 있기 때문에 XML 구문 분석기를 사용하지 않고 두 가지 정규 표현식을 함께 해킹하여 데이터를 읽을 수 있습니다.

물론 이러한 종류의 지원 기능이 내장 된 최종 사용자 도구를 사용해 볼 수도 있습니다. 예를 들어, Topbraid Composer는 이러한 종류의 변환을위한 멋진 기능을 가지고 있습니다.