Rowlex에서 두 가지 다른 유형에서 동일한 이름의 속성을 정의하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1243410

문제

두 개의 다른 속성이 있지만 이름이 같은 두 클래스가있는 경우

[RdfSerializable]
public class Type1
{
    [RdfProperty(true), Name = "title"]
    public string Title { get; set; }
}

[RdfSerializable]
public class Type2
{
    [RdfProperty(true), Name = "title"]
    public string Title { get; set; }
}

RDF로 직렬화하고 http://www.w3.org/rdf/validator/ 서비스. 모든 것이 괜찮고 맞습니다. 그러나 OntologyExtractor.exe 도구를 사용하여 해당 클래스에서 올빼미 파일을 생성하려고 시도한 후에는 그 메시지가 표시됩니다. "Ontology Extraction이 실패했습니다. http://test.org/1.0#title "상위 클래스가 정확하고 동일한 클래스가 동일한 클래스와 동일한 클래스와 동일한 상황을 가진 RDF 사양이 있습니다."이것은 이상한 메시지입니다. "이것은 이상한 메시지입니다.

도움이 되었습니까?

해결책

나는 그것이 Rowlex의 버그라고 기대합니다. 귀하의 사례는 유효한 사례이지만 OntologyExtractor를 썼을 때 준비하지 않았다고 가정합니다. 가능한 한 빨리 수정 사항을 발표하려고합니다.

편집하다: rowlex2.1이 출시되면 다운로드 할 수 있습니다. http://rowlex.nc3a.nato.int. 버전 2.1 (다른 것 중에서)은 이제 공유 속성 기능을 지원합니다. 질문의 정확한 코드는 여전히 동일한 오류가 발생합니다! 이를 극복하려면 다음과 같이 코드의 장식을 변경해야합니다.

[RdfSerializable] 
public class Type1 
{ 
    [RdfProperty(true, Name = "title", ExcludeFromOntology=true)] 
    public string Title { get; set; } 
} 

[RdfSerializable] 
public class Type2 
{ 
    [RdfProperty(true, Name = "title", 
               DomainAsType = new Type[]{typeof(Type1), typeof(Type2)})] 
    public string Title { get; set; } 
} 

OntologyExtractor.exe를 사용 하여이 코드는 Type1 및 Type2의 유니온 인 익명 도메인 클래스의 올빼미 속성을 초래합니다.
이것은 기술적으로 완벽하게 올바른 솔루션이지만 속성에서 도메인을 설정하면 가능한 향후 재사용이 제한됩니다. 솔루션으로 속성 도메인을 로컬 제한으로 대체 할 수 있습니다. 다음과 같이 달성 할 수 있습니다.

[RdfSerializable] 
public class Type2 
{ 
    [RdfProperty(true, Name = "title", 
               DomainAsType = new Type[]{typeof(Type1), typeof(Type2)},
               UseLocalRestrictionInsteadOfDomain = true)] 
    public string Title { get; set; } 
} 

UselocalRestrictioninSteadain을 설정하지 않으면 Rowlex는 현재 컨텍스트에 따라 도메인과 로컬 제한 중에서 선택합니다.

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