RelaxNG:根据另一个元素定义元素

时间:2014-09-23 13:22:59

标签: relaxng

我有一个.RNC文件,我在其中定义了所有XML元素,这些元素由relax ng编译成XSD。

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

假设我定义了一个这样的元素:

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

现在我想扩展,例如:

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

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

1 个答案:

答案 0 :(得分: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 }
}