簡體   English   中英

轉換和攝取圖 RDF XML 失敗

[英]Transform and ingest graph RDF XML failure

繼上一篇文章:

圖數據model將XML轉換為RDF

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sbase="http://my.semantics/projects/" xmlns:spi="http://my.semantics/projects/incentive/" version="2.0">
 
   <xsl:template match="projects">
      <xsl:element name="rdf:RDF">
         <xsl:for-each select="project">
            <xsl:element name="rdf:Description">
               <xsl:attribute name="rdf:about" select="concat('http://my.semantics/projects/incentive/', projectID)" />
               <xsl:attribute name="sbase:program" select="program" />
               <xsl:attribute name="sbase:projectID" select="projectID" />
               <xsl:attribute name="sbase:projectName" select="projectName" />
               <xsl:attribute name="sbase:recipient" select="recipient" />
               <xsl:element name="sbase:about">
                  <xsl:attribute name="rdf:resource" select="'http://my.semantics/ontology/economy'" />
               </xsl:element>
               <xsl:element name="spi:postalCode">
                  <xsl:value-of select="postalCode" />
               </xsl:element>
               <xsl:element name="spi:region">
                  <xsl:value-of select="region" />
               </xsl:element>
               <xsl:element name="spi:industry">
                  <xsl:value-of select="industry" />
               </xsl:element>
               <xsl:element name="spi:incentiveType">
                  <xsl:value-of select="incentiveType" />
               </xsl:element>
               <xsl:element name="spi:startDate">
                  <xsl:value-of select="startDate" />
               </xsl:element>
               <xsl:element name="spi:totalAwarded">
                  <xsl:value-of select="totalAwarded" />
               </xsl:element>
               <xsl:element name="spi:totalInvestment">
                  <xsl:value-of select="totalInvestment" />
               </xsl:element>
               <xsl:element name="spi:disbursementsToDate">
                  <xsl:value-of select="disbursementsToDate" />
               </xsl:element>
               <xsl:element name="rdf:comment">
                  <xsl:value-of select="projectDescription" />
               </xsl:element>
            </xsl:element>
         </xsl:for-each>
      </xsl:element>
   </xsl:template>
</xsl:transform>

如果我使用sem:rdf-insert(xdmp:xslt-eval($rdf-xml, $doc),"rdfxml", (), "rdf-incentive") ,我得到錯誤:

XDMP-AS: (err:XPTY0004) $triples as sem:triple* -- 無效強制轉換:xs:untypedAtomic() as sem:triple

如果sem:rdf-load((xdmp:xslt-eval($rdf-xml,$doc)),"rdfxml",(),(),"rdf-incentive")

我收到錯誤:

SVC-FILOPN: xdmp:document-get()…: 沒有那個文件或目錄

鑒於 RDF 語法的復雜性,您可以考慮

單獨的 XSL 來聲明共享的 RDF 屬性

   <xsl:attribute-set name="incentiveRDFAttr">
      <xsl:attribute name="rdf:about" select="concat('http://my.semantics/projects/incentive/', projectID)"/>
      <xsl:attribute name="sbase:program" select="program"/>
      <xsl:attribute name="sbase:projectID" select="projectID"/>
      <xsl:attribute name="sbase:projectName" select="projectName"/>
      <xsl:attribute name="sbase:recipient" select=" recipient"/>        
   </xsl:attribute-set>

   <xsl:attribute-set name="rdfDataTime">
      <xsl:attribute name="rdf:datatype" select="'http://www.w3.org/2001/XMLSchema#dateTime'"/>   
   </xsl:attribute-set>
    
   <xsl:attribute-set name="rdfDecimal">
      <xsl:attribute name="rdf:datatype" select="'http://www.w3.org/2001/XMLSchema#decimal'"/>   
   </xsl:attribute-set>
««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»«»»««»»««»»««»»

在主 RDF 轉換 XSL 中調用屬性 XSL

<!-- Ingested attribute XSL in module database -->
    <xsl:include href="/xsl/rdf-attributes.xsl"/>  
    
    <xsl:template match="projects">
      <xsl:element name="rdf:RDF">
        <xsl:for-each select="project">
          <xsl:element name="rdf:Description" use-attribute-sets="incentiveRDFAttr">
««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»«»»««»»««»»««»»
            <xsl:element name="spi:startDate" use-attribute-sets="rdfDataTime"><xsl:value-of select="normalize-space(startDate)"/></xsl:element>
            <xsl:element name="spi:totalAwarded" use-attribute-sets="rdfDecimal"><xsl:value-of select="normalize-space(totalAwarded)"/></xsl:element>
««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»««»»«»»««»»««»»««»»
          </xsl:element>          
        </xsl:for-each>        
      </xsl:element>
    </xsl:template>

請在 XSL 轉換后和攝取期間使用sem:rdf-parse序列化 RDF 三元組:

  sem:rdf-insert(
    sem:rdf-parse(xdmp:xslt-eval($rdf-xml, $doc), "rdfxml"),
    ("rdfxml", "directory=/my/semantics/"),
    (),
    "rdf-incentive"
  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM