2014-09-23 49 views
1

我有一个.RNC文件,我在其中定义了所有我的XML元素,它们被relax ng编译到XSD中。RelaxNG:定义基于另一个元素的元素

我有几个共享许多属性的元素,它越来越杂乱的维护......因此我想通过使用/模拟某种继承来集中化这些信息。

比方说,我这样定义的元素:

person = element PERSON { 
    attribute name { text }, 
    attribute city { text } 
} 

现在我想延长,是这样的:

employee = element EMPLOYEE extends PERSON { 
    attribute company { text } 
} 

这可能吗?怎么样?提前致谢。

回答

0

在Relax NG中没有扩展元素的概念。但是你可以在多个地方使用定义。例如,下面的模式定义了一个personLike结构(即“类似人”的东西)。然后这个personLike定义用于PERSON元素和EMPLOYEE元素。

start = (person | employee)+ 

personLike = 
    attribute name { text }, 
    attribute city { text } 

person = element PERSON { 
    personLike 
} 

employee = element EMPLOYEE { 
    personLike, 
    attribute company { text } 
} 
相关问题