Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/**
* Copyright (C) 2014-2020 Philip Helger (www.helger.com)
* philip[at]helger[dot]com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.helger.schematron.pure.model;
import java.util.Map;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
import com.helger.commons.ValueEnforcer;
import com.helger.commons.annotation.ReturnsMutableCopy;
import com.helger.commons.collection.CollectionHelper;
import com.helger.commons.collection.impl.CommonsArrayList;
import com.helger.commons.collection.impl.CommonsLinkedHashMap;
import com.helger.commons.collection.impl.ICommonsList;
import com.helger.commons.collection.impl.ICommonsOrderedMap;
import com.helger.commons.string.StringHelper;
import com.helger.commons.string.ToStringGenerator;
import com.helger.schematron.CSchematron;
import com.helger.schematron.CSchematronXML;
import com.helger.schematron.pure.errorhandler.IPSErrorHandler;
import com.helger.xml.microdom.IMicroElement;
import com.helger.xml.microdom.MicroElement;
/**
* A single Schematron pattern-element.
* A structure, simple or complex. A set of rules giving constraints that are in
* some way related. The id attribute provides a unique name for the pattern and
* is required for abstract patterns.
* The title and p elements allow rich documentation.
* The icon, see and fpi attributes allow rich interfaces and documentation.
* When a pattern element has the attribute abstract with a value true, then the
* pattern defines an abstract pattern. An abstract pattern shall not have a
* is-a attribute and shall have an id attribute.
* Abstract patterns allow a common definition mechanism for structures which
* use different names and paths, but which are at heart the same. For example,
* there are different table markup languages, but they all can be in large part
* represented as an abstract pattern where a table contains rows and rows
* contain entries, as defined in the following example using the default query
* language binding:
*
*
* <sch:pattern abstract="true" id="table">
* <sch:rule context="$table">
* <sch:assert test="$row">
* The element <sch:name/> is a table. Tables contain rows.
* </sch:assert>
* </sch:rule>
* <sch:rule context="$row">
* <sch:assert test="$entry">
* The element <sch:name/> is a table row. Rows contain entries.
* </sch:assert>
* </sch:rule>
* </sch:pattern>
*
*
* When a pattern element has the attribute is-a with a value specifying the
* name of an abstract pattern, then the pattern is an instance of an abstract
* pattern. Such a pattern shall not contain any rule elements, but shall have
* param elements for all parameters used in the abstract pattern.
* The following example uses the abstract pattern for tables given above to
* create three patterns for tables with different names or structures.
*
*
*
* When creating an instance of an abstract pattern, the parameter values
* supplied by the param element replace the parameter references used in the
* abstract patterns. The examples above use the default query language binding
* in which the character $ is used as the delimiter for parameter references.
*
* Thus, given the abstract patterns defined earlier in this clause, the
* patterns defined above are equivalent to the following, with the id elements
* shown expanded:
*
*
* <sch:pattern id="HTML_table">
* <sch:rule context="table">
* <sch:assert test="tr">
* The element table is a table. Tables containing rows.
* </sch:assert>
* </sch:rule>
* <sch:rule context="tr">
* <sch:assert test="td|th">
* The element tr is a table row. Rows contain entries.
* </sch:assert>
* </sch:rule>
* </sch:pattern>
* <sch:pattern id="CALS_table">
* <sch:rule context="table">
* <sch:assert test=".//row">
* The element table is a table. Tables containing rows.
* </sch:assert>
* </sch:rule>
* <sch:rule context=".//row">
* <sch:assert test="cell">
* The element row is a table row. Rows contain entries.
* </sch:assert>
* </sch:rule>
* </sch:pattern>
* <sch:pattern id="calendar">
* <sch:rule context="calendar/year">
* <sch:assert test="week">
* The element year is a table. Tables containing rows.
* </sch:assert>
* </sch:rule>
* <sch:rule context="week">
* <sch:assert test="day">
* The element week is a table row. Rows contain entries.
* </sch:assert>
* </sch:rule>
* </sch:pattern>
*
*
* @author Philip Helger
*/
@NotThreadSafe
public class PSPattern implements IPSElement, IPSHasID, IPSHasForeignElements, IPSHasIncludes, IPSHasLets, IPSHasRichGroup
{
private boolean m_bAbstract = false;
private String m_sID;
private String m_sIsA;
private PSRichGroup m_aRich;
private final ICommonsList