Pregunta

Si tengo esas dos clases que tienen dos propiedades diferentes pero con el mismo nombre:

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

y tratar de serializarlos a RDF y validarlos con http://www.w3.org / RDF / Validador / servicio . Todo está bien y que son correctos. Pero después de intento generar archivos OWL de esas clases con herramienta OntologyExtractor.exe consigo ese mensaje: "Ontología de extracción falló. http://test.org/1.0#title se asigna a más de una tipo." Esto es extraño mensaje como las clases altas son correctos y hay algunas especificaciones RDF que tiene misma situación con diferentes clases que tienen mismas propiedades con nombre.

¿Fue útil?

Solución

espero que es un error en ROWLEX. Su caso es válida, pero supongo que no prepararse para ella cuando escribí OntologyExtractor. Voy a tratar de liberar una solución lo más pronto posible.

Editar : ROWLEX2.1 se libera, puede descargarlo desde http: / /rowlex.nc3a.nato.int. Versión 2.1 (entre otros) soporta ahora la funcionalidad de propiedad compartida. El código exacto de la cuestión sería todavía como resultado el mismo error! Para superar esto, debe alterar la decoración de su código como sigue:

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

Uso de la OntologyExtractor.exe, este código dará como resultado una propiedad de OWL con una clase de dominio anónima que es la unión de Tipo 1 y Tipo 2.
Si bien esto es técnicamente perfecta solución correcta, el establecimiento de dominios en las propiedades limitar su posible reutilización futura. Como solución, puede que desee sustituir el dominio propiedad con las restricciones locales. Usted puede lograr que la siguiente manera:

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

En caso de que deje UseLocalRestrictionInsteadOfDomain no establece, ROWLEX elige entre el dominio y la restricción local de acuerdo al contexto actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top