001: /*
002: * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.xml.internal.xsom.parser;
027:
028: import com.sun.xml.internal.xsom.XSSchema;
029:
030: import java.util.Set;
031:
032: /**
033: * Represents a parsed XML schema document.
034: *
035: * <p>
036: * Unlike schema components defined in <tt>XS****</tt> interfaces,
037: * which are inherently de-coupled from where it was loaded from,
038: * {@link SchemaDocument} represents a single XML infoset that
039: * is a schema document.
040: *
041: * <p>
042: * This concept is often useful in tracking down the reference
043: * relationship among schema documents.
044: *
045: * @see XSOMParser#getDocuments()
046: * @author Kohsuke Kawaguchi
047: */
048: public interface SchemaDocument {
049: /**
050: * Gets the system ID of the schema document.
051: *
052: * @return
053: * null if {@link XSOMParser} was not given the system Id.
054: */
055: String getSystemId();
056:
057: /**
058: * The namespace that this schema defines.
059: *
060: * <p>
061: * More precisely, this method simply returns the <tt>targetNamespace</tt> attribute
062: * of the schema document. When schemas are referenced in certain ways
063: * (AKA chameleon schema), schema components in this schema document
064: * may end up defining components in other namespaces.
065: *
066: * @return
067: * can be "" but never null.
068: */
069: String getTargetNamespace();
070:
071: /**
072: * Gets {@link XSSchema} component that contains all the schema
073: * components defined in this namespace.
074: *
075: * <p>
076: * The returned {@link XSSchema} contains not just components
077: * defined in this {@link SchemaDocument} but all the other components
078: * defined in all the schemas that collectively define this namespace.
079: *
080: * @return
081: * never null.
082: */
083: XSSchema getSchema();
084:
085: /**
086: * Set of {@link SchemaDocument}s that are included/imported from this document.
087: *
088: * @return
089: * can be empty but never null. read-only.
090: */
091: Set<SchemaDocument> getReferencedDocuments();
092:
093: /**
094: * Gets the {@link SchemaDocument}s that are included from this document.
095: *
096: * @return
097: * can be empty but never null. read-only.
098: * this set is always a subset of {@link #getReferencedDocuments()}.
099: */
100: Set<SchemaDocument> getIncludedDocuments();
101:
102: /**
103: * Gets the {@link SchemaDocument}s that are imported from this document.
104: *
105: * @param targetNamespace
106: * The namespace URI of the import that you want to
107: * get {@link SchemaDocument}s for.
108: * @return
109: * can be empty but never null. read-only.
110: * this set is always a subset of {@link #getReferencedDocuments()}.
111: */
112: Set<SchemaDocument> getImportedDocuments(String targetNamespace);
113:
114: /**
115: * Returns true if this document includes the given document.
116: *
117: * <p>
118: * Note that this method returns false if this document
119: * imports the given document.
120: */
121: boolean includes(SchemaDocument doc);
122:
123: /**
124: * Returns true if this document imports the given document.
125: *
126: * <p>
127: * Note that this method returns false if this document
128: * includes the given document.
129: */
130: boolean imports(SchemaDocument doc);
131:
132: /**
133: * Set of {@link SchemaDocument}s that include/import this document.
134: *
135: * <p>
136: * This works as the opposite of {@link #getReferencedDocuments()}.
137: *
138: * @return
139: * can be empty but never null. read-only.
140: */
141: Set<SchemaDocument> getReferers();
142: }
|