diff options
Diffstat (limited to 'relaxng.c')
-rw-r--r-- | relaxng.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -149,6 +149,7 @@ typedef enum { #define IS_PROCESSED (1 << 5) #define IS_COMPILABLE (1 << 6) #define IS_NOT_COMPILABLE (1 << 7) +#define IS_EXTERNAL_REF (1 << 8) struct _xmlRelaxNGDefine { xmlRelaxNGType type; /* the type of definition */ @@ -4662,6 +4663,8 @@ xmlRelaxNGParseImportRef(void *payload, void *data, xmlChar *name) { xmlRelaxNGDefinePtr def = (xmlRelaxNGDefinePtr) payload; int tmp; + def->dflags |= IS_EXTERNAL_REF; + tmp = xmlHashAddEntry(ctxt->grammar->refs, name, def); if (tmp < 0) { xmlRelaxNGDefinePtr prev; @@ -5668,6 +5671,12 @@ xmlRelaxNGCheckReference(xmlRelaxNGDefinePtr ref, xmlRelaxNGGrammarPtr grammar; xmlRelaxNGDefinePtr def, cur; + /* + * Those rules don't apply to imported ref from xmlRelaxNGParseImportRef + */ + if (ref->dflags & IS_EXTERNAL_REF) + return; + grammar = ctxt->grammar; if (grammar == NULL) { xmlRngPErr(ctxt, ref->node, XML_ERR_INTERNAL_ERROR, |