@ Nonnull public PSRule readRuleFromXML ( @ Nonnull final IMicroElement eRule ) { final PSRule ret = new PSRule ( ) ; final PSRichGroup aRichGroup = new PSRichGroup ( ) ; final PSLinkableGroup aLinkableGroup = new PSLinkableGroup ( ) ; eRule . forAllAttributes ( ( sNS , sAttrName , sVal ) -> { final String sAttrValue = _getAttributeValue ( sVal ) ; if ( sAttrName . equals ( CSchematronXML . ATTR_FLAG ) ) ret . setFlag ( sAttrValue ) ; else if ( sAttrName . equals ( CSchematronXML . ATTR_ABSTRACT ) ) ret . setAbstract ( StringParser . parseBool ( sAttrValue ) ) ; else if ( sAttrName . equals ( CSchematronXML . ATTR_CONTEXT ) ) ret . setContext ( sAttrValue ) ; else if ( sAttrName . equals ( CSchematronXML . ATTR_ID ) ) ret . setID ( sAttrValue ) ; else if ( PSRichGroup . isRichAttribute ( sAttrName ) ) _handleRichGroup ( sAttrName , sAttrValue , aRichGroup ) ; else if ( PSLinkableGroup . isLinkableAttribute ( sAttrName ) ) _handleLinkableGroup ( sAttrName , sAttrValue , aLinkableGroup ) ; else ret . addForeignAttribute ( sAttrName , sAttrValue ) ; } ) ; ret . setRich ( aRichGroup ) ; ret . setLinkable ( aLinkableGroup ) ; eRule . forAllChildElements ( eRuleChild -> { if ( CSchematron . NAMESPACE_SCHEMATRON . equals ( eRuleChild . getNamespaceURI ( ) ) ) { final String sLocalName = eRuleChild . getLocalName ( ) ; if ( sLocalName . equals ( CSchematronXML . ELEMENT_INCLUDE ) ) ret . addInclude ( readIncludeFromXML ( eRuleChild ) ) ; else if ( sLocalName . equals ( CSchematronXML . ELEMENT_LET ) ) ret . addLet ( readLetFromXML ( eRuleChild ) ) ; else if ( sLocalName . equals ( CSchematronXML . ELEMENT_ASSERT ) || sLocalName . equals ( CSchematronXML . ELEMENT_REPORT ) ) ret . addAssertReport ( readAssertReportFromXML ( eRuleChild ) ) ; else if ( sLocalName . equals ( CSchematronXML . ELEMENT_EXTENDS ) ) ret . addExtends ( readExtendsFromXML ( eRuleChild ) ) ; else _warn ( ret , "Unsupported Schematron element '" + sLocalName + "'" ) ; } else ret . addForeignElement ( eRuleChild . getClone ( ) ) ; } ) ; return ret ; }
Read a &lt ; rule&gt ; element