0

私はこのDTDを持っています

<?xml version="1.0" encoding="utf-8"?>


<!ELEMENT MusicCatalog (Artist*,Album*,Genre+,Company*,Country*)>


<!ELEMENT Artist (Name)>
<!ELEMENT Name (FirstName,MiddleName*,LastName?)>
<!ELEMENT FirstName (#PCDATA)>
<!ELEMENT MiddleName (#PCDATA)>
<!ELEMENT LastName (#PCDATA)>
<!ATTLIST  Artist ArtistID ID #REQUIRED
                  countryID IDREF #REQUIRED>



<!ELEMENT Album (Title,Price,Year)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Year (#PCDATA)>
<!ATTLIST Album AlbumID ID #REQUIRED
                ArtistID IDREF #REQUIRED
                CompanyID IDREF #REQUIRED
                GenreName IDREFS #REQUIRED >

<!ELEMENT Company (#PCDATA)>

<!ATTLIST Company CompanyID ID #REQUIRED>


<!ELEMENT Genre EMPTY>
<!ATTLIST Genre GenreName ID #REQUIRED>


<!ELEMENT Country (#PCDATA)>
<!ATTLIST Country countryID ID #REQUIRED>

そして私はこの基本的なXMLを持っています

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE MusicCatalog SYSTEM "Refined_DTD_For_catalog.dtd">
<MusicCatalog>

  <Artist ArtistID="Ar_0000" countryID="US">
    <Name>
      <FirstName>Katey </FirstName>
      <LastName>Berry</LastName>
    </Name>
  </Artist>

    <Artist ArtistID="Ar_0001" countryID="US">
    <Name>
      <FirstName>Justine </FirstName>
      <LastName>Temrilke</LastName>
    </Name>
  </Artist> 


   <Album AlbumID="AL_0000" ArtistID="Ar_0000" CompanyID="C_3" GenreName="Pop HipHop R_and_B">
      <Title>Calfornia Girls</Title>
      <Price>12</Price>      
      <Year>2012</Year>
    </Album>
    <Album AlbumID="AL_0001" ArtistID="Ar_0000" CompanyID="C_1" GenreName="Pop HipHop R_and_B">
      <Title>Confessions</Title>
      <Price>9</Price>
      <Year>2008</Year>
    </Album>
    <Album AlbumID="AL_0002" ArtistID="Ar_0000" CompanyID="C_10" GenreName="Pop HipHop R_and_B">
      <Title>Roar</Title>
      <Price>13</Price>
      <Year>2014</Year>
    </Album>
    <Album AlbumID="AL_0003" ArtistID="Ar_0000" CompanyID="C_4" GenreName=" HipHop R_and_B">
      <Title>Teenge Dream</Title>
      <Price>11</Price>
      <Year>2010</Year>
    </Album>  
    <Album AlbumID="AL_0004" ArtistID="Ar_0001" CompanyID="C_4" GenreName="HipHop R_and_B">
      <Title>Future of sex</Title>
      <Price>8</Price>
      <Year>2007</Year>
    </Album>
    <Album AlbumID="AL_0005" ArtistID="Ar_0001" CompanyID="C_5" GenreName="HipHop">
      <Title>Mirros</Title>
      <Price>8</Price>
      <Year>2013</Year>
    </Album>
    <Album AlbumID="AL_0006" ArtistID="Ar_0001" CompanyID="C_5" GenreName="Electro">
      <Title>Holly Grail</Title>
      <Price>9</Price> 
      <Year>2014</Year>
    </Album>
    <Album AlbumID="AL_0007" ArtistID="Ar_0001" CompanyID="C_6" GenreName="HipHop Electro">
      <Title>Give it to me</Title>
      <Price>5</Price>
      <Year>2005</Year>
    </Album>

    <Genre GenreName="Rap"/>
    <Genre GenreName="Country"/>
    <Genre GenreName="R_and_B"/>
    <Genre GenreName="HipHop"/>
    <Genre GenreName="House"/>
    <Genre GenreName="Pop"/>
    <Genre GenreName="Electro"/>
    <Genre GenreName="Blues"/>
    <Genre GenreName="Punck"/>
    <Genre GenreName="Rock"/>
    <Genre GenreName="Metal"/>
    <Genre GenreName="Alternative_Rock"/>

  <Company CompanyID="C_1">
   CBS Records
  </Company>
  <Company CompanyID="C_2">
  RCA
  </Company>
  <Company CompanyID="C_3">
    WEA   
  </Company>
  <Company CompanyID="C_4">
  Cloumbia
  </Company>
  <Company CompanyID="C_5">
   Virgin Records 
  </Company>
  <Company CompanyID="C_6">   
  Pickwick
  </Company>
  <Company CompanyID="C_7">
   Atlantic
  </Company>
  <Company CompanyID="C_8">
   Mega
  </Company>
  <Company CompanyID="C_9">
   Grammy
  </Company>
  <Company CompanyID="C_10">
   Wordo
  </Company>
  <Company CompanyID="C_11">
    Fox
  </Company>


  <Country countryID="US">
    United State  
  </Country>
  <Country countryID="UK">
    United Kingdom
  </Country>
  <Country countryID="FR">
    France
  </Country>
  <Country countryID="GR">
    Germany
  </Country>
  <Country countryID="ME">
    Mexico
  </Country>
  <Country countryID="SP">
    Spain
  </Country>
  <Country countryID="JP">
    Japneas
  </Country>

</MusicCatalog>

Xquery に関する私の問題は、期待どおりの結果が得られないことです。このクエリでは、会社名を取得し、名前で要素を作成し、それをインディーズにしてすべてのアルバムのタイトルを取得しようとしていますが、会社 ID のみを取得しています。多くのクエリで解決しようとしましたが、ほとんどが機能しません

 for $dc in distinct-values( //Album/@CompanyID ) 
 return element {string ($dc)} { 
   for $j in //Album[@CompanyID = $dc] return $j/Title 
 }

この別の試み

for $i in distinct-values(//MusicCatalog/Album/@CompanyID)  
return 
    if(compare($i,//MusicCatalog/Company/@CompanyID)) 
        then "element {string(//MusicCatalog/Company)}"

    {
        for $j in //MusicCatalog/Album[@CompanyID eq $i] return $j/Title
    }

}

私はこれを得ます

<c_3>
<title>Calfornia Girls</title>
<title>Roar/title>
</c_3>

手に入れたいと思いながら

<WEA>
<title>Calfornia Girls</title>
    <title>Roar/title>
</WEA>

別の問題は、複数の IDref であるため、ジャンル アルバムを取得することです。

4

1 に答える 1

3

会社名を要素名として使用する場合は、id ではなく名前を渡す必要があります。つまり、別のパス式で名前を検索します。

for $i in distinct-values(//MusicCatalog/Album/@CompanyID)  
return 
    element {translate(normalize-space(//MusicCatalog/Company[@CompanyID eq $i]), " ", "_")}

    {
        for $j in //MusicCatalog/Album[@CompanyID eq $i]
        return $j/Title
    }

}
于 2013-10-28T22:32:45.563 に答える