Pergunta

Se eu tiver essas duas classes que têm duas propriedades diferentes mas com o mesmo nome:

[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; }
}

e tentar serializar-los a RDF e validá-los com http://www.w3.org / RDF / Validador / serviço. Tudo está bem e eles estão corretos. Mas depois que eu tentar gerar arquivos OWL dessas classes com ferramenta OntologyExtractor.exe eu recebo essa mensagem: "Extração Ontologia falhou. http://test.org/1.0#title é atribuído a mais de um tipo." Esta é a mensagem mais estranho que as classes mais altas estão corretas e há algumas especificações RDF que tem mesma situação com diferentes classes que têm mesmas propriedades nomeadas.

Foi útil?

Solução

Espero que é um erro no ROWLEX. Seu caso é válida, mas presumo que não se preparar para ela quando eu escrevi OntologyExtractor. Vou tentar liberar uma correção o mais rápido possível.

Editar : ROWLEX2.1 é liberado, você pode baixá-lo http: / /rowlex.nc3a.nato.int . Versão 2.1 (entre outros) agora suporta a funcionalidade de propriedade compartilhada. O código são em questão ainda resultaria o mesmo erro! Para superar isso, você deve alterar a decoração de seu código da seguinte forma:

[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; } 
} 

Usando o OntologyExtractor.exe, este código irá resultar uma propriedade OWL de com uma classe de domínio anônima que é a união de Type1 e Type2.
Embora isso seja tecnicamente solução perfeitamente correto, domínios de configuração nas propriedades limitar a sua possível reutilização futuro. Como solução, você pode querer substituir o domínio da propriedade com restrições locais. Você pode conseguir isso da seguinte forma:

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

Se você deixar UseLocalRestrictionInsteadOfDomain não definido, ROWLEX escolhe entre domínio e restrição de local de acordo com o contexto atual.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top