4

RDFファイルを作成し、XSLを使用して提示するように依頼されました。

RDFコード(変更)

    <?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="XSLTFile1.xslt"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:clinic="http://www.computing-services.co.il"
xml:base="http://www.computing-services.co.il">
<rdfs:Class rdf:ID="Patient">
<rdfs:comment>
the class of patient
</rdfs:comment>
</rdfs:Class>
<rdf:Property rdf:ID="ID">
<rdfs:comment>
Patient's ID
</rdfs:comment>
<rdfs:domain rdf:resource="#Patient"/>
<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>
<rdf:Property rdf:ID="Name">
<rdfs:comment>
Patient's Name
</rdfs:comment>
<rdfs:domain rdf:resource="#Patient"/>
<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>
  <rdf:Property rdf:ID="Age">
    <rdfs:comment>
      Patient's Age
    </rdfs:comment>
    <rdfs:domain rdf:resource="#Patient"/>
    <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
  </rdf:Property>
  <rdf:Property rdf:ID="Sex">
    <rdfs:comment>
      Patient's Sex
    </rdfs:comment>
    <rdfs:domain rdf:resource="#Patient"/>
    <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
  </rdf:Property>
<rdfs:Class rdf:ID="Disease">
<rdfs:comment>
the class of diseases
</rdfs:comment>
</rdfs:Class>
  <rdfs:Class rdf:ID="CancDiseases">
    <rdfs:comment>
      the class of cancerous diseases
    </rdfs:comment>
    <rdfs:subClassOf rdf:resource="#Disease"/>
  </rdfs:Class>
  <rdfs:Class rdf:ID="CntDiseases">
    <rdfs:comment>
      the class of contagious diseases
    </rdfs:comment>
    <rdfs:subClassOf rdf:resource="#Disease"/>
  </rdfs:Class>
  <rdfs:Class rdf:ID="Traumas">
    <rdfs:comment>
      the class of traumas
    </rdfs:comment>
    <rdfs:subClassOf rdf:resource="#Disease"/>
  </rdfs:Class>
  <rdfs:Class rdf:ID="IntDiseases">
    <rdfs:comment>
      the class of Internal diseases
    </rdfs:comment>
    <rdfs:subClassOf rdf:resource="#Disease"/>
  </rdfs:Class>
  <rdfs:Class rdf:ID="EmIntDiseases">
    <rdfs:comment>
      the class of Emerging diseases
    </rdfs:comment>
    <rdfs:subClassOf rdf:resource="#IntDiseases"/>
  </rdfs:Class>
  <rdfs:Class rdf:ID="ChIntDiseases">
    <rdfs:comment>
      the class of Chronic diseases
    </rdfs:comment>
    <rdfs:subClassOf rdf:resource="#IntDiseases"/>
  </rdfs:Class>
  <rdfs:Class rdf:ID="Treatment">
    <rdfs:comment>
      the class of treatment
    </rdfs:comment>
  </rdfs:Class>
  <rdfs:Class rdf:ID="Medication">
    <rdfs:comment>
      the class of medications
    </rdfs:comment>
    <rdfs:subClassOf rdf:resource="#Treatment"/>
  </rdfs:Class>
  <rdfs:Class rdf:ID="Procedure">
    <rdfs:comment>
      the class of procedures
    </rdfs:comment>
    <rdfs:subClassOf rdf:resource="#Treatment"/>
  </rdfs:Class>


<rdf:Property rdf:ID="isSick">
<rdfs:domain rdf:resource="#Patient"/>
<rdfs:range rdf:resource="#Disease"/>
</rdf:Property>
  <rdf:Property rdf:ID="gets">
    <rdfs:domain rdf:resource="#Patient"/>
    <rdfs:range rdf:resource="#Treatment"/>
  </rdf:Property>
  <rdf:Property rdf:ID="helpsFrom">
    <rdfs:domain rdf:resource="#Treatment"/>
    <rdfs:range rdf:resource="#Disease"/>
  </rdf:Property>







          <clinic:ChIntDiseases rdf:ID="chrone"/>
          <clinic:ChIntDiseases rdf:ID="diabetes"/>
          <clinic:Traumas rdf:ID="BrokenLeg"/>
          <clinic:EmIntDiseases rdf:ID="Appendicite"/>
          <clinic:CancDiseases rdf:ID="BreastCancer"/>
          <clinic:CancDiseases rdf:ID="LungCancer"/>






  <clinic:Medication rdf:ID="Insuline">
    <clinic:helpsFrom rdf:resource="#diabetes"/>
  </clinic:Medication>
  <clinic:Medication rdf:ID="Pentassa">
    <clinic:helpsFrom rdf:resource="#chrone"/>
  </clinic:Medication>
  <clinic:Medication rdf:ID="Raffasal">
    <clinic:helpsFrom rdf:resource="#chrone"/>
  </clinic:Medication>
  <clinic:Medication rdf:ID="Advil">
    <clinic:helpsFrom rdf:resource="#BrokenLeg"/>
    <clinic:helpsFrom rdf:resource="#Appendicite"/>
  </clinic:Medication>
  <clinic:Procedure rdf:ID="Sigmoscopia">
    <clinic:helpsFrom rdf:resource="#chrone"/>
  </clinic:Procedure>
  <clinic:Procedure rdf:ID="Chemo">
    <clinic:helpsFrom rdf:resource="#BreastCancer"/>
    <clinic:helpsFrom rdf:resource="#LungCancer"/>
  </clinic:Procedure>



          <clinic:Patient rdf:ID="p23456">
            <clinic:Name>Linda Jones</clinic:Name>
            <clinic:Sex>Female</clinic:Sex>
            <clinic:Age>56</clinic:Age>
            <clinic:isSic>
              <rdf:Bag>
                <rdf:li rdf:resource="#chrone"/>
                <rdf:li rdf:resource="#diabetes"/>
              </rdf:Bag>
            </clinic:isSic>
            <clinic:gets>
              <rdf:Bag>
                <rdf:li rdf:resource="#Pentassa"/>
                <rdf:li rdf:resource="#Insuline"/>
              </rdf:Bag>
            </clinic:gets>
          </clinic:Patient>
  <clinic:Patient rdf:ID="p12345">
    <clinic:Name>Moshe Koen</clinic:Name>
    <clinic:Sex>Male</clinic:Sex>
    <clinic:Age>70</clinic:Age>
    <clinic:isSic>
      <rdf:Bag>
        <rdf:li rdf:resource="#diabetes"/>
      </rdf:Bag>
    </clinic:isSic>
    <clinic:gets>
      <rdf:Bag>
        <rdf:li rdf:resource="#Insuline"/>
      </rdf:Bag>
    </clinic:gets>
  </clinic:Patient>
  <clinic:Patient rdf:ID="p34567">
    <clinic:Name>Ofer Meleh</clinic:Name>
    <clinic:Sex>Male</clinic:Sex>
    <clinic:Age>25</clinic:Age>
    <clinic:isSic>
      <rdf:Bag>
        <rdf:li rdf:resource="#BrokenLeg"/>
      </rdf:Bag>
    </clinic:isSic>
    <clinic:gets>
      <rdf:Bag>
        <rdf:li rdf:resource="#Advil"/>
      </rdf:Bag>
    </clinic:gets>
  </clinic:Patient>
  <clinic:Patient rdf:ID="p45678">
    <clinic:Name>Itzhak Rabinovich</clinic:Name>
    <clinic:Sex>Male</clinic:Sex>
    <clinic:Age>38</clinic:Age>
    <clinic:isSic>
      <rdf:Bag>
        <rdf:li rdf:resource="#LungCancer"/>
      </rdf:Bag>
    </clinic:isSic>
    <clinic:gets>
      <rdf:Bag>
        <rdf:li rdf:resource="#Chemo"/>
      </rdf:Bag>
    </clinic:gets>
  </clinic:Patient>
  <clinic:Patient rdf:ID="p56789">
    <clinic:Name>Golda Zilber</clinic:Name>
    <clinic:Sex>Female</clinic:Sex>
    <clinic:Age>45</clinic:Age>
    <clinic:isSic>
      <rdf:Bag>
        <rdf:li rdf:resource="#BreastCancer"/>
        <rdf:li rdf:resource="#Appendicite"/>
      </rdf:Bag>
    </clinic:isSic>
    <clinic:gets>
      <rdf:Bag>
        <rdf:li rdf:resource="#Chemo"/>
        <rdf:li rdf:resource="#Advil"/>
      </rdf:Bag>
    </clinic:gets>
  </clinic:Patient>




</rdf:RDF>

`

患者とその病気と治療法があります(以前のRDFSの部分を変更しました)。患者の順序付きリスト(個人データを含む)と、患者ごとに、彼の病気と治療法の表を作成する必要があります。

それはそのようなものでなければなりません:

それがxslを書くための私の新しい試みです

        <?xml version="1.0"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:clinic="http://www.infomed.co.il">
  <xsl:output method="html" indent="yes"/>

  <xsl:template match="/rdf:RDF/clinic:Patient">
    <html>
      <body>
        <ol>
          <xsl:apply-templates select="/rdf:RDF/clinic:Patient" />
        </ol>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="clinic:Patient">
    <li>
      Name <xsl:value-of select="clinic:Name"/>
      Age <xsl:value-of select="clinic:Age"/>
      Sex <xsl:value-of select="clinic:Sex"/>
      <table>
        <tr>
          <th>Disease</th>
          <xsl:apply-templates select="clinic:isSic" />
          <th>Treatment</th>
          <xsl:apply-templates select="clinic:gets" />
        </tr>


      </table>
    </li>
  </xsl:template>

  <xsl:template match="clinic:isSic">
    <xsl:variable name="resource" select="@rdf:resource"/>
      <td>
        <xsl:value-of select="translate(@rdf:resource,'#','')"/>
      </td>  
  </xsl:template>
  <xsl:template match="clinic:gets">
    <xsl:variable name="resource" select="@rdf:resource"/>
    <td>
      <xsl:value-of select="translate(@rdf:resource,'#','')"/>
    </td>
  </xsl:template>


</xsl:stylesheet>

それでも機能しませんが、少なくとも今は患者のデータを見ることができます。次のようになります。

患者のクラス患者のID患者の名前患者の年齢患者の性別疾患のクラス癌性疾患のクラス伝染性疾患のクラス外傷のクラス内部疾患のクラス新興疾患のクラス慢性疾患のクラス治療のクラス薬のクラス手順のクラスリンダジョーンズ女性56モシェコーエン男性70オファーメレ男性25イツァクラビノビッチ男性38ゴールダジルバー女性45

私はそれをこのようにするための助けに感謝します:

4

3 に答える 3

3

質問の変更を反映するように回答を更新しました:

更新されたスタイルシートには、まだいくつかの問題がありました。

  • の名前空間clinicは、XSLTで誤った名前空間-uriで宣言されました。http://www.computing-services.co.ilXPathステートメントを一致させるには、マップする必要があります。
  • スタイルシートの処理方法を確実に制御するために、一致していたテンプレートを/rdf:RDF/clinic:Patientルートノードで一致するように変更しました。それ以外の場合、デフォルトのテンプレートは、要素にヒットしてテンプレートを実行する/まで、要素とテキストノード(テキストと空白を出力)で一致していました。clinic:Patent
  • 病気と治療に別々の行が必要な場合は、のtr前にを閉じて新しい行を開始する必要があります<tr>Treatment</tr>
  • clinic:isSicおよびのテンプレートでは、リソース変数、および@rdf:Resource rdf:Bag / rdf:li / @ rdf:resource`へのパスclinic:getsは必要ありません。is

私はあなたのスタイルシートにそれらの調整をしました:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:clinic="http://www.computing-services.co.il">
  <xsl:output method="html" indent="yes"/>

  <xsl:template match="/">
    <html>
      <body>
        <ol>
          <xsl:apply-templates select="/rdf:RDF/clinic:Patient" />
        </ol>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="clinic:Patient">
    <li>
      Name <xsl:value-of select="clinic:Name"/>
      Age <xsl:value-of select="clinic:Age"/>
      Sex <xsl:value-of select="clinic:Sex"/>
      <table border="1">
        <tr>
          <th>Disease</th>
          <xsl:apply-templates select="clinic:isSic" />
        </tr>
        <tr>
          <th>Treatment</th>
          <xsl:apply-templates select="clinic:gets" />
        </tr>
      </table>
    </li>
  </xsl:template>

  <xsl:template match="clinic:isSic">
      <xsl:apply-templates select="rdf:Bag/rdf:li/@rdf:resource"/>
  </xsl:template>

  <xsl:template match="clinic:gets"> 
      <xsl:apply-templates select="rdf:Bag/rdf:li/@rdf:resource"/>
  </xsl:template>

  <xsl:template match="rdf:Bag/rdf:li/@rdf:resource">
    <td>
      <xsl:value-of select="translate(.,'#','')"/>
    </td>
  </xsl:template>
</xsl:stylesheet>

余談ですが、現在のロジックでは、病気と治療の1対1のマッピングがあると想定しているようです。複数の治療法があった場合、どの治療法がどの病気にマッピングされているかをどのように区別または知ることができますか?

于 2012-08-29T02:14:43.840 に答える
1

RDFをHTMLとして表示しようとしている場合は、 RDFaを使用する必要があると思います。RDFaマークアップを使用してHTMLを非常に簡単に生成でき、RDFa対応のプラグインまたはエージェントでページを表示するすべての人がRDFを取得して使用できるという追加の利点があります。XSLを使用してHTMLに変換するだけの場合は、RDFを「失う」ことになります。

于 2012-08-28T23:14:56.600 に答える
0

RDFはXML技術を使用して解析してはなりません!

于 2012-09-04T08:34:55.737 に答える