문제

내가 만든 클래스는 자산의 하위 클래스 http://schema.org/CreativeWork 자산는 2 개의 서브 클래스고 말 문서 및 출판물

이제 나는 인스턴스의 문서 또는 출판 클래스입니다.자산는 추상 클래스입니다.

면 인쇄 메타데이터에 대한 기사 또는 책도 인쇄하려는 형식의 자산입니다.이 경우에는 것 문서 또는 게시합니다.

나는 다음 쿼리를 실행합니다

SELECT ?id ?title ?type
WHERE
{
   ?asset rdf:type Asset ;
          somePrefix:id ?id ;
          somePrefix:title ?title ;
          rdf:type ?type .
}

지금 대신 인쇄 형식으로 문서 또는 출판물에 대한 모든 자산이 나에서 여러 값 rdf:유형입니다.예

 id  title                    Type
 1   this is a article        CreativeWork
 1   this is a article        Asset
 1   this is a article        Article
 2   this is a publication    CreativeWork
 2   this is a publication    Asset
 2   this is a publication    Article

고 싶어 어떻게든 인쇄 문서 또는 출판물에서 유형 열

내가 어떻게 이것을 달성할 수?

도움이 되었습니까?

해결책

당신을 이해할 때, 당신의 등급 계층 구조는 다음과 같습니다.

CreativeWork
  Asset
    Article
    Publication
.

몇 가지 옵션이 있습니다.

가장 단순한 것은 :

로이 값을 지정할 수있는이를 지정할 수있는 값을 고려하고 싶습니다.
SELECT ?id ?title ?type
WHERE
{
   values ?type { Article Publication }
   ?asset rdf:type Asset ;
          somePrefix:id ?id ;
          somePrefix:title ?title ;
          rdf:type ?type .
}
.

이것은 당신이 할 수있는 가장 구체적인 것입니다, 당신은 유형이 기사 또는 출판만을 보장합니다.

krantivework and aset

물론 나중에 다른 하위 클래스를 정의 할 수 있으며 해당 할 때마다 블록에 더 많은 유형을 추가해야 할 수도 있습니다. CreativeWork 및 Asset을 필터링하는 것을 간단히 필터링하는 것이 좋습니다.

SELECT ?id ?title ?type
WHERE
{
   ?asset rdf:type Asset ;
          somePrefix:id ?id ;
          somePrefix:title ?title ;
          rdf:type ?type .
   filter ( ?type != Asset && ?type != CreativeWork )
}
.

다음을 수행 할 수도 있습니다.

filter ( ?type NOT IN ( Asset, CreativeWork ) )
.

최대 특정 클래스 만 얻는

이것은 클래스가 어떤 수업을 할 수 있는지, 나중에 기사 또는 출판물의 하위 클래스를 추가하는 경우, 저널 article ⊑ 기사의 서브 클래스를 추가하면 결과가 발생할 것입니다. 기사와 저널을 모두 포함하고, 그렇게 원하지 않을 수도 있습니다. 당신이 원하는 것은 대신에, 개인을위한 "가장 구체적인"클래스입니다. 즉, 개인의 클래스 C는 개인이 다른 유형 D ∈ C를 형성하지 않도록 원하는 것입니다 ( 다른 은 중요합니다. .) 일반적인 아이디어는 SpaRQL 쿼리를 사용하여 온톨로지에서 적어도 공통된 하위 자를 얻는 방법은 무엇입니까? , 다른 질문과 함께 그러나 여기에서 중요한 부분을 쉽게 재현 할 수 있습니다 :

SELECT ?id ?title ?type
WHERE
{
   ?asset rdf:type Asset ;
          somePrefix:id ?id ;
          somePrefix:title ?title ;
          rdf:type ?type .

   filter not exists {                    # Don't take ?type as a result if
      ?asset rdf:type ?subtype .          # ?asset has some other ?subtype 
      ?subtype rdfs:subClassOf* ?type .   # that is a subclass of ?type 
      filter ( ?subtype != ?type )        # (other than ?type itself).
   }
}
.

이렇게하면 개인이있는 계급에서 "가장 깊은"클래스를 얻을 수 있습니다. 개인이 다른 사람의 하위 클래스 인 클래스의 구성원이라면 여전히 여러 결과를 반환 할 수 있습니다. 물론,이 경우는 아직 모든 결과에 관심이있을 것입니다.

다른 팁

당신은 당신이 출력하기 때문에,귀하의 자산이 모든 자산 및 CreativeWorks,그리고 그들은 또한 수사 또는 출판물.는 경우에만 인쇄하고 싶은 서브 클래스의 자산,그 다음을 사용할 수 있습니다 쿼리를 제한하는 값의 ?type (당신과 같은 추가로 라인):

SELECT ?id ?title ?type
WHERE
{
     ?asset rdf:type Asset ;
            somePrefix:id ?id ;
            somePrefix:title ?title ;
            rdf:type ?type .
     ?type rdfs:subClassOf Asset . 
}

rdfs 네임스페이스의 접두사 http://www.w3.org/2000/01/rdf-schema#.
그것이 의미하는 ?type 해야 하위 클래스의 자산이다.

첫 번째 제한(?asset rdf:type Asset)지 않은 실제적으로 필요하지만,저는 그것을 떠나 명확성을 가지고 있기 때문에 당신이 그것에서 당신의 초기 쿼리가 있습니다.할 수 있습이 안전하게 건너뛰기습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top